我的服务器可能附加了RSA或ECDSA证书。
在我的代码中,我将prtocol方法设置为
sslmethod = SSLv23_server_method();
并使用SSL_CTX_set_cipher_list()API设置密码。
问题是当服务器连接到ECDSA证书并且我通过" RSA"密码SSL_CTX_set_cipher_list()不会返回任何错误,但#34; RSA"密码与ECDSA证书不兼容。
是否有任何openssl API可用于查明我们要设置的密码是否与证书或协议兼容?
答案 0 :(得分:3)
是否有任何openssl API可用于查明我们要设置的密码是否与证书或协议兼容?
如果您创作应用并拥有服务器,那么YES,您确实知道会发生什么。但一般情况是NO,你事先不知道,你不能查询它。您尝试设置频道,如果失败,则尝试其他内容。
一般来说,没有办法事先知道服务器支持的密码套件;或者服务器证书中绑定了哪种类型的公钥。实际上,无法知道服务器支持的协议版本(SSLv2,SSLv3,TLS 1.0,TLS 1.1,TLS 1.2等)。这是RFC 7405, TLS Fallback Signaling Cipher Suite Value (SCSV) for Preventing Protocol Downgrade Attacks的原因。
在2016/2017年,您可以做的最好的事情是:
“!kRSA”是“没有RSA密钥传输”,这意味着您只能使用临时密钥交换。如果服务器具有RSA密钥,则它仅用于身份验证。也就是说,密钥将用于在密钥交换期间签署服务器的短暂值,以便客户端知道它们是真实的。