我有一个 W2K8 R2 SP1 服务器托管一个需要客户端证书的 SSL 网站。我们有一个根证书(自签名),保存在本地机器受信任的 CA 存储中。在客户端,浏览器要求提供客户端证书并且工作正常。
现在,我们有另一个根证书,它也保存在本地计算机受信任的 CA 存储中。问题是浏览器不提供选择由该根 CA 颁发的客户端证书。
浏览器不提示的原因是服务器配置(默认选项)向客户端返回受信任的根 CA 列表,以帮助它限制可供选择的客户端证书列表。如果我们配置服务器使其不提供此列表 (HKLM/system/currentcontrolset/control/securityproviders/schannel/sendtrustedissuerlist=0),则浏览器没有线索并显示所有客户端证书,然后它工作正常。
我们过去遇到过这样的问题,因为受信任的 CA 列表太长,因此在返回给客户端时被截断了,但这里不是这种情况,只返回了 8 个受信任的 CA。
此外,如果我在另一台(非常相似的)服务器上注册这个新的根 CA,它可以正常工作,返回的受信任列表包含新的 CA。
我真的不知道为什么这个特定的服务器在 SSL 协商期间拒绝在列表中返回我的根 CA,有人可以帮忙吗???
最佳答案
不确定这是否对您或其他人有帮助,但根据 Microsoft 及其 Windows Server 2012 文档,您的问题似乎与此有关:
“如果使用的Trusted Root Certification Authorities存储包含根(自签名)和证书颁发机构 (CA) Issuer 证书的混合,则只有 CA Issuer 证书将被发送到默认服务器”。
请记住,您可以为“证书信任列表”(CTL) 使用不同的商店。首先检查/使用“Client Authentication Issuer”存储(默认情况下在 Windows Server 2012 上),然后如果为空,则检查/使用“Trusted Root Certification Authorities”存储。
如果您在 2012 年,您可以手动配置 CTL 存储,但我认为 2008 R2 上没有该选项(尽管我可能弄错了)。
关于ssl - 服务器未将来自 CA 受信任列表的证书返回给客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077120/