Cuando una parte se autentica utilizando certificados, esencialmente prueba que puede hacer uso de la clave privada asociada con la clave pública en el certificado, ya que asumió que la clave privada es secreta y solo la conoce el propietario del certificado.
Para demostrar el acceso a la clave privada, la parte autenticadora firma un desafío que está determinado, al menos en parte, por el par (para evitar los ataques de repetición). El interlocutor puede verificar la firma utilizando la clave pública dentro del certificado público.
Dado que una firma exitosa solo prueba el acceso a la clave privada para un certificado específico, el interlocutor también debe verificar que el certificado coincida con sus expectativas, es decir, que típicamente está firmado por una autoridad certificadora de confianza (CA), tiene un tema específico , no está vencido ni revocado y tiene las extensiones de uso de clave correctas.
Normalmente, dentro de TLS solo se realiza la autenticación del servidor, la firma forma parte del mensaje ServerKeyExchange
y se realiza sobre varios datos que también incluyen el ClientHello.random
determinado por el cliente. Por lo general, el cliente requiere que el nombre de host correcto coincida con los certificados de servidor Nombres alternativos del sujeto (SAN) o (antiguo y obsoleto) coincida con los asuntos del certificado CN.
Con la autenticación mutua, el servidor también solicita al cliente que se autentique. Esto se hace usando el mensaje CertificateRequest
. Este mensaje también puede incluir una lista de CA que el servidor está dispuesto a aceptar como emisor del certificado del cliente para que la aplicación del cliente pueda elegir el certificado esperado. Si un cliente recibió este CertificateRequest
y tiene un certificado de cliente coincidente, enviará un mensaje Certificate
con este certificado. Además, enviará un mensaje CertificateVerify
que incluye una firma creada con la clave privada de los certificados de cliente y que cubre todos los mensajes de intercambio que se han enviado hasta el momento, que incluyen el ServerHello.random
determinado por el servidor.
La forma exacta en que se valida el certificado del cliente y su asociación con un cliente específico no se define, pero es común que cualquier certificado emitido por una CA específica sea aceptado y que el nombre o correo electrónico de los clientes se extraiga de los asuntos del certificado CN.