6

我正在将 Web 应用程序从 IIS 6 服务器迁移到 IIS 7 服务器,但在获取客户端证书时遇到了一些麻烦。

我正在使用的代码如下所示:

        HttpClientCertificate cert = Request.ClientCertificate;

        if (cert.IsPresent)
        {
            ...
        }

在 IIS 6 服务器上,cert.IsPresent总是如此。但是,在 IIS 7 机器上,它始终是错误的。这两个测试都是在同一台计算机上使用 IE 8 完成的。唯一的变化是服务器 URL,因此客户端应该正确设置。

我没有收到任何 SSL 连接错误(我正在通过 访问页面https),并且我已将 SSL 设置 -> 客户端证书:设置为接受(与 IIS 6 配置相同)。

我已经完成并尽可能地将 IIS 7 服务器配置到 IIS 6 服务器,但我仍然没有获得证书。

我还需要查看其他配置区域吗?

此外,如果我将客户端证书:设置为必需,我会在 IIS 7 框中收到 403.7 错误。我不知道这是否是一种症状,但以防万一信息有用......

4

3 回答 3

4

基本上它归结为客户端无法提供客户端证书的事实。这就是为什么您在需要时会收到 403.7 错误。我相信你需要这个:

http://blogs.msdn.com/b/puneetgupta/archive/2009/08/03/where-is-the-client-certificates-ui-in-iis-7-0.aspx

请让我知道这可不可以帮你。

于 2011-06-20T17:25:45.770 回答
3

我在寻找有关如何在 IIS 7 与 IIS 6 中获取证书的更多信息时遇到了这个问题。我看到@whosrdaddy 的解决方案对提问者有用。还有一些我必须追捕的东西。

IIS 6 和 IIS 7 之间的区别之一是 IIS 6 在每个网站的配置中都有“目录安全”选项卡。为了使 Web 服务器在 IIS 7 中请求证书,您必须单击您正在配置的网站或虚拟目录的“SSL 设置”功能以查看“客户端证书:”设置:忽略、接受或要求。

确保这没有设置为“忽略”,否则您将永远无法让您的证书正常工作!

于 2012-09-03T22:01:57.553 回答
1

IsPresent == false 可能是由几个不同的事情引起的,都与服务器和客户端有关。我们在最终修复这些问题的过程中遇到了每个人,我将详细说明每个人......

服务器问题 #1 - 传入的客户端证书具有 1 个或多个服务器上不存在的证书路径。打开证书转到证书路径(选项卡)并确保每个根颁发机构都在 SERVERS 受信任的根证书颁发机构中。请注意,您不需要在服务器上安装证书,只需在证书(本地计算机)\受信任的根证书颁发机构下的根颁发机构公钥。

服务器问题 #2(前面提到的解决方案) - 在 IIS 中,对于站点,确保 SSL 设置设置为接受或要求(从不忽略)。使用 Require 的好处是 IIS 日志将向您显示 403 7 错误,因为 Accept 只会让您的 IsPresent == false 但带有 200 http 代码。

客户端问题 #1 - 与服务器问题 #1 相同,必须信任这些权威!

客户端问题 #2 - 您拥有受信任的根授权,但没有证书本身的私钥。确保将 pfx(私钥)安装到证书存储中,而不是公钥 (.cer)。您还可以通过双击证书存储中的证书来查看您是否拥有私钥,在常规选项卡上,您应该会看到一条消息。

客户问题 #3 - 您将证书放在错误的位置。可能最好将您的证书放在证书(本地计算机)\个人\证书中,而不是(当前用户)。这将使证书可用于处理正在运行您的代码并实际需要访问它的帐户。

客户端问题 #4 - 右键单击​​证书(在商店中不是 .cer 文件)-> 所有任务 -> 管理私钥...并确保运行您的代码的进程帐户具有“读取”权限。对此的快速测试(但不推荐用于生产用途)是将“Everyone”添加为已读,以查看这是否是您的问题。

于 2014-04-10T19:01:30.570 回答