Windows Server 2008 R2 - 基于 SHA2 的密码套件

Fit*_*roy 2 certificate tls

我目前正在将我管理的各种网站的 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 支持哪些密码套件,我执行了网络跟踪并TLSCipherSuitesClientHello.

铬 42:

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)

火狐 37.0.2:

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附加到名称中)。但是为了支持这个套件,我必须重新颁发我们的证书,将密钥交换机制从使用更改RSAECDSA(椭圆曲线数字签名算法)。事实上,我已经尝试过这个并且它工作正常 - 但许多旧浏览器不支持椭圆曲线加密。所以这不是一个可行的解决方案。

  • 那么有没有办法让 Firefox 和 Chrome 在 Windows Server 2008 R2 Web 服务器上选择一个 SHA256 密码套件,并且不会破坏与旧浏览器的兼容性?
  • 是否可以将其他密码套件添加到操作系统中?


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 证书支持。