El conjunto de cifrado ECDHE-RSA-AES128-SHA
significa que el intercambio de claves usará un par de claves ECDH de generación dinámica, que el servidor firmará con su propia clave privada RSA. Por lo tanto, el certificado del servidor contendrá una clave pública RSA, independientemente de cómo haya firmado ese certificado su CA.
Supongo que el certificado que utiliza contiene un par de claves EC, por lo tanto no es compatible con el conjunto de cifrado ECDHE-RSA-AES128-SHA
. Es un poco tonto desde el servidor iniciar con las opciones proporcionadas, ya que, en efecto, no es compatible con ningún conjunto de cifrado. Pero se sabe que el software es tonto (a veces).
Entonces, si bien el cliente es perfectamente capaz de entender las firmas de ECDSA (y se declara como tal en su extensión signature_algorithms
), la lista de conjuntos de cifrado admitidos que configuró impide que acepte cualquier mensaje ServerKeyExchange
que contenga algo más que una clave pública ECDH firmada con RSA.
Además, la extensión signature_algorithms
está relacionada solo parcialmente con esto. Con esta extensión, el cliente puede anunciar los algoritmos de firma que admite, y esto tiene el propósito de ayudar al servidor a seleccionar una cadena de certificados apropiada, y algoritmos para mensajes que deben firmarse. Si el cliente dice "solo RSA", entonces el servidor debe esforzarse por usar solo firmas RSA, tanto para lo que firme (por ejemplo, mensaje ServerKeyExchange
) como para el envío de las cadenas de certificados (todos los certificados de CA deben estar basados en RSA).
Eso es, en la práctica, una ilusión. La mayoría de los servidores solo tienen un certificado, y ese es el que enviarán, independientemente de la extensión signature_algorithms
. Y la mayoría de los clientes se adaptarán: si el cliente realmente admite firmas RSA, procesará las firmas RSA en certificados y en mensajes TLS. Este es el comportamiento normal en ausencia de la extensión signature_algorithms
.
El uso real de esta extensión no es para limitar los posibles algoritmos de firma, ya que están restringidos tanto por el conjunto de cifrado como por el tipo de certificado que posee realmente el servidor, sino por ayudar al servidor a elegir funciones hash para ser utilizado con algoritmos de firma. Cuando el cliente dice: "Admito RSA con SHA-256", realmente le está diciendo al servidor "si debe usar firmas RSA, entonces puede hacerlo con SHA-256 como función hash de soporte, sé cómo manejarlo. ".