[英]WCF net.tcp SSL: none of the cipher suites supported by the client application are supported by the server
我有两台电脑,我们称之为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上执行时?
我们最终发现了问题(我不知道它是否适用于您的确切情况)而不更改我们的代码中的任何内容 - 在我们的例子中,它只是在没有任何代码更改的情况下开始了一天。
我们发现安装了一个安装了kb3102467
的Windows Update - 这是我们最终会使用的.NET Framework 4.6.1,并且可能会在每个人的机器上找到它。
似乎问题是TLS 1.2不再支持SHA512,因为它导致高CPU使用率。 我们可能需要为客户端和服务器发布新的SSL证书。
作为解决方法,我们禁用了TLS 1.2:
这解决了我们的问题,同时仍然在机器上安装了.NET F / W 4.6.1。
将客户端和服务上的SecurityMode从Transport更改为Message已解决了原始问题,所有客户端现在都可以使用所有服务。
这对我来说没有意义,但无论如何,我有一个解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.