我正在使用IIS 7.5下的双向SSL测试外部合作伙伴的Web服务。我需要SSL,需要客户端证书,并使用一对一映射来验证域帐户。我已经配置了所有内容,它在我们的网络上工作正常(我能够提供客户端证书,获得身份验证并从浏览器和测试工具调用服务)。 从我们的网络外部(大多数情况下,见下文),我收到403.7错误。我已经通过机器级证书存储区并确保证书和CA是可信的。 这是奇怪的事情。我获得了一个I型证书,可以在家里进行测试(和我们的合作伙伴一样得到了403.7)。所以我设置Fiddler调试SSL并发送我的证书,这个工作由于某种原因。我设置了一个测试工具来传递完全相同的证书,并得到了403.7。我在我的浏览器(IE 9)中测试,没有获得客户端证书的提示,并获得403.7 任何帮助赞赏。 比尔
答案 0 :(得分:8)
上次我检查时,IIS正在使用重新协商(默认情况下)获取客户端证书:第一次握手,服务器不请求客户端证书,然后是另一次握手(此次加密)服务器请求证书(通过TLS CertificateRequest
消息)。这将阻止您从Wireshark中看到任何内容,除非您对其进行配置to use the server's private key and decipher the traffic(请注意,这仅适用于某些密码套件)。
查看客户端证书协商的一种方法是使用netsh and clientcertnegotiation=true(即初始协商)将IIS配置为使用初始客户端证书协商。在握手期间,至少CertificateRequest
和证书将被清除,因此您应该可以通过Wireshark查看。
如果客户端未将证书作为对CertificateRequest
的响应发送到服务器,您仍会看到来自客户端的空Certificate
消息。
如果您不使用证书导出私钥以与Fiddler或其他任何客户端一起使用,则它无法使用证书。它最多可以尝试发送证书,但握手将失败(因为CertificateVerify
消息需要由客户端的私钥签名)。
我想你可能会遇到一个问题:
unsupported_certificate
,{ {1}},certificate_revoked
,certificate_expired
应该是致命的,所以这由服务器自行决定。)答案 1 :(得分:0)
您是否使用相同的物理机器来测试网内和外部网络连接?如果没有,您确定外部网络客户端可以访问私钥吗?
之前我没有配置Fiddler客户端身份验证。它是否从标准证书库中读取客户端证书和密钥?它是直接从PKCS12读取的吗?
另一件可能有用的事情是检查WireShark中的TLS握手。具体来说,检查服务器的“证书请求”消息,因为这里的数据线索客户端(IE9)它应该在提示中显示哪些客户端证书。将此与内部和外部连接进行比较。