403.7 IIS 7.5 SSL客户端证书认证问题

7

我正在使用IIS 7.5与外部合作伙伴测试一个双向SSL的Web服务。我需要SSL,需要客户端证书,并使用一对一映射来验证域帐户。我已经配置好了一切,在我们的网络上正常工作(我能够提供客户端证书,从浏览器和测试工具调用服务)。
在我们的网络之外(大多数情况下,见下文),我得到了403.7错误。我已经检查了机器级别的证书存储并确保证书和CA受信任。
这里有个奇怪的事情。我从家里获得了一个Type I证书进行测试(就像我们的合作伙伴一样也得到了403.7)。所以我设置了Fiddler来调试SSL并发送我的证书,出人意料的是这个方法起作用了。我设置了一个测试工具来传递完全相同的证书,但是得到了403.7的错误。我在我的浏览器(IE 9)中测试,没有提示输入客户端证书,而是得到了403.7的错误。
非常感谢您的帮助。
Bill

2个回答

8
上次我检查时,IIS(默认情况下)正在使用重新协商来获取客户端证书:有第一个握手,在这个握手中服务器不请求客户端证书,然后是另一个握手(此时加密),在这个握手中服务器通过 TLS CertificateRequest 消息请求证书。这将防止您从Wireshark中看到任何内容,除非您配置它 使用服务器的私钥解密流量(请注意,这仅适用于某些密码套件)。
一种查看客户端证书协商的方法是使用 netsh和clientcertnegotiation=true 配置IIS使用初始客户端证书协商(这是关于初始协商)。至少在握手期间,CertificateRequest 和证书将以明文形式发送,因此您应该能够使用Wireshark看到这一点。 如果客户端没有响应CertificateRequest向服务器发送证书,则您仍将从客户端看到一个空的Certificate消息。
如果您不将私钥与证书一起导出以供Fiddler或其他客户端使用,则它将无法使用该证书。最多只能尝试发送证书,但握手将失败(因为需要使用客户端的私钥对CertificateVerify消息进行签名)。 我猜您可能会遇到以下问题: 服务器接受不呈现证书(实际上是可选的), 呈现无效证书会导致失败并导致403.7状态代码(许多服务器和SSL / TLS堆栈将其实现为致命错误,但TLS specification没有说unsupported_certificatecertificate_revokedcertificate_expiredcertificate_unknown应该是致命的,因此这取决于服务器)。

1
好的建议。我忘记了在使用WS时我们是以clientcertnegotiation=true运行的 :) - jglouie
我已经成功使用Wireshark进行SSL解密。在我们的网络中,我看到第二次握手后向客户端发送了证书请求消息。这在我们的网络之外是不会发生的(服务器在第二次握手后不会发送证书请求。发送的是:服务器Hello,证书)。再次感谢您的阅读和回复。 - Bill
如果以上内容不够清晰明了,那么这仍然是一个未解决的问题。我现在怀疑是我们的防火墙或者证书请求返回的CA列表有问题(尽管我没有在我们的网络之外看到证书请求,但我注意到在内部网络中包含的CA列表并不完整,而我在计算机存储中配置的列表也不完整,不确定为什么)。 - Bill
2
好的,我解决了我的问题。首先,我不知道为什么我在Wireshark中没有看到证书请求,因为现在事情正常了,我确定之前正在发出一个请求,因为我确实得到了带有另一个证书列表的证书提示。所以我认为那是一个错误的负面因素。我必须更改服务以在具有证书存储和NTFS文件夹特权的帐户下运行。我的客户端证书使用中间CA,因此我需要将其添加到服务器机器存储中。最后一个问题是我的客户端证书的根CA导入时未指定客户端身份验证使用。 - Bill

0

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

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

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


谢谢你的建议。Fiddler只是使用一个.cer文件,您将其放置在MyDocuments文件夹下的固定文件名中。我没有将私钥嵌入证书文件中,但似乎并没有影响到Fiddler的连接。我会尝试您的Wireshark想法,尽管我以前从未查看过TLS握手。我怀疑我们服务器上的通配符证书可能会以某种方式影响证书查询,但当Fiddler的代理服务器请求证书时,它可能正在工作,然后Fiddler将该证书传递给服务器。再次感谢。 - Bill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接