繁体   English   中英

WCF net.tcp SSL:服务器不支持客户端应用程序支持的任何密码套件

[英]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:

  1. 启动regedit并浏览到以下位置:HKLM \\ System \\ CurrentControlSet \\ Control \\ SecurityProviders \\ SChannel \\ Protocols
  2. 在Protocol:TLS 1.2下创建以下Key
  3. 在TLS 1.2下创建以下两个密钥:客户端和服务器
  4. 在客户端和服务器密钥下创建以下DWORD:DisabledByDefault和Enabled
  5. 在Client和Server下,设置以下内容:DisabledByDefault = 1和Enabled = 0
  6. 重新启动服务器。

这解决了我们的问题,同时仍然在机器上安装了.NET F / W 4.6.1。

将客户端和服务上的SecurityMode从Transport更改为Message已解决了原始问题,所有客户端现在都可以使用所有服务。

这对我来说没有意义,但无论如何,我有一个解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM