我正在将一个Web应用程序从IIS 6服务器迁移到IIS 7服务器,我在获取客户端证书时遇到了一些麻烦。
我正在使用的代码片段如下:
HttpClientCertificate cert = Request.ClientCertificate;
if (cert.IsPresent)
{
...
}
在IIS 6服务器上,cert.IsPresent
始终为true。但是,在IIS 7框中,它始终为false。两个测试均使用来自同一台计算机的IE 8完成。唯一的变化是服务器URL,因此应该正确设置客户端。
我没有收到任何SSL连接错误(我通过https
访问该页面)并且我设置了SSL设置 - >客户端证书:接受(与IIS 6配置相同)。
我已尽可能地将IIS 7服务器配置到IIS 6服务器,但我仍未获得证书。
我还需要查看配置的其他方面吗?
此外,如果我将客户端证书:设置为必需,我在IIS 7框上会出现403.7错误。我不知道这是否是一种症状,但以防信息有用......
答案 0 :(得分:4)
基本上归结为客户端无法提供客户端证书。 这就是你需要时得到403.7错误的原因。 我相信你需要这个:
如果有帮助,请告诉我。
/爸爸
答案 1 :(得分:3)
我在查找有关如何在IIS 7和IIS 6中获取证书的更多信息时遇到了这个问题。我看到@ whosrdaddy的解决方案适用于提问者。我还有其他东西要追捕。
IIS 6和IIS 7之间的区别之一是IIS 6在每个网站的配置中都有“目录安全性”选项卡。为了使IIS 7中的Web服务器请求证书,您必须单击要配置的Web站点或虚拟目录的“SSL设置”功能,以查看“客户端证书:”设置:忽略,接受或要求。
确保未将其设置为“忽略”,否则您将永远无法使用您的证书!
答案 2 :(得分:0)
IsPresent == false可能由几个不同的东西引起,都与服务器和客户端有关。我们在最终解决这些问题的过程中击中了所有人,我将详细介绍每个......
服务器问题#1 - 传入的客户端证书有一个或多个服务器上不存在的证书路径。打开证书转到证书路径(选项卡)并确保每个根权限都在SERVERS受信任的根证书颁发机构中。请注意,您不需要在服务器上仅安装证书(本地计算机)\受信任的根证书颁发机构下的根权限公钥的证书。
服务器问题#2(前面提到的解决方案) - 在IIS中,对于站点,确保将SSL设置设置为Accept或Require(从不忽略)。使用Require的好处是IIS日志会显示403 7错误,其中Accept只会获得IsPresent == false但有200个http代码。
客户问题#1 - 与服务器问题#1相同,必须信任这些权限!
客户问题#2 - 您拥有受信任的root权威,但不是证书本身的私钥。确保将pfx(私钥)安装到证书库而不是公钥(.cer)。您还可以通过双击证书库中的证书来查看您是否拥有私钥,并且在常规选项卡上,您应该看到一条消息说明了这一点。
客户问题#3 - 您将证书放在错误的位置。可能最好将您的证书放在证书(本地计算机)\个人\证书中,而不是(当前用户)。这将使证书可用于处理运行代码并且实际需要访问它的帐户。
客户问题#4 - 右键单击证书(在商店中而不是.cer文件) - >所有任务 - >管理私钥......并确保运行代码的流程帐户具有" Read"允许。对此进行快速测试(但不建议用于生产用途)是添加" Everyone"阅读以了解这是否是您的问题。