¿Cómo obtener el algoritmo de acuerdo de clave utilizado en el handshake de TLS 1.3 utilizando la API OpenSSL?
Estaba modificando el código de ejemplo del cliente dado en la página de s_client de OpenSSL para entender algunas funciones. Añadí las siguientes líneas después de la parte de verificación de cadena:
const SSL_CIPHER* curr_cipher = SSL_get_current_cipher(ssl);
printf("SSL_CIPHER_standard_name: %s\n", SSL_CIPHER_standard_name(curr_cipher));
printf("SSL_get_cipher_version: %s\n", SSL_get_cipher_version(ssl));
int kx_nid = SSL_CIPHER_get_kx_nid(curr_cipher);
printf("SSL_CIPHER_get_kx_nid: %d\n", kx_nid);
printf("OBJ_nid2ln(%d): %s\n", kx_nid, OBJ_nid2ln(kx_nid));
printf("SSL_CIPHER_description: %s\n", SSL_CIPHER_description(curr_cipher, NULL, 0));
En vez de obtener el algoritmo de intercambio de clave usado, obtuve la siguiente salida después de conectarme a random.org usando TLS 1.3:
SSL_CIPHER_standard_name: TLS_AES_256_GCM_SHA384
SSL_get_cipher_version: TLSv1.3
SSL_CIPHER_get_kx_nid: 1063
OBJ_nid2ln(1063): kx-any
SSL_CIPHER_description: TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
La página de manual de SSL_CIPHER_get_kx_nid
dice que devuelve NID_kx_any
para TLS 1.3. ¿Cómo puedo obtener programáticamente el acuerdo de clave real (NID_kx_ecdhe
) y el protocolo de autenticación (NID_auth_rsa
) utilizado en el handshake del objeto SSL
?
davy.ai
Para obtener programáticamente el protocolo de autenticación y el acuerdo clave real utilizado en el handshake desde el objeto
SSL
, se pueden utilizar las siguientes funciones:SSL_get_cipher_bits
oSSL_CIPHER_get_bits
. Devuelven el nombre del algoritmo de intercambio de claves y la longitud de la clave, respectivamente. El algoritmo de intercambio de claves se puede extraer del nombre.Para el protocolo de autenticación: se puede utilizar la función
SSL_get_peer_certificate
para obtener el certificado del par. Luego se puede analizar el certificado para obtener el algoritmo de firma utilizado para la autenticación.Por ejemplo, para obtener el algoritmo de intercambio de claves y el protocolo de autenticación utilizados en el handshake desde el objeto
SSL
, se puede modificar el código de la siguiente manera:Esto debería mostrar el algoritmo de intercambio de claves y el protocolo de autenticación utilizados en el handshake TLS.