IIS 服务器 403.7 错误无法识别 ASP.NET 应用程序的客户端证书

IIS Server 403.7 error not recognizing Client Certificate for ASP.NET app

我正在尝试在 2 个系统之间执行相互身份验证,但即使客户端拥有正确的证书,服务器仍保持 returning 403.7。我已经做了一些诊断,似乎虽然应用程序正在处理证书,但它在某个地方是 "discarded" 的(当使用错误的证书时,它不是 return 403.16 而是 403.7)。

下面是一些背景

Server - ASP.NET IIS 上的 Web 服务,SOAP 调用可访问 WSDL。有 2 个根证书,一个用于服务器名称,另一个用于验证客户端证书。本地测试的证书都是self-signed。

Client - ASP.NET IIS 上的应用程序,对服务器进行 SOAP 调用。从 服务器 颁发客户端证书,并将两个根证书安装为受信任的 CA。访问一个 dll 以执行专门针对 服务器 的 SOAP 调用。客户端证书是 X509Certificate2,客户端 通过文件(不是证书存储)访问它。

客户端实际上是另一个网络应用程序的服务器,客户端之间需要一个接口服务器Clientserver 将在不同的网络上,并且需要通过 SSL 证书进行相互身份验证。两个系统之间的连接都是 TLS1.2

到目前为止进行的诊断

问题

根据标题,服务器保持 returning 403.7(通过 IIS Failed-Request-Tracing)即使 客户端 网络应用程序能够访问该文件.由于 客户端 是一个 Web 应用 运行 在 IIS 上连接并与 服务器 交互,我假设 客户端 IIS 服务正在处理这些网络请求。

我怀疑这与

了解如何进一步调试或解决此问题的一些见解?

好吧,在通过 wireshark 进行了一轮大测试和故障排除之后,应用程序似乎无法访问私钥,因为首先是 none。使用私钥从 .cer 快速更改为 .pfx 很快就解决了这个问题。

然而,它仍然没有解释为什么控制台应用程序可以使用 .cer 而不是 .pfx 访问服务器(没有私钥,可能与 IIS 有关,但我只是在做一个假设。)

另一个开发应用程序也发生了类似的情况,但是他们使用的是带有私钥的 .pfx 文件。进一步调试表明他们使用的是 X509Certificate 而不是 X509Certificate2。好吧,这个案例的问题是因为他们无法使用旧的 class.

访问私钥

总而言之, - 确保存在私钥供应用程序访问,以便正确出示正确的证书,否则根本不会出示证书。