如何使 .NET 安全套接字默认为 TLS 1.2 而不是 TLS 1.0

如何使 .NET 安全套接字默认为 TLS 1.2 而不是 TLS 1.0

有人知道如何强制使用 .NET 4.7 的应用程序使用 TLS 1.2 进行安全的 https 请求吗?

我知道客户端支持 TLS 1.2,因为我可以使用 Chrome 顺利访问目标 https URL。但是,.NET 应用程序使用 Microsoft 库与 Azure 通知中心通信,正在协商使用 TLS 1.0,而 Azure 服务器已于 2020 年底停止支持该版本。数据包跟踪显示,在发送指定 TLS 1.0 的“客户端 Hello”后,Azure 服务器会立即关闭套接字。

我已遵循此处的说明: https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi

和这里:

2008 R2 TLS 1.2 在注册表中启用,重新启动,但不起作用

因此,我已为客户端和服务器启用 TLS 1.1 和 TLS 1.2

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet 设置\WinHttp

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp 设置为 TLS 1.1 和 1.2,并将新的 DefaultSecureProtocols DWORD 设置为 0x0A00。

不过,我正在运行的 Azure 代码在 System.Net.HttpWebRequest 中引发了异常。Wireshark 显示它正在尝试使用 TLS 1.0 进行连接。

答案1

Lex Li 在上面留下了一条评论,让我找到了问题的答案。以下是我解决问题的方法。
阅读此信息的来源以了解更多详细信息:https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls

“修复”需要做两件事,这些是通过更新注册表来实现的。首先,添加注册表设置以确保启用 TLS 1.1 和 TLS 1.2,有趣的是,通过创建适当的键和“DisabledByDefault”的 DWORD 值并将其设置为零。显然,如果不存在适当的键和“DisabledByDefault”,则它们“默认禁用”。

以下是默认启用这两种 TLS 协议的 REG 设置:

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

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

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

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

现在操作系统默认允许这些协议,下一步是配置 .NET 以默认使用这些操作系统设置。我们对 64 位和 32 位应用程序都执行此操作。注册表设置如下:

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

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

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

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

相关内容