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

标签 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。这些证书也是链接的;一个根证书,一个中间证书,然后是网站使用的证书。

感谢您的宝贵时间。

最佳答案

简答

是的,您可以使用其他加密算法,但 X.509 证书在其中的作用很小。

为了在不修改客户端的情况下做到这一点,您必须配置您的服务器以优先使用某些密码套件而不是其他密码套件(例如,对于 Apache,请查看 SSLCipherSuite 配置)。

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

长答案

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

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

  • 身份验证
  • key 交换
  • 批量加密
  • 密码摘要

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

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

关于algorithm - 如何在 OpenSSL 中为 X.509 证书使用不同的加密算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945099/

相关文章:

python - 如何使用一种方法通过某个值更新一个对象的不同集合?

algorithm - 随机数算法的随机性

ssl - 在 ESP8266 (Arduino IDE) 上使用 BearSSL 进行指纹验证

javascript - 使用公钥加密/解密 |加密模块 | NodeJS

java - 您可以从 Java 调用 OpenSSL 的哈希原语吗?

ssl - Openssl:0 深度查找时出现错误 20:无法获取本地颁发者证书

ssl - 使用自签名证书的 Lighttpd + https 安装

algorithm - 将字符串数组的数组转换为层次结构

algorithm - 以下合并算法的时间复杂度是多少?

authentication - 了解跨域用户认证