Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
403.7 IIS 7.5 SSL客户端证书身份验证问题_Ssl_Client_Certificate - Fatal编程技术网

403.7 IIS 7.5 SSL客户端证书身份验证问题

403.7 IIS 7.5 SSL客户端证书身份验证问题,ssl,client,certificate,Ssl,Client,Certificate,我正在使用IIS7.5下的双向SSL与外部合作伙伴测试web服务。我需要SSL,需要客户端证书,并使用一对一映射对域帐户进行身份验证。我已经配置了所有东西,并且它在我们的网络上运行良好(我能够提供客户端证书,获得身份验证,并从浏览器和测试工具调用服务)。 从我们的网络之外(在大多数情况下,见下文),我得到一个403.7错误。我已经检查了机器级证书存储,并确保证书和CA是可信的。 奇怪的是。我在家里获得了一个I型证书进行测试(得到了403.7,就像我们的目标合作伙伴一样)。所以我设置了Fiddle

我正在使用IIS7.5下的双向SSL与外部合作伙伴测试web服务。我需要SSL,需要客户端证书,并使用一对一映射对域帐户进行身份验证。我已经配置了所有东西,并且它在我们的网络上运行良好(我能够提供客户端证书,获得身份验证,并从浏览器和测试工具调用服务)。 从我们的网络之外(在大多数情况下,见下文),我得到一个403.7错误。我已经检查了机器级证书存储,并确保证书和CA是可信的。 奇怪的是。我在家里获得了一个I型证书进行测试(得到了403.7,就像我们的目标合作伙伴一样)。所以我设置了Fiddler来调试SSL并发送我的证书,这是出于某种原因。我设置了一个测试线束以通过完全相同的证书,得到了403.7。我在我的浏览器(IE 9)中进行测试,没有得到客户端证书提示,得到403.7。
谢谢你的帮助。
Bill

您是否使用同一台物理机器来测试网络内和外部网络连接?如果没有,您确定外部网络客户端具有可访问的私钥吗

我以前没有配置Fiddler客户端身份验证。它是否从标准证书存储中读取客户端证书和密钥?它是否直接从PKCS12读取


另一件可能有用的事情是在WireShark中检查TLS握手。具体来说,请查看服务器的“证书请求”消息,因为此处的数据提示客户端(IE9)应该在提示符中显示哪些客户端证书。比较内部和外部连接。

上次我检查时,IIS使用重新协商(默认情况下)获取客户端证书:第一次握手时服务器不请求客户端证书,然后是另一次握手(这次加密),服务器请求证书(通过TLS
CertificateRequest
消息)。这将阻止您查看Wireshark的任何内容,除非您对其进行了配置(请注意,这仅适用于某些密码套件)

查看客户端证书协商的一种方法是将IIS配置为使用初始客户端证书协商,使用(关于初始协商)。至少在握手过程中,
CertificateRequest
和证书将被清除发送,因此您应该能够通过Wireshark看到这一点。 如果客户端没有向服务器发送证书作为对
CertificateRequest
的响应,您仍然会看到来自客户端的空
certificate
消息

如果您没有将私钥与证书一起导出以与Fiddler或其他任何客户端一起使用,则它将无法使用证书。它最多可以尝试发送证书,但握手将失败(因为
CertificateVerify
消息需要由客户端的私钥签名)

我猜您可能会遇到以下问题:

  • 服务器接受不提供证书(实际上是可选的)
  • 出示无效证书会使其失败并导致此403.7状态代码(许多服务器和SSL/TLS堆栈会将此作为致命错误来实现,但不会说
    不受支持的\u证书
    证书被吊销
    证书过期
    证书未知
    应该是致命错误,因此这由服务器自行决定)

谢谢你的建议。Fiddler只使用一个.cer文件,你将它放在MyDocuments文件夹中的固定文件名下。我没有在cert文件中嵌入私钥,但它似乎没有打扰Fiddler的连接。我将尝试你的Wireshark想法,尽管我以前从未看过TLS握手。我有一个怀疑是我们的服务器上的通配符证书可能会以某种方式影响证书查询,但当Fiddler的代理服务器请求证书时,它可能正在工作,然后Fiddler将该证书传递给服务器。再次感谢。建议很好。我忘了在使用WS:时我们使用clientcertnegotiation=true运行)我能够使用Wireshark进行SSL解密。我在网络内部看到的是在第二次握手后发送到客户端的证书请求消息。这在网络外部不会发生(第二次握手后服务器不会发送任何证书请求。发送的是:服务器你好,证书)。再次感谢您的阅读和回复。如果从上面看不清楚,这仍然是一个开放的问题。我的怀疑现在转向我们的防火墙或证书请求中返回的CA列表(尽管我没有看到网络外的证书请求,但我注意到内部网络上请求中包含的CA列表不是我在计算机存储中配置的完整列表。不确定原因。)好的,找出我的问题。首先,我不知道为什么我没有看到WiReSARK中的证书申请,因为我现在看到一个事情正在运作,我确信一个是以前发布的,因为我得到了证书的提示W/Curt列出了。所以我认为这是一个错误的否定。我必须改变服务在一个帐户下运行。证书存储区和NTFS文件夹的权限。我的客户端证书使用中间CA,因此我需要将其添加到服务器计算机存储区。最后一个问题是导入的客户端证书的根CA,没有指定的客户端身份验证使用。