在所有连接上强制ServicePointManager.SecurityProtocol到TLS 1.2

时间:2016-08-10 13:00:42

标签: .net vb.net wcf ssl tls1.2

我有一个发送传出请求的WCF服务。目前,它使用SSL 3.0TLS 1.0

我发送请求的服务现在只接受TLS 1.2

我可以在请求之前(以及每个请求)设置SecurityProtocolType,但我希望它为所有传出请求使用TLS 1.2,而不必为每个请求指定它。

此代码为请求正确设置:

<OperationContract(), WebGet(UriTemplate:="...")>
Public Function SomeService()

    System.Net.ServicePointManager.SecurityProtocol = (System.Net.SecurityProtocolType) 3072; // 3072 is TLS 1.2

    // Do request

End Function

但我无法看到如何设置WCF以对所有请求使用TLS 1.2。我已尝试将上述语句放入Application_Start中的Application_BeginRequestGlobal.asax,但在执行请求时,SecurityProtocol又返回SSL3/TLS1.0

2 个答案:

答案 0 :(得分:1)

如果您有权访问注册表,则可以应用以下密钥: registry key

这会在传输层的Windows级别强制执行TLS 1.2,因此您无需更改任何代码。

这些是上述文件中更改的键:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

答案 1 :(得分:0)

在 Startup.Auth.cs 文件中添加这一行。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

这对我们有用。