确定与服务器证书

时间:2017-02-27 10:38:06

标签: ssl openssl ecdsa

我的服务器可能附加了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可用于查明我们要设置的密码是否与证书或协议兼容?

1 个答案:

答案 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年,您可以做的最好的事情是:

  • 没有SSLv2,SSLv3;只有TLS 1.0及以上
  • 来自“HIGH:!aNULL:!kRSA:!RC4:!MD5”系列的密码套件

“!kRSA”是“没有RSA密钥传输”,这意味着您只能使用临时密钥交换。如果服务器具有RSA密钥,则它仅用于身份验证。也就是说,密钥将用于在密钥交换期间签署服务器的短暂值,以便客户端知道它们是真实的。