Metodo più sicuro per i certificati autofirmati sul client?

1

Contesto del problema

Sto scrivendo un pezzo di middleware. Il middleware viene eseguito su un computer client. Scarica materiale da un server (utilizzando il normale SSL), decodifica il materiale utilizzando una chiave privata sul computer client e fornisce un'interfaccia standard per l'accesso a applicazioni di terze parti. Le applicazioni di terze parti prevedono un certificato SSL, anche quando sono configurate per connettere il mio middleware su localhost . Non voglio che i miei utenti debbano fare clic sulle eccezioni di sicurezza, e in questi giorni non tutte le applicazioni consentono di fare eccezioni di sicurezza.

Pertanto, dopo l'installazione la mia applicazione deve supportare una connessione SSL senza che l'utente debba combattere contro un certificato autofirmato, ma ovviamente senza aprire l'utente agli attacchi MITM.

Soluzione proposta

Questo è il piano migliore che ho adesso per il processo di installazione del client:

  1. Genera una CA localmente
  2. Genera un certificato localmente per il dominio localhost
  3. Utilizza la CA per firmare il certificato
  4. elimina il file .key dalla CA in modo che non possa mai essere riutilizzato
  5. installa il file .cert CA nell'elenco di CA attendibili del sistema

Domanda

  • Ci sono dei buchi di sicurezza in questo piano?
  • Questa strategia è in uso altrove?
  • C'è un modo migliore per affrontare il problema?

Chiarimento

Vorrei essere molto chiaro, il server ha un certificato SSL. Quando il middleware parla al server, utilizza SSL. Questo non è in discussione. È la connessione tra il client di terze parti e il middleware (entrambi sul computer client) in questione.

Che cosa deve funzionare: Ho bisogno di client di terze parti per connettermi al mio middleware come se fosse un server remoto in una fasion senza interruzioni. Se il client di terze parti fosse un browser, sembrerebbe una piccola icona di blocco verde accanto a https. L'utente non deve accettare eccezioni di sicurezza. Alcuni client di terze parti non consentono affatto eccezioni di sicurezza, con conseguente rifiuto totale dei certificati autofirmati. Ovviamente è odioso per i miei utenti.

Quello che sto cercando di proteggere da: non voglio aggiungere una CA al computer client che consenta a chiunque abbia accesso alla macchina di eseguire attacchi MITM. Questo è il motivo per cui eliminerei il file .key di CA non appena è stato firmato il certificato localhost . In teoria, un attacco MITM potrebbe essere lanciato con solo il certificato localhost generato, ma solo contro localhost connessioni e non contro www.mybank.com .

Quello che non vedo come una minaccia: chiunque abbia accesso al computer client avrà già accesso a tutto ciò che passa tra il client di terze parti e il middleware, come la maggior parte dei client di terze parti non t crittografare i materiali che ricevono dal middleware. Pertanto non vedo la sicurezza del certificato localhost generato come particolarmente rilevante.

    
posta rexroni 05.10.2017 - 07:50
fonte

2 risposte

1

La domanda che devi chiarire è ciò che stai cercando di proteggere. La soluzione va bene se tutto ciò di cui hai bisogno è la piccola icona con il lucchetto verde nel browser, ma diventa molto più complicata quando inizi a richiederne di più.

Ad esempio, stai cercando di proteggere l'applicazione da attacchi (quali attacchi?), o stai cercando di proteggere l'utente da un utente malintenzionato riutilizzando il certificato localhost per altri motivi?

In ogni caso, un utente malintenzionato sulla macchina può ottenere l'accesso alla chiave privata non elaborata del certificato localhost o accedere a utilizzare la chiave privata, indipendentemente dallo stato della CA.

Questo può essere reso più difficile eseguendo il servizio come account di servizio separato e bloccando la chiave per quell'utente, ma qualsiasi amministratore della macchina può ignorarlo. Puoi quindi attenuarlo ulteriormente assicurandoti che gli utenti umani non stiano eseguendo come admin (questo naturalmente si rivela essere la parte più difficile).

    
risposta data 05.10.2017 - 17:18
fonte
0

Dipende dalla tua relazione con le persone che consumeranno il servizio che stai progettando. Quello che descrivi significa che non puoi revocare il certificato emesso. Come faresti tu (o qualcun altro) a rimuovere la fiducia per il certificato?

Is there a better way to approach the problem?

Vai a comprare un certificato da un'autorità di certificazione pubblica esistente (o ottenerne uno da Let's Encrypt).

    
risposta data 05.10.2017 - 14:41
fonte