.net NET 4.5.1中的WCF客户端:使用WebRequest时如何启用TLS 1.2?

.net NET 4.5.1中的WCF客户端:使用WebRequest时如何启用TLS 1.2?,.net,wcf,.net,Wcf,我们的.net WCF客户端WebRequest调用编译为windows EXE,在Win2012-R2上运行,拒绝连接到仅显示TLS 1.2的web服务器 我们知道Win2012和.NET 4.5x支持TLS 1.2 当服务器在TLS1.0及以上版本上运行时,我们没有问题。只有当我们连接到的服务器禁用了TLS 1.0、1.1以及SSL2和SSL3时,才会出现问题。服务器仅支持TLS 1.2。Chrome和firefox(在Win7及更高版本上)与服务器的连接良好(没有任何警告或SSL问题) 服

我们的.net WCF客户端WebRequest调用编译为windows EXE,在Win2012-R2上运行,拒绝连接到仅显示TLS 1.2的web服务器

我们知道Win2012和.NET 4.5x支持TLS 1.2

当服务器在TLS1.0及以上版本上运行时,我们没有问题。只有当我们连接到的服务器禁用了TLS 1.0、1.1以及SSL2和SSL3时,才会出现问题。服务器仅支持TLS 1.2。Chrome和firefox(在Win7及更高版本上)与服务器的连接良好(没有任何警告或SSL问题)

服务器证书为%100正常

问题是WebRequest在这种情况下无法连接


我们需要在代码中设置什么,以便使用WebRequest连接到可能运行TLS 1.2、1.1、1.0和/或SSL v3的系统?

虽然不容易理解,但所需的属性是:

System.Net.ServicePointManager.SecurityProtocol

这可用于在WCF环境中禁用和启用TLS级别

此外,您可以通过以下方式查看WCF当前的设置:

Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString());
感谢:

您应该使用.NET 4.5或更高版本,并在代码中添加这一行:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

重要的是,您至少应该从
.NETFramework v4.5
开始。旧版本不支持
TSL 1.2
。稍后,在向服务器进行身份验证时,请明确使用此协议:

    sslStream.AuthenticateAsClient(this._configuration.Host, null, SslProtocols.Tls12, true);

这很可能是操作系统上启用的密码。你在用什么操作系统?您是否已应用所有修补程序和service Pack?您是否尝试更新到.NET 4.5.2?@ErikFunkenbusch不,抱歉,您不正确。这不是密码启用的问题(在Win2012-R2上,所有密码都存在并且都已启用。)也不是.NET 4.51的限制,.NET 4.x中存在TLS 1.2支持。问题是如何启用它,因为.NET本身在默认情况下没有为1.2启用。你是说它不会连接到任何站点的任何安全连接吗?@ErikFunkenbusch请参阅OP。问题是,如果服务器仅显示TLS 1.2,则在.NET 4.51下的Win2012-R2上直接使用WebRequest时,无法连接到服务器,您确定服务器证书有效吗?您是否尝试过绕过证书验证来验证这是否是问题所在?您是否也设置了
ServicePointManager.SecurityProtocol=SecurityProtocolType.Tls12
?Windows服务器版本是否与修复程序相关,或者,只要您适当地设置
System.Net.ServicePointManager.SecurityProtocol
,无论您的Windows版本如何,它都能工作吗?@mmcrae Windows版本与以下程度相关:如果操作系统本身不支持TLS 1.2(通过schannel dll),那么在.Net中请求它将不会给您。。。请参阅,虽然此答案正确,但它设置了程序范围的设置。如果我想在同一个程序中对不同的服务调用使用不同的协议怎么办?@Esko你不能,这是唯一可能的设置,.NET Framework的一个明显的设计缺陷。显示问题并提出解决方案。当然,微软。你不必碰代码:你的代码正在抹去SecurityProtocol中的任何值,只留下TLS1.2。某些Web服务可能仍在TLS1.1上。要添加TLS1.2作为可能的选项,以及其他选项,请使用
|=
了解更多详细信息