asp.net .NET Framework 4.0中的TLS 1.2

o4hqfura  于 12个月前  发布在  .NET
关注(0)|答案(8)|浏览(191)

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

5us2dqdw

5us2dqdw1#

如果您无法将属性加入至system.net类别库。
然后,添加全局.asax文件:

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

字符串
你可以在一个函数中使用它,在开始行:

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


而且,它对只支持TLS 1.1、TLS 1.2的STRIPE支付网关非常有用。

**编辑:**在回答了许多关于我得服务器上是否安装了.NET 4.5得问题之后...以下是我得生产服务器上Registry得屏幕截图:

  • 我只安装了.NET Framework 4.0。*


的数据

t2a7ltrp

t2a7ltrp2#

在您的注册表中进行以下更改,它应该可以工作:
1.).NET Framework强加密注册表项

[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.)安全通道(Scanner)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

vybvopom

vybvopom3#

我发现的唯一改变这一点的方法是直接在代码上:
在你的应用程序的最开始,你设置

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

字符串
你应该包括system.net
我在调用web服务之前这样做是因为我们也必须阻止tls1。

7qhs6swi

7qhs6swi4#

根据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
zqdjd7g9

zqdjd7g95#

有两种可能的情况,
1.如果您的应用程序运行在.net framework 4.5或更低版本上,并且您可以轻松地将新代码部署到生产环境中,那么您可以使用下面的解决方案。
您可以在进行API调用之前添加以下代码行,

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // .NET 4.0

字符串
1.如果您无法部署新代码,并且希望使用生产环境中存在的相同代码解决问题,则有两种选择。

选项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>

6jjcrrmo

6jjcrrmo6#

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

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

字符串

a7qyws3x

a7qyws3x7#

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

8fsztsew

8fsztsew8#

这对我很有效

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;

字符串

相关问题