如何在OpenSSL中为X.509证书使用不同的加密算法?

时间:2012-10-17 23:42:52

标签: algorithm encryption openssl ssl-certificate x509

我一直在为公司内部使用生成证书,随着时间的推移可能会变得更加普及(而不是仅仅在一个内部网站上)。我注意到,在使用OpenSSL时,生成的证书显示为在Chrome中使用AES_256_CBC,如下所示。

Chrome showing AES_256_CBC

我一直在想,是否可以在OpenSSL中使用其他加密算法?我已经看到其他网站的证书显示为使用RC4_128和CAMELLIA_256_CBC等算法。

如果有帮助,我安装了两个版本的OpenSSL; 0.9.8l和1.0.1c,我使用的是Windows 7.这些证书也是链接的;一个根证书,一个中间证书,然后是用于该网站的证书。

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

简短回答

是的,您可以使用其他加密算法,但X.509证书在其中扮演的角色非常小。

为了在不修改客户端的情况下执行此操作,您必须将服务器配置为支持某些密码套件而不是其他密码套件(例如,对于Apache,请查看SSLCipherSuite配置)。 / p>

如果您可以修改客户端而不是服务器,则必须重新排序客户端在握手期间提供的密码套件。那些首选算法的应该是第一个。或者,您可以删除那些您不喜欢的加密算法(即使这意味着连接可能因此而失败)。

答案很长

在握手期间协商SSL / TLS连接上使用的加密算法。客户端向服务器发送它支持的cipher suites,根据其偏好进行排序。服务器选择最喜欢的那个。

密码套件(例如TLS_RSA_WITH_AES_128_CBC_SHA)是一个元组,指示必须使用哪些算法:

  • 验证
  • 密钥交换
  • 批量加密
  • 加密摘要

服务器X.509证书的内容在此过程中起着很小的作用,因为它限制了身份验证和密钥交换的完成方式。如果服务器证书包含RSA密钥,则密码套件不能是以TLS_DH_DSS_*开头的任何密码套件。

理论上,服务器X.509证书独立于批量加密算法。但是,由于并非涵盖(或由客户端提供)所有可能的组合,服务器中的密钥类型可能排除某些密码。