El cliente no enviará un certificado a menos que el servidor lo solicite con un mensaje Certificate Request
(consulte el estándar , sección 7.4.4). Si el servidor no solicita un certificado, es probable que el envío de un mensaje Certificate
y CertificateVerify
desde el cliente implique una terminación inmediata del servidor (con una alerta unexpected_message
). La redacción de la norma no es demasiado clara sobre ese tema, pero aún incluye este párrafo en la sección 7.4:
Los mensajes del protocolo de protocolo de enlace se presentan a continuación en el orden en que aparecen.
Debe ser enviado; Enviar mensajes de apretón de manos en un orden inesperado.
resulta en un error fatal. Los mensajes innecesarios de apretón de manos pueden ser
omitido, sin embargo. Tenga en cuenta una excepción a la ordenación: la
El mensaje de certificado se utiliza dos veces en el protocolo de enlace (del servidor al
cliente, luego de cliente a servidor), pero descrito solo en su primera
posición. El único mensaje que no está limitado por estas reglas de ordenación
es el mensaje HelloRequest, que puede enviarse en cualquier momento, pero que
DEBE ser ignorado por el cliente si llega en medio de un
apretón de manos.
Esto sugiere bastante fuertemente que un mensaje inesperado Certificate
del cliente no será ignorado, y en lugar de eso "resultará en un error fatal".
Ahora puede imaginar una modificación activa por una entidad Man-in-the-Middle , que inyecta un mensaje Certificate Request
adicional en el flujo desde el servidor y bloquea los Certificate
y Certificate Verify
del cliente. Esto es posible, ya que el apretón de manos inicial se realiza, por necesidad, con registros no protegidos.
Sin embargo, esto hará que falle el intercambio cuando se intercambien los mensajes Finished
. Estos mensajes están protegidos (se producen después del cambio a los parámetros de seguridad recién negociados). El contenido de los mensajes Finished
es un hash de todos los mensajes de intercambio enviados hasta el momento. Dado que el cliente y el servidor no vieron los mismos mensajes (desde el punto de vista del cliente, hubo mensajes extra de Certificate Request
, Certificate
y Certificate Verify
), los valores hash no coincidirán y el cliente y el servidor dejará la conexión.
Por lo tanto, no solo no está claro qué ganaría un atacante al forzar una autenticación de cliente que el servidor no solicitó, sino que tampoco funcionará en absoluto debido a la forma en que se calculan los mensajes Finished
.