如何使用OpenSSL API获取TLS 1.3握手中使用的密钥协商算法?

问题描述 投票:0回答:1

我正在修改 OpenSSL s_client 页面 上给出的示例客户端代码以了解一些功能。我在链验证部分后添加了以下几行:

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));

使用 TLS 1.3 连接到 random.org 后,我没有使用密钥交换算法,而是得到了以下输出:

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

SSL_CIPHER_get_kx_nid
的手册页显示,对于 TLS 1.3,它返回
NID_kx_any
。如何以编程方式从
NID_kx_ecdhe
对象获取握手中使用的实际密钥协议 (
NID_auth_rsa
) 和身份验证协议 (
SSL
)?

c ssl openssl cryptography
1个回答
0
投票

我也在寻找同样的东西。请检查您的 OpenSSL 发行版中是否提供此功能:

https://docs.openssl.org/master/man3/SSL_get0_group_name/

© www.soinside.com 2019 - 2024. All rights reserved.