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

C# WCF net.tcp SSL:服务器不支持客户端应用程序支持的密码套件,c#,web-services,wcf,ssl,tcp,C#,Web Services,Wcf,Ssl,Tcp,我有两台电脑,我们叫它们PC1和PC2 我编写了一个服务端应用程序,它打开一个自托管的WCF net.tcp端点,并使用X509证书进行保护。我用于传输安全的证书是“颁发给”任意名称的,例如:MY-TEST-SERVICE 我还编写了一个客户端应用程序来与服务对话。它知道并指定服务将提供的DnsIdentity(MY-TEST-service),它使用服务用于传输安全的相同X509证书 当我在PC1上运行客户端时,它与PC1和PC2上的服务一起工作 当我在PC2上运行客户端时,它与PC1上的服务

我有两台电脑,我们叫它们PC1和PC2

我编写了一个服务端应用程序,它打开一个自托管的WCF net.tcp端点,并使用X509证书进行保护。我用于传输安全的证书是“颁发给”任意名称的,例如:MY-TEST-SERVICE

我还编写了一个客户端应用程序来与服务对话。它知道并指定服务将提供的DnsIdentity(MY-TEST-service),它使用服务用于传输安全的相同X509证书

当我在PC1上运行客户端时,它与PC1和PC2上的服务一起工作

当我在PC2上运行客户端时,它与PC1上的服务一起工作,但与PC2上的服务的SSL握手失败

在PC2上打开WCF客户端跟踪,然后成功连接到PC1上的secured net.tcp服务,但未能连接到PC2上的secured net.tcp服务,我可以准确地看到哪个步骤失败

从PC2到PC1的成功握手跟踪报告: -已确定端点引用的标识 -身份验证成功

从PC2到PC2的失败握手跟踪报告: -套接字连接已中止。这可能是由于。。。 -抛出异常


为什么身份验证过程会失败,但只有当客户端和服务都在PC2上执行时才会失败?

将客户端和服务上的SecurityMode从传输更改为消息解决了最初的问题,所有客户端现在都可以使用所有服务


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

我们最终发现了问题(我不知道它是否适用于您的具体情况),而没有更改代码中的任何内容-在我们的情况下,它只是开始了一天,没有任何代码更改

我们发现已安装了
kb3102467
,即.NET Framework 4.6.1,我们最终将使用它,并且可能会在每个人的计算机上找到它自己

问题似乎在于TLS1.2中不再支持SHA512,因为它会导致高CPU使用率。我们可能需要为客户端和服务器颁发新的SSL证书

作为解决办法,我们禁用了TLS 1.2:

  • 启动regedit并浏览到以下位置:HKLM\System\CurrentControlSet\Control\SecurityProviders\SChannel\Protocols
  • 在协议下创建以下密钥:TLS 1.2
  • 在TLS 1.2下创建以下两个密钥:客户端和服务器
  • 在客户机和服务器密钥下创建以下DWORD:DisabledByDefault和Enabled
  • 在客户端和服务器下设置以下内容:DisabledByDefault=1和Enabled=0
  • 重新启动服务器

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

    证书是否同时位于PC2上的本地计算机>受信任的人员存储和本地计算机>个人存储?是。我用于客户端和服务器的证书位于本地计算机Personal中,其CA位于本地计算机Trusted Root中,PC1和PC2上都是这种情况。证书有私钥,CA的路径经过验证。深入挖掘,我在系统事件日志中看到一个Schannel事件:“从远程客户端应用程序接收到TLS 1.2连接请求,但服务器不支持客户端应用程序支持的密码套件。SSL连接请求失败。”最后,我看到了实际的问题。。。但是,在同一台PC上执行的服务和客户端怎么会像这样不一致呢@米克斯,你能找到解决这个问题的办法吗?我们现在面临着同样的问题。@developer82非常抱歉延迟。。。我刚才看到你的问题。。。我将安全模式从传输更改为消息。非常感谢您的帮助。