.NET Framework 4.0中的TLS 1.2

时间:2015-11-17 16:19:06

标签: asp.net .net-4.0 windows-server-2008-r2 tls1.2

我有一台运行十几个.NET Framework 4.0 WebForms应用程序的Windows Server 2008 R2服务器,我需要禁用TLS 1.0及更低版本。当我这样做时,所有安全连接都失败了,我被迫重新启用TLS 1.0。有没有办法在框架4.0环境中使用TLS 1.2?也许我错过了什么?

此外,由于我们使用的CMS版本的限制,我们目前无法升级框架。

7 个答案:

答案 0 :(得分:69)

如果您无法向system.net类库添加属性。

然后,添加 Global.asax 文件:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //TLS 1.2
ServicePointManager.SecurityProtocol = (SecurityProtocolType)768; //TLS 1.1

你可以在一个函数中使用它,在起始行:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072;

而且,它对STRIPE支付网关很有用,它只支持TLS 1.1,TLS 1.2。

修改 在我的服务器上安装了很多关于.NET 4.5的问题之后......这里是生产服务器上Registry的屏幕截图:

我只安装了.NET framework 4.0。

registry

答案 1 :(得分:50)

在您的注册表中进行以下更改,它应该有效:

1。).NET Framework strong cryptography注册表项

[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

2。)Secure Channel (Schannel) TLS 1.2注册表项

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

答案 2 :(得分:30)

我发现改变它的唯一方法是直接在代码上:

在你的应用程序的最开始设置

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

您应该包含system.net

我在调用Web服务之前这样做了,因为我们也必须阻止tls1。

答案 3 :(得分:22)

根据this,您需要安装.NET 4.5。有关详细信息,请访问该网页。它的要点是,安装.NET 4.5后,您的4.0应用程序将使用4.5 System.dll。您可以通过两种方式启用TLS 1.2:

  • 在应用程序开头,添加以下代码:ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
  • 将注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319: SchUseStrongCrypto设置为DWORD 1

答案 4 :(得分:4)

我在VB中进行了编码,并能够将以下行添加到Application_Start内的Global.asax.vb文件中

ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)    'TLS 1.2

答案 5 :(得分:2)

有两种可能的情况,

  1. 如果您的应用程序在.net Framework 4.5或更低版本上运行,并且可以轻松地将新代码部署到生产环境中,则可以使用以下解决方案。

    您可以在调用API之前添加以下代码行,

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // .NET 4.0
    
  2. 如果您无法部署新代码,并且想使用生产环境中存在的相同代码解决问题,那么您有两个选择。

选项1

[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


然后创建扩展名为.reg的文件并安装。

注意::此设置将在注册表级别适用,并且适用于该计算机上存在的所有应用程序,如果您希望仅限于单个应用程序,则可以使用Option 2

选项2 :这可以通过更改配置文件中的某些配置设置来完成。 您可以在配置文件中添加任何一个。

<runtime>
    <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/>
</runtime>

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"
</runtime>

答案 6 :(得分:0)

我在安装了Windows的.NET Framework 4.0上遇到了同样的问题 我通过安装.NET Framework 4.6.2解决了这个问题 或者您可以下载newest package进行试用。