.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 调用,编译为 windows EXE,运行在 Win2012-R2 上,拒绝连接到仅显示 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(在 Win 7 及更高版本上)可以正常连接到服务器(没有任何警告或 SSL 问题)。

服务器证书是 %100 OK。

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

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

虽然不容易算出,但需要的 属性 是:

System.Net.ServicePointManager.SecurityProtocol

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

此外,您可以看到 WCF 当前设置为使用什么:

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

感谢: How do I disable SSL fallback and use only TLS for outbound connections in .NET? (Poodle mitigation)

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

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

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

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