为什么Window的SSL Cipher-Suite受到某些SSL证书的限制?


14

问题:在服务器上使用某些证书时,Windows Server 2008 R2仅支持以下ssl密码套件:

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

由于XP加密API默认不支持任何AES密码,因此这可以防止XP客户端连接到服务器。
如此一来,当尝试使用Internet Explorer或远程桌面进行连接时,服务器日志中将出现以下错误。(因为他们使用了Microsoft的CAPI)

Schannel错误36874“从远程客户端应用程序接收到TLS 1.0连接,但是服务器支持客户端支持的密码套件。服务器连接失败。”
Schannel错误36888“已生成以下致命警报:40。内部错误状态为1204”


2
加里,如果您解决了自己的问题,请将其标记为已回答。
伯尼·怀特

Answers:


14

如果服务器上使用的证书是使用证书申请表中的“旧版密钥”选项生成的,则该证书的私钥将存储在Microsoft的旧版加密API框架中。当Web服务器尝试使用其新的下一代加密(CNG)框架处理请求时,似乎与旧框架中存储的RSA私钥有关的某些内容对于新框架不可用。结果,严重限制了RSA密码套件的使用。

解决方案:
使用自定义证书请求向导中的CNG密钥模板生成证书请求。

MMC | 本地计算机证书管理器| 个人证书文件夹| (右键单击)| 所有任务->高级操作| 创建自定义请求| “继续进行,没有注册政策” | 选择“(无模板)CNG密钥” | 根据您的需要继续完成证书申请。

验证密钥在正确的位置:
http : //msdn.microsoft.com/zh-cn/library/bb204778(VS.85).aspx
http://www.jensign.com/KeyPal/index.html

验证正确密码套件的工具:
http : //pentestit.com/2010/05/16/ssltls-audit-audit-web-servers-ssl-ciphers/
https://www.ssllabs.com/

SSL密码套件设置:http :
//support.microsoft.com/kb/245030
http://blogs.technet.com/b/steriley/archive/2007/11/06/changing-the-ssl-cipher-order -在Internet-explorer-7-windows-vista.aspx上

我们花了一个星期才弄清楚。我希望这可以为别人省下同样的麻烦。


任何人都知道如何针对自签名证书执行此操作或以其他方式解决该问题?
MGOwen

非常感谢Gerry所做的工作,并分享您的成果!我们打开了一个Microsoft支持案例,Microsoft本身无法查明某些客户端无法连接的原因。我们完全按照您的描述进行了发行。但是,根据technet.microsoft.com/zh-cn/library/ff625722(v=ws.10).aspx,Microsoft本身建议使用旧版密钥模板来存档最佳兼容性!做得好!

2

我自己也遇到了同样的问题,这篇文章为我节省了大量时间,非常感谢!

Gary的解决方案已经准备就绪,但我设法通过将PFX转换为PEM,然后使用openssl再次回到PFX来解决了该问题。新的PFX在IIS中导入了证书,所不同的是,我可以看到丢失的密码。

这是这样的:

openssl pkcs12 -in mycert.pfx -out mycert.cer -nodes

然后将cer文件一分为三,分别是密钥,证书和中间证书。

openssl pkcs12 -export -out mycert-new.pfx -inkey mycert.key \
-in mycert.crt -certfile mycert-intermediate.crt

然后,如果将新的.pfx文件导入IIS,它将使用您希望看到的所有密码。

因此,无需重新颁发证书。


在与原始问题类似但又相反的情况下,这对我有用:Windows Server 2012 R2上的AD FS角色要求您对证书请求使用旧版API-但随后仅显示2个AES密码如上所示!导出,使用OpenSSL重新打包密钥,然后重新导入可以解决相同的问题-其他协议突然开始起作用。谢谢,@ gelilloadbad!
ewall

0

谢谢,您的帖子对我有帮助,尽管我的问题并不完全相同。

但是,原因是我方面的WINHTTP SERVER API配置错误。我的IP发生了变化,当我将新的服务器证书放入机器“ MY”中时,我忽略了HttpSetServiceConfiguration的ALREADY_EXISTS返回代码。

因此,我使用了以前的服务器TLS证书,该证书的通用名错误并且与我的新服务器名不匹配。

如果您不正确执行HttpDeleteServiceConfiguration()或命令行“ netsh http delete sslcert 0.0.0.0:8443”,则将出现以下症状,导致令人讨厌的错误:

1)在TLS中,您的客户端Hello会立即收到来自服务器的TCP数据包,其中设置了Ack和Reset标志位。(我认为是握手失败警报吗?)

2)事件查看器获得“生成了以下致命警报:40。内部错误状态为107。”

“从远程客户端应用程序收到SSL 3.0连接请求,但是服务器不支持客户端应用程序支持的任何密码套件。SSL连接请求失败。”

因此,在继续追求密码套件不匹配之前,请确保您确实在使用要与之配合使用的服务器证书:

         netsh http show sslcert

并检查哈希值!


这个答案还不清楚,没有任何意义。您应该旨在直接回答“为什么Window的SSL Cipher-Suite受到某些SSL证书的限制?” 并继续解释Schannel错误。
伯尼·怀特

0

这可能是KeySpec = 2-AT_SIGNATURE问题

certutil -verifystore -v我的“证书缩图”以验证KeySpec值。如果为2,则需要将证书导出为PFX文件,然后运行certutil -importpfx AT_KEYEXCHANGE进行修复。


就我而言,这也是问题。实际上,该答案是唯一实际试图指出原因的答案。但是,答案将得益于一个解释,为什么AT_SIGNATURE对于非ECDHE密码套件来说不够用-因为对于此类套件,RSA不仅用于身份验证(签名),还用于密钥交换。
Jakub Berezanski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.