ChatGPT解决这个技术问题 Extra ChatGPT

.NET Framework 4.0 中的 TLS 1.2

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

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


V
Vikrant

如果您无法将属性添加到 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。

https://i.stack.imgur.com/FlGhA.png


我认为这需要安装 .net 4.5,所以从技术上讲,这不是 .net 4.0 的修复程序。
它需要安装 .NET 4.5 进行编译,但您不必在项目中定位它。
任何人的未来确认:这适用于 VB .NET 3.5。 ServicePointManager.SecurityProtocol = DirectCast(3072, SecurityProtocolType) 'TLS 1.2
@Martin 但您需要在目标计算机上安装 .NET 4.5 才能正常工作。
附上的截图并不能证明没有安装 4.5+ 框架。它们显示在带有“Release”关键字的 v4/Full 键下:docs.microsoft.com/en-us/dotnet/framework/migration-guide/…
P
Philipp Maurer

在您的注册表中进行以下更改,它应该可以工作:

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

这非常有效,并且不需要我添加其他帖子正在谈论的代码行。
太棒了,这设法让 .Net40 与 TLS 1.2 支付网关和邮件服务器通信。重新启动 WWW Publishing 服务足以使其正常工作。
我需要所有这些键/值,还需要重新启动服务器,但之后 .Net 4.0 应用程序支持 TLS 1.2,无需任何代码更改。
我希望我不需要 5 个小时才能找到这篇文章。这解决了我的 SSL 握手错误(请求被中止:无法创建 SSL/TLS 安全通道)。
感谢您!!!这解决了我通过 MarkdownPad 使用 github 的降价渲染服务的问题。
V
Vikrant

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

在您设置的应用程序的开头

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

您应该包括 system.net

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


这不适用于面向 .NET 4.0 的项目,因为 SecurityProtocolType 没有成员 Tls12
ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072; 这将在 4.0 中有效,但可能需要完全修补/更新您的运行时。
虽然这已经一岁了,但在我看来,答案是错误的!应该使用@STW 提供的答案进行更新
如果您使用的是 .NET 4.0,则接受的答案不正确
不要对安全协议进行硬编码。请参阅TLS Best Practices with .NET
V
Vikrant

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


为了在不更改代码的情况下获得 TLS 1.2,除了注册表项之外,您还需要安装 .NET 4.6。更多信息:github.com/TheLevelUp/pos-tls-patcher
u
user2721607

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

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

i
incarnadine

有两种可能的情况,

如果您的应用程序在 .net framework 4.5 或更低版本上运行,并且您可以轻松地将新代码部署到生产环境中,那么您可以使用以下解决方案。您可以在调用 API 之前添加以下代码行,ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5 ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // .NET 4.0 如果您无法部署新代码并且想使用生产中存在的相同代码解决问题,那么您有两个选择。

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

K
Krain Chen

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


如果他们需要运行 4.5 怎么办?
我已经安装了它,它不起作用。注册密钥实际上完成了这项工作。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅