L'autenticazione client in TLS normalmente utilizza un certificato del client e il metodo con cui il client è autenticato non è sostanzialmente cambiato da SSL 3.0: durante l'iniziale handshake, il server richiede l'autenticazione del client (a CertificateRequest
messaggio), e il client risponde inviando il suo certificato e quindi una firma calcolata con la sua chiave privata sulla concatenazione di tutti i precedenti messaggi di handshake (che include i due "valori casuali" inviati dal client e server, e anche le suite di crittografia negoziate, il certificato del server ...).
Tuttavia, ci sono dei dettagli. un algoritmo di firma utilizza una funzione di hash e il valore di hash viene quindi utilizzato con la chiave privata. Fino a TLS 1.1, il client utilizzava necessariamente la concatenazione di MD5 e SHA-1 come "funzione hash". Con TLS 1.2, client e server inviano reciprocamente l'elenco delle funzioni hash e dei tipi di firma supportati, in modo che il client possa scegliere una funzione di hash "appropriata" e anche un certificato appropriato nel caso in cui il client ne possieda diversi.
Il metodo pre-1.2 impiega un "riempimento speciale" con RSA: in PKCS # 1 , il valore hash viene prima memorizzato in una struttura che identifica la funzione hash (in pratica, un'intestazione fissa è collegata al valore hash), e quella struttura codificata viene quindi riempita con alcuni byte (la maggior parte di essi è uguale a 0xFF
) fino alla lunghezza della chiave. Nelle firme utilizzate da SSL 3.0 a TLS 1.1, il valore hash ha lunghezza 36 byte (16 byte per MD5, 20 byte per SHA-1) e non c'è intestazione : i 36 byte sono direttamente usato in "padding tipo 1". Con TLS 1.2, viene utilizzata una sola funzione di hash (negoziata tra client e server) e l'intestazione ritorna.
Pertanto, TLS 1.2 si allinea con lo standard PKCS # 1 e supporta molte funzioni di hash, che dovrebbero migliorare l'interoperabilità. Tuttavia, è concepibile che un token hardware specifico per la chiave privata del client (ad esempio una smart card) possa essere incompatibile con TLS 1.2 (se supporta solo il 36-byte-hash-con-no- modalità intestazione di precedenti SSL / TLS). In tal senso, TLS 1.2 potrebbe interrompere la compatibilità con i token distribuiti (questo è piuttosto improbabile, ma garantisce comunque alcuni test). Per le implementazioni software, questo non dovrebbe essere un problema.