Certificato client in SSL HandShake non protetto?

5

Immagina di avere un'applicazione che sta tentando di stabilire una connessione sicura con un server usando SSL. Ora vogliamo che l'utente si autentichi con un certificato client che memorizza in un keystore sicuro.

Quindi, se leggo questa specifica destra sul server sta inviando il suo certificato durante il protocollo di handshake ed è in grado di richiedere un certificato dal client con una richiesta di certificato, se necessario. Ora l'utente invia il suo certificato al server proprio come fatto prima del server, il che significa in chiaro in quanto non sono state ancora scambiate le chiavi.

Quello che non sto ottenendo ora è, se il certificato client viene inviato in chiaro e il certificato non è associato a un dispositivo specifico e la chiave pubblica del client all'interno del suo certificato non viene utilizzata per generare la chiave simmetrica che è usato per la crittografia in seguito, perché non è possibile che un utente malintenzionato annusi il protocollo di handshake tra il client e il server, supponendo che sia seduto nella stessa LAN wireless della sua vittima? Come se potesse vedere il certificato del cliente, copiarlo e usarlo da solo.

Quindi, come viene impedito questo scenario? Perché l'attaccante non sarebbe in grado di modificare alcuni dati del certificato poiché non ha la chiave privata con cui è stato firmato il certificato, ma non sarebbe sufficiente copiare il certificato per rubare l'identità della vittima? Cosa mi manca qui? Il certificato è legato al dispositivo, dopo tutto? Ma pensavo che non sarebbe stato dato che conteneva solo alcune informazioni sul client stesso e sulla sua chiave pubblica.

Ho pensato che sarebbe stata una buona idea inviare il certificato del cliente dopo il protocollo di handshake quando una chiave simmetrica è stata scambiata e i dati dell'applicazione sono stati crittografati. So che potresti anche utilizzare credenziali utente aggiuntive come un nome utente e una password, ma sto solo parlando della sicurezza del certificato client ora.

Quindi cosa ne pensi?

    
posta ESer 27.11.2012 - 17:00
fonte

4 risposte

6

Il certificato contiene solo la chiave pubblica: si tratta di dati pubblici. La parte importante non è il messaggio Certificate inviato dal client, ma il messaggio CertificateVerify che il client invia anche. Quel messaggio contiene una firma digitale che il cliente calcola usando la sua chiave privata e i precedenti messaggi di handshake. L'utente malintenzionato può annusare tutto ciò che desidera, non riceverà la chiave privata, che non viene inviata e non sarà in grado di calcolare un'altra firma, applicabile su un altro scambio SSL.

    
risposta data 27.11.2012 - 17:52
fonte
4

Anche quando il certificato del cliente è visibile, la firma fatta usando la chiave privata non può essere falsificata. Le risposte precedenti hanno fornito maggiori dettagli sul messaggio Certificate Verify , ma il principio della chiave pubblica / privata è lo stesso dei certificati server (o meccanismi crittografici asimmetrici in generale): se non si dispone della chiave privata, non è possibile impersonare l'entità a cui è stato rilasciato il certificato.

Un problema secondario dell'autenticazione del certificato client è che, se eseguito durante l'handshake iniziale, il certificato stesso è visibile agli intercettatori in chiaro. In alcuni casi, questo potrebbe non essere soddisfacente, poiché questo potrebbe rivelare l'identità dell'utente (ad esempio CN=Bob Smith ).

Un modo per mitigare questo è usare l'autenticazione client solo in un handshake rinegoziato.

    
risposta data 27.11.2012 - 23:30
fonte
2

Il client firmerà il proprio messaggio con la propria chiave privata che può essere decifrata usando la chiave pubblica che è condivisa apertamente e considerata attendibile come corrispondente al client. Poiché il server può decodificare queste informazioni con la chiave pubblica del client, conosce le informazioni provenienti dal client. Nel caso in cui il prossimo passo della negoziazione sia RSA, il contenuto del pacchetto è una parte di una chiave crittografata con la chiave pubblica del server, quindi solo il server può decodificare il secondo livello di crittografia.

Come per un utente malvagio che si accinge al certificato e tenta di dirottare la sessione, il server ha la chiave pubblica per l'utente e l'attaccante non sarà in grado di generare informazioni che decodificheranno con quella chiave pubblica, quindi la connessione è garantito che l'originatore della connessione continuerà ad essere il client della connessione.

Se il certificato client non è pre-condiviso, sarebbe possibile impedire che una sessione si formi con il client e sostituire la chiave pubblica di un utente malintenzionato, ma a quel punto l'utente di destinazione non si troverebbe nella sessione e non lo farebbe avere le informazioni chiave per la sessione. La stessa prevenzione MITM si applica come normale certificato server SSL dopo l'iniziale handshake, la fornitura di un certificato client garantisce semplicemente che l'identità del client rimane la stessa su una o più sessioni.

    
risposta data 27.11.2012 - 17:51
fonte
1

Anche qualcos'altro da considerare. Per rendere illecito il certificato di un cliente è necessario un certificato che è stato firmato da un'Autorità di certificazione - che è molto lavoro garantire per quello che sei. Il client dovrebbe fidarsi solo dei certificati che sono stati firmati da una rispettabile CA.

    
risposta data 27.11.2012 - 21:06
fonte

Leggi altre domande sui tag