我正在尝试在两个系统之间执行相互身份验证,但即使客户端拥有正确的证书,服务器仍会返回403.7。我做了一些诊断,似乎虽然应用程序正在处理证书,但是某些地方被某些地方“丢弃”(当使用错误的证书时,它不会返回403.16而是403.7)。
服务器 - IIS上的ASP.NET Webservice,可用于SOAP调用的WSDL。有2个根证书,一个用于服务器名称,另一个用于验证客户端证书。 Certs都是自签名的,用于局部测试。
客户端 - IIS上的ASP.NET应用程序,对服务器进行SOAP调用。从服务器颁发客户端证书,并将两个根证书安装为可信CA.访问dll以专门为服务器执行SOAP调用。客户端证书是X509Certificate2,客户端通过文件(非证书存储)访问它。
客户端实际上是另一个Web应用程序的服务器,需要在客户端和服务器之间建立一个接口。 客户端和服务器将位于不同的网络上,并且需要通过SSL证书进行相互身份验证。两个系统之间的连接是TLS1.2
根据标题,即使客户端 Web应用程序能够访问该文件,服务器仍会返回403.7(通过IIS失败请求跟踪)。由于客户端是在IIS上运行并与服务器连接的网络应用,因此我认为客户端 IIS服务正在处理这些网络请求。
我怀疑它与
有关欣赏有关如何进一步调试或解决此问题的一些见解?
答案 0 :(得分:0)
在通过wireshark进行一轮大测试和故障排除之后,似乎应用程序无法访问私钥,因为没有开始。使用私钥快速修改从.cer到.pfx的快速修改。
然而,它仍然无法解释为什么控制台应用程序可以使用.cer而不是.pfx访问服务器(没有私钥,可能与IIS有关,但我只是在假设。)
一个类似的案例发生在另一个开发应用程序中,但是他们使用带有私钥的.pfx文件。进一步调试表明他们使用的是X509Certificate而不是X509Certificate2。那么这个案例的问题是因为他们无法访问旧类的私钥。
总之, - 确保应用程序存在私钥以便正确显示正确的证书,否则根本不会显示任何证书。