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

我目前正在为从SHA1到SHA2兼容证书pipe理的各种网站升级SSL证书。

迄今为止,我们一直使用“RSA”作为SSL证书的密钥交换机制,因此我决定在生成replace证书的证书签名请求时继续这样做。

在我的开发环境中,我已经replace了几个证书,并在Web服务器上优先考虑基于SHA256(SHA-2)的密码套件。

我注意到Google Chrome 42和Firefox 37.0.2仍在select基于SHA1的密码套件TLS_RSA_WITH_AES_256_CBC_SHA 。 (我还没有正确testingInternet Explorer)

为了确定Chrome 42和Firefox 37.0.2支持的密码套件,我已经执行了一个networking跟踪,并在ClientHellofind了TLSCipherSuites

Chrome 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 

Firefox 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 } 

networking服务器

我的networking服务器运行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 

Chrome 42和Firefox 37.0.2支持的Windows Server 2008 R2上唯一提供的SHA256密码套件是TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (在Server 2008 R2中_P256附有_P256 )。 但是为了支持这个套件,我必须重新发布我们的证书,把使用RSA的密钥交换机制改变为ECDSA (椭圆曲线数字签名algorithm)。 事实上,我已经尝试过这一点,它工作正常 – 但许多旧的浏览器不支持椭圆曲线密码学。 所以这不是一个可行的解决scheme。

  • 那么有没有办法让Firefox和Chrome在Windows Server 2008 R2 Web服务器上select一个SHA256密码套件,该套件不会破坏与旧版浏览器的兼容性?
  • 可以将额外的密码套件添加到操作系统?

28/04/15更新:
感谢那些为了进一步明确密钥交换algorithm和签名algorithm而作出回答的人。

我希望浏览器能够使用SHA256密码套件执行使用SHA2的消息authentication。

但问题仍然是Windows Server 2008 R2中可用的SHA256密码套件,唯一支持Chrome和Firefox的是TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 。 而为了使用这个密码套件,我需要一个ECDSA签名的证书。

据我所知,椭圆曲线密码学在一些较旧的浏览器/操作系统上缺乏支持。 正如我的问题(尽pipe我的术语错误)中提到的,我确实创build了一个ECDSA签名证书,尽pipe我还没有做过广泛的testing,但迄今为止,我已经看到在Windows XP SP3上运行的IE7和IE8无法加载我的站点(通过HTTPS),并简单地产生一个“Internet Explorer无法显示网页”的消息。

当然,Windows XP现在是一个过时的操作系统,但是我担心浏览器/操作系统“旧”但仍然“支持”可能会以同样的方式失败。 因此,我有兴趣find使用RSA签名证书的解决scheme – 但这似乎是不可能的。 我对吗?

您在密码套件列表中看到的SHA256引用不适用于证书。 而是与TLS伪随机函数和消息完整性有关。

证书支持独立于TLS密码套件。

所有版本的Firefox和Chrome(以及最新版本的IE)都支持SHA256证书,如果操作系统也支持这些证书的话,那么客户端Windows版本为XP SP3以上。 Server 2008 R2具有完整的SHA256证书支持。

除了密码套件的其他部分之外,您不希望优先考虑SHA256 MACalgorithm。 这是最不重要的部分。 您今天在IIS 7.5服务器上应该拥有的优先级列表的密码套件是:

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521

要寻找的关键部分是;

  • 密钥交换密码(ECDHE是速度最好的椭圆曲线,前向保密的短暂Diffie-Hellman)
  • RSA作为证书签名algorithm – 正如您发现的那样,较新的ECDSA证书与旧版客户端存在兼容性问题
  • 对称密码。 AES GCM 128位是最好的,但是你现在不能拥有这个并且在Windows中保留ECDHE / RSA。 下一个最好的是AES CBC(128位或256位)。

您应该使用IIS Crypto( https://www.nartac.com/Products/IISCrypto/ )并select最佳做法选项。 这将给你最好的密码套件顺序,你可以在IIS中实现。

另请参阅我对这个问题的回答:

更改IIS 8中的密钥交换机制

应用IIS Crypto最佳做法后启用Windows Server 2008 R2的密码:

在应用IIS Crypto最佳实践之后,Windows Server 2008 R2启用了密码

要获取服务器端列表,我通常使用“列表支持的密码套件”下的代码的编译版本;

https://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx

我已经上传了一个我编译到Dropbox的版本,如果你想使用它(风险自负,我不承担任何责任,但它是安全的!)

https://www.dropbox.com/s/mvajmebtyilgics/listciphers.exe?dl=0

“Richie Frame”的答案是现货。 密码套件string引用的签名内部不是SHA256。 但是除了Richie的回答之外,还有一个珍藏:

但是为了支持这个套件,我将不得不重新颁发证书,将密钥交换机制从使用“RSA”改为“ECDSA”(椭圆曲线数字签名algorithm)。

你不能这样做。 会话密钥交换机制不是在证书本身内编码的。

你正在混合密钥交换algorithm和签名algorithm。 混淆是因为RSA可以同时进行密钥交换和签名。

它大致如下所示:

  • 对于旧的典型安装,你将有一个RSA签名的证书,你也可以通过RSA进行会话密钥交换。

  • 对于较新的types安装,您将有一个RSA签名的证书,你会做Diffie-Hellman会话密钥交换。 然后使用证书的RSA密钥validation该匿名密钥交换。

  • 对于今天的前沿型安装,您将拥有一个ECDSA签名证书,并且您将执行椭圆曲线 – Diffie-Hellman(ECDH)会话密钥交换。 然后使用证书的ECDSA密钥validation匿名密钥交换。

更新2015-04-29:使用sha256rsa证书

因此,我有兴趣find使用RSA签名证书的解决scheme – 但这似乎是不可能的。 我对吗?

不。 幸运的是你错了。 您可以在同一个证书中使用两者。 SHA256作为单向散列函数,RSA作为签名algorithm。 (这个特定的组合代号为“sha256WithRSAEncryption”,但还有很多其他的。)(看一下https://www.ietf.org/ ,他们现在正在使用这个确切的组合。

为了兼容,我build议你阅读IvanRistić的博客。

伊万·里斯蒂奇(IvanRistić), SHA1弃用:你需要知道的 (存档在这里 )

该博客中的一个链接是GlobalSign SHA-256兼容性表。 那对你来说可能特别有意思。

更新2015-04-29:你想用“RSA_WITH”
如果你有一个RSA证书,那么你正在使用RSAencryption。 密码套件描述符中的encryption位在“ WITH ”之前的位。

所以在你的情况下,你需要中间有“RSA_WITH”的东西。 我从上面列出的Firefox列表中选取了这些内容:

 TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2F } 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 } 

不要担心每个string末尾的“SHA”或“SHA256”。 这并不涉及证书中的内容。 它指的是相同的algorithm,但不涉及证书内的应用。