概括:我们有两个不同的 Windows Server + II6 环境,它们都启用了 SSL。其中一个环境按我们想要的方式运行,而另一个则不然。
服务器配置:
- Windows Server 2003 SP2
- 微软 IIS 6 新功能
- 页面配置为 SSL 客户端身份验证。
细节:我们有一个生产虚拟机,配置为托管 IIS 6 网站,其中有几个页面需要 SSL 客户端身份验证才能启用 CAC。在此生产虚拟机上,页面会显示服务器证书,然后在提示输入客户端证书之前死机。为了测试服务器的配置,我们创建了一个“Hello World”页面,其配置与这些 CAC 页面相同,我们看到了相同的结果。然后,我们将此页面放在已知正常工作的虚拟机上,该虚拟机具有相同的 OS/IIS 版本,并以相同的方式配置该页面。该页面通过提示输入客户端证书然后加载页面来正常运行。
我们为解决此问题采取的措施:
- 检查两台机器上的证书路径的完整性
- 对两个虚拟机之间的 IIS 元数据库进行差异化检查,以检查是否存在不一致
- 在损坏的虚拟机上创建并安装了新的服务器证书
- 将选项从“接受客户端证书”更改为“需要客户端证书”
- 检查 IIS 日志中的错误。所有访问均返回 200。
我们找到了一个可以解决我们的问题但又会产生新问题的选项。有一个选项可以协商所有页面的客户端证书,这会导致出现证书提示,但这会导致每个页面都这样做,这违背了 SSL 会话的目的。
同样重要:此损坏的虚拟机已按照政府规范进行了 STIGged。我们怀疑这可能是根本原因。但是,取消 STIGged 的可能性不在我们的控制范围内。因此,我们必须在当前的限制下工作。
答案1
经过三周的微软支持,找到了解决方案。修改以下注册表值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\DisableRenegoOnServer 已启用。将值设置为 0,提示符将返回。
以下是 Microsoft 知识库文章:http://support.microsoft.com/kb/977377
知识库文章中描述了这些症状,但是,此知识库文章的主题不是这个问题:
“Internet 信息服务 (IIS):在某些配置中,使用证书客户端身份验证(包括证书映射方案)的 IIS 将受到影响。站点范围的客户端证书身份验证不会受到影响并将继续运行。”