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

WCF Client in .NET 4.5.1: How to enable TLS 1.2 when WebRequest is used?

我们的.NET WCF客户机webrequest调用编译为在win2012-r2上运行的Windows exe,拒绝连接到仅显示tls 1.2的Web服务器。

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

当服务器呈现TLS 1.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的系统?


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

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


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

System.Net.ServicePointManager.SecurityProtocol

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

此外,您还可以看到当前使用的wcf设置为:

1
Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString());

感谢:如何禁用SSL回退并仅对.NET中的出站连接使用TLS?(减轻狮子狗)


重要的是,你至少应该从.Net Framework v4.5开始。旧版本不支持TSL 1.2。稍后,在对服务器进行身份验证时,显式使用此协议:

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