Forza l'autenticazione cert del client SSL / TLS anche se il server non lo richiede?

5

Di solito il server specifica nel messaggio Server Hello se è richiesto / voluto un certificato client.

Qualcuno sa se è possibile eseguire un'autenticazione tramite il certificato cliente se il server non lo richiede?

E se possibile qualcuno conosce un client che consente di forzare l'autenticazione di un certificato client?

    
posta Robert 17.05.2013 - 11:05
fonte

2 risposte

6

Il client non invierà un certificato a meno che il server lo richieda con un messaggio Certificate Request (vedi lo standard , sezione 7.4.4). Se il server non richiede un certificato, è probabile che l'invio di un messaggio Certificate e un CertificateVerify dal client implichino una chiusura immediata dal server (con un avviso unexpected_message ). La formulazione dello standard non è eccessivamente chiara su quell'argomento, ma include ancora questo paragrafo nella sezione 7.4:

The handshake protocol messages are presented below in the order they MUST be sent; sending handshake messages in an unexpected order results in a fatal error. Unneeded handshake messages can be omitted, however. Note one exception to the ordering: the Certificate message is used twice in the handshake (from server to client, then from client to server), but described only in its first position. The one message that is not bound by these ordering rules is the HelloRequest message, which can be sent at any time, but which SHOULD be ignored by the client if it arrives in the middle of a handshake.

Questo suggerisce piuttosto strongmente che un messaggio Certificate imprevisto dal client non verrà ignorato e invece "causerà un errore fatale".

Ora puoi immaginare una modifica attiva da parte di un'entità Man-in-the-Middle , che inietta un messaggio Certificate Request in più nel flusso dal server e blocca il Certificate e Certificate Verify dal client. Questo è possibile, dal momento che l'iniziale stretta di mano viene eseguita, per necessità, con record non protetti.

Tuttavia, questo farà sì che l'handshake fallisse quando verranno scambiati i messaggi Finished . Questi messaggi sono protetti (si verificano dopo il passaggio ai parametri di sicurezza appena negoziati). Il contenuto dei messaggi Finished è un hash di tutti i messaggi di handshake inviati finora. Poiché il client e il server non hanno visualizzato gli stessi messaggi (dal punto di vista del client, c'erano% extraCertificate Request, Certificate e Certificate Verify messaggi), i valori dell'hash non corrispondono e il client e il server interromperà la connessione.

Quindi non solo non è chiaro ciò che un utente malintenzionato potrebbe ottenere forzando un'autenticazione client che il server non ha richiesto, ma non funzionerà affatto a causa del modo in cui vengono calcolati i messaggi Finished .

    
risposta data 17.05.2013 - 13:41
fonte
5

Does anybody know if it is possible to perform an authentication via client cert if the server does not request it?

No. Se il server non richiede un certificato client e il client tenta di inviarlo comunque è molto probabile che il server interromperà semplicemente il tentativo di connessione poiché non corrisponde alla risposta prevista.

And if it possible does anybody know a client that allows to force a client certificate authentication?

Trovo più che curioso che un client possa forzare un server ad accettare un certificato se non è stato richiesto. La risposta a questa domanda deve quindi essere un no piuttosto qualificato.

Ad esempio; la sezione 7.4.7 in RFC5246 afferma che il messaggio di scambio chiave del client DEVE essere il primo messaggio a meno che non sia stato richiesto un certificato. Poiché non è stato richiesto alcun certificato e il client tenta ancora di inviare uno, il server non può continuare a negoziare una connessione con il client.

    
risposta data 17.05.2013 - 13:12
fonte

Leggi altre domande sui tag