.net 使用TLS1.1、TLS1.2的Web服务无法在开发服务器上连接,在本地开发中工作

.net 使用TLS1.1、TLS1.2的Web服务无法在开发服务器上连接,在本地开发中工作,.net,ssl,tls1.2,windows-server-2012-r2,.net,Ssl,Tls1.2,Windows Server 2012 R2,我有一个.NET WebService调用,该调用设置为使用TLS1.1或更高版本。这在我的本地开发中起作用,但当我移动到我们的开发服务器时,我收到以下错误: 无法对xxx数据执行ExecuteRequest--请求已中止: 无法创建SSL/TLS安全通道 在代码中,我有tls设置: ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.T

我有一个.NET WebService调用,该调用设置为使用TLS1.1或更高版本。这在我的本地开发中起作用,但当我移动到我们的开发服务器时,我收到以下错误:

无法对xxx数据执行ExecuteRequest--请求已中止: 无法创建SSL/TLS安全通道

在代码中,我有tls设置:

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13 | SecurityProtocolType.Ssl3;
我已经在服务器上验证了注册表设置是否正确以启用TLS1.1、1.2等。。。通过检查:*HKEYLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols[TLS 1.1,TLS 1.2]* 对于这些位置的“客户机”和“服务器”密钥,我有DisabledByDefault=0和Enabled=1

在windows系统日志中有一个Schannel错误:EventID 36887:从远程端点接收到致命警报。TLS协议定义的致命警报代码为40

我不知道接下来该怎么办。我觉得这可能是一个简单的设置或注册表调整,但我现在迷路了


提前感谢您的帮助

如果我理解正确,您的代码可以在一台服务器上运行,但不能在另一台服务器上运行。在这种情况下,似乎至少您已经正确配置了.Net Framework,但正如其中一条评论所建议的那样,您应该检查您的操作系统是否支持它TLS 1.1(也许值得检查一下您是否也在完全相同的.Net Framework版本上运行)

我看到您使用的是win server 2012,在那里它似乎没有默认启用。以下是MS docs的报价:

Windows的早期版本,如Windows 7或Windows Server 2012, 默认情况下,不要为安全通信启用TLS 1.1或TLS 1.2 使用WinHTTP。对于这些早期版本的Windows,请安装更新 3140245以启用下面的注册表值,该值可以设置为“添加” 将TLS 1.1和TLS 1.2添加到WinHTTP的默认安全协议列表中

尝试检查文档并验证TLS 1.1。在操作系统中启用


另外,如果您尝试连接的服务器支持TLS 1.2,我根本不想为TLS 1.1费心,只要强制所有人使用TLS 1.2。

您应该提供更多关于发生此错误时尝试连接的内容的详细信息。客户机和服务器很可能不支持一个TLS版本。如果连接发生在TLS1.1+上的您的服务上,可能您的客户端被配置为仅使用TLS1.0?当我调用请求时会发生错误。我们连接到的远端支持TLS1.1+,我可以使用测试服务器使用的相同SSL证书进行连接。直到远端删除对TLS1.0的支持,此服务才开始工作。这就是为什么我觉得这是我们的服务器设置,而不是Web服务代码,因为我们明确允许1.1+,尽管它可能不相关,但您可能不想要SSL3。SSL3比TLS 1.0旧。来自Microsoft:
SSL3=指定安全套接字层(SSL)3.0安全协议。SSL 3.0已被传输层安全(TLS)协议取代,仅为向后兼容而提供。
每端使用的是什么操作系统?可能两个操作系统都支持TLS 1.1,但协商的密钥不满足两端的要求。几个月前我们遇到过这样的问题。您可能需要检查:将2016服务器上Diffie Hellman的最小密钥长度降低到1024解决了我们的问题
[HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie Hellman]
“ServerMinKeyBitLength”=dword:00000400
@Wiz我的操作系统是Windows Server 2012R2。不确定远端操作系统,但这不重要,因为它应该是不可知的操作系统。我将Diffie Hellman降低到1020,仍然收到与以前相同的错误。现在我真的开始转动轮子了。它的行为就像tls.1.1+被阻止或未启用。我已经按照该文档和其他文档中的步骤启用了1.1和1.2。它仍然无法连接到1.1/1.2。很遗憾,听到这个消息,我想不出您还可以做些什么来修复它。唯一的建议是将所有涉及的服务器更新为更现代的OS/.Net框架。2012年很古老。我知道这在传统环境中并不总是可能/容易的,但这是您迟早要做的事情。是否有办法恢复所有涉及TLS、SSL、密码等的注册表设置。。。?在这台服务器的整个生命周期中,由于实现了STIG,这些设置都发生了更改:(服务器,IIS)很抱歉,没有足够的知识来说明任何有意义的事情:)