我目前正在将我管理的各种网站的 SSL 证书从 SHA1 升级到 SHA2 兼容证书。
迄今为止,我们一直使用“RSA”作为我们 SSL 证书的密钥交换机制,因此我决定在为替换证书生成证书签名请求时继续这样做。
在我的开发环境中,我替换了多个证书,并优先考虑了 Web 服务器上基于 SHA256 (SHA-2) 的密码套件。
我注意到 Google Chrome 42 和 Firefox 37.0.2 仍在选择基于 SHA1 的密码套件TLS_RSA_WITH_AES_256_CBC_SHA
。(我还没有正确测试 Internet Explorer)
为了确定 Chrome 42 和 Firefox 37.0.2 支持哪些密码套件,我执行了网络跟踪并TLSCipherSuites
在ClientHello
.
TLSCipherSuites: Unknown Cipher
TLSCipherSuites: Unknown Cipher
TLSCipherSuites: Unknown Cipher
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2B }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2F }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 { 0x00, 0x9E }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA { 0xC0,0x0A }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA { 0xC0,0x14 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_256_CBC_SHA { 0x00, 0x39 }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA { 0xC0,0x09 }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA { 0xC0,0x13 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x33 }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_RC4_128_SHA { 0xC0,0x07 }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_RC4_128_SHA { 0xC0,0x11 }
TLSCipherSuites: TLS_RSA_WITH_AES_128_GCM_SHA256 { 0x00, 0x9C }
TLSCipherSuites: TLS_RSA_WITH_AES_256_CBC_SHA { 0x00, 0x35 }
TLSCipherSuites: TLS_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x2F }
TLSCipherSuites: TLS_RSA_WITH_RC4_128_SHA { 0x00,0x05 }
TLSCipherSuites: TLS_RSA_WITH_RC4_128_MD5 { 0x00,0x04 }
TLSCipherSuites: TLS_RSA_WITH_3DES_EDE_CBC_SHA { 0x00,0x0A }
TLSCipherSuites: Unknown Cipher
Run Code Online (Sandbox Code Playgroud)
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2B }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2F }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA { 0xC0,0x0A }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA { 0xC0,0x09 }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA { 0xC0,0x13 }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA { 0xC0,0x14 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x33 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_256_CBC_SHA { 0x00, 0x39 }
TLSCipherSuites: TLS_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x2F }
TLSCipherSuites: TLS_RSA_WITH_AES_256_CBC_SHA { 0x00, 0x35 }
TLSCipherSuites: TLS_RSA_WITH_3DES_EDE_CBC_SHA { 0x00,0x0A }
Run Code Online (Sandbox Code Playgroud)
我的网络服务器正在运行 Windows Server 2008 R2 并支持以下密码套件(注意 - 这是默认的首选项顺序,此后我已对所有基于 SHA256 的套件进行了优先排序:
TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384,
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_RC4_128_MD5,SSL_CK_RC4_128_WITH_MD5,
SSL_CK_DES_192_EDE3_CBC_WITH_MD5,TLS_RSA_WITH_NULL_SHA256,TLS_RSA_WITH_NULL_SHA
Run Code Online (Sandbox Code Playgroud)
Chrome 42 和 Firefox 37.0.2 支持的 Windows Server 2008 R2 上唯一存在的 SHA256 密码套件是TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
(在 Server 2008 R2 中已_P256
附加到名称中)。但是为了支持这个套件,我必须重新颁发我们的证书,将密钥交换机制从使用更改RSA
为ECDSA
(椭圆曲线数字签名算法)。事实上,我已经尝试过这个并且它工作正常 - 但许多旧浏览器不支持椭圆曲线加密。所以这不是一个可行的解决方案。
28/04/15 更新:
感谢那些为密钥交换算法和签名算法提供更多清晰度的回答。
我希望浏览器能够使用 SHA256 密码套件来执行使用 SHA2 的消息身份验证。
但问题仍然存在于 Windows Server 2008 R2 中可用的 SHA256 密码套件,Chrome 和 Firefox 中唯一支持的密码套件是TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
. 为了使用这个密码套件,我需要一个 ECDSA 签名的证书。
据我了解,椭圆曲线密码学缺乏对某些旧浏览器/操作系统的支持。正如我的问题中提到的(虽然我弄错了术语),我确实创建了一个 ECDSA 签名的证书,虽然我没有进行广泛的测试,但到目前为止我已经看到在 Windows XP SP3 上运行的 IE7 和 IE8 无法加载我的网站(通过 HTTPS)并简单地生成“Internet Explorer 无法显示网页”消息。
诚然,Windows XP 现在是一个过时的操作系统,但我担心“旧”但仍“受支持”的浏览器/操作系统可能会以同样的方式失败。因此,我有兴趣使用 RSA 签名证书找到解决方案 - 但这似乎是不可能的。我是对的吗?
小智 6
您在密码套件列表中看到的 SHA256 引用不适用于证书。相反,它们与 TLS 伪随机函数和消息完整性有关。
证书支持独立于 TLS 密码套件。
如果操作系统也支持 SHA256 证书,则所有版本的 Firefox 和 Chrome(以及最新版本的 IE)都支持 SHA256 证书,对于客户端 Windows,它是 XP SP3 及更高版本。Server 2008 R2 具有完整的 SHA256 证书支持。