我有两台电脑,我们称之为PC1和PC2。
我写了一个服务端应用程序,它打开一个自托管的WCF net.tcp端点,使用X509证书进行保护。我用于运输安全的证书是"颁发给"任意名称,例如:MY-TEST-SERVICE。
我还写了一个客户端应用程序来与服务进行通信。它知道并指定服务将提供的DnsIdentity(MY-TEST-SERVICE),它使用服务用于传输安全性的相同X509证书。
当我在PC1上运行客户端时,它适用于PC1和PC2上的服务。
当我在PC2上运行客户端时,它与PC1上的服务一起工作,但与PC2上的服务的SSL握手失败。
在PC2上启用WCF客户端跟踪,然后成功连接到PC1上的安全net.tcp服务,并且无法连接到PC2上的安全net.tcp服务,我可以确切地看到哪个步骤失败。
成功握手的追踪,从PC2到PC1,报告: - 确定端点参考的身份 - 身份验证成功
从PC2到PC2的失败握手的跟踪报告: - 套接字连接已中止。这可能是由...引起的 - 抛出异常
为什么身份验证过程会失败,但只有当客户端和服务都在PC2上执行时才会失败?
答案 0 :(得分:1)
我们最终发现问题(我不知道它是否适用于您的确切情况)而不更改我们的代码中的任何内容 - 在我们的情况下,它只是在没有任何代码更改的情况下开始了一天。
我们发现安装了kb3102467
的Windows更新 - 这是我们最终将使用的.NET Framework 4.6.1,并且可能会在每个人的计算机上找到它。
似乎问题是TLS 1.2不再支持SHA512,因为它导致高CPU使用率。我们可能需要为客户端和服务器发布新的SSL证书。
作为解决方法,我们禁用了TLS 1.2:
这解决了我们的问题,同时仍然在机器上安装了.NET F / W 4.6.1。
答案 1 :(得分:0)
将客户端和服务上的SecurityMode从Transport更改为Message已解决了原始问题,所有客户端现在都可以使用所有服务。
这对我来说没有意义,但无论如何,我有一个解决方案。