Quando una parte si autenticano utilizzando i certificati, dimostra essenzialmente che può utilizzare la chiave privata associata alla chiave pubblica nel certificato, poiché presuppone che la chiave privata sia segreta e sia nota solo al proprietario del certificato.
Per dimostrare l'accesso alla chiave privata, la parte che ha effettuato l'autenticazione firma una sfida che è almeno in parte determinata dal pari (per scoraggiare gli attacchi di replay). Il peer può quindi verificare la firma utilizzando la chiave pubblica all'interno del certificato pubblico.
Poiché una firma riuscita dimostra solo l'accesso alla chiave privata per un certificato specifico, il peer deve anche verificare che il certificato corrisponda alle sue aspettative, in genere che sia firmato da un'autorità di certificazione (CA) attendibile, abbia un argomento specifico , non è scaduto o revocato e ha le estensioni di utilizzo della chiave corrette.
All'interno di TLS solitamente viene eseguita solo l'autenticazione del server, la firma fa parte del messaggio ServerKeyExchange
e viene eseguita su vari dati che includono anche il ClientHello.random
determinato dal client. Il client richiede in genere che il nome host corretto corrisponda ai certificati server Subject Alternative Names (SAN) o (più vecchio e obsoleto) corrisponda ai soggetti del certificato CN.
Con l'autenticazione reciproca il server richiede anche al client di autenticarsi. Questo viene fatto usando il messaggio CertificateRequest
. Questo messaggio può anche fornire un elenco di CA che il server è disposto ad accettare come emittente del certificato client in modo che l'applicazione client possa scegliere il certificato previsto. Se un cliente ha ricevuto questo CertificateRequest
e ha un certificato client corrispondente, invierà un messaggio Certificate
con questo certificato. Inoltre invierà un messaggio di CertificateVerify
che include una firma creata con la chiave privata dei certificati client e che copre tutti i messaggi di handshake inviati fino ad ora - che includono il% diServerHello.random
determinato dal server.
La precisione con cui il certificato client è convalidato e associato a un cliente specifico non è definita, ma è normale che qualsiasi certificato emesso da una CA specifica sia accettato e che il nome o l'e-mail del cliente vengano estratti dagli oggetti del certificato CN.