下午好! 我使用HttpClient使用Azure Maps API。 如何启用TLS 1.2支持? 据我所知,在框架4.6+中支持它。我不需要做任何事情让它工作吗?
下午好! 我使用HttpClient使用Azure Maps API。 如何启用TLS 1.2支持? 据我所知,在框架4.6+中支持它。我不需要做任何事情让它工作吗?
使用ServicePointManager来设置安全协议。
获取或设置由ServicePointManager对象管理的ServicePoint对象使用的安全协议。
HttpClient httpClient = new HttpClient();
//specify to use TLS 1.2 as default connection
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
此属性选择用于新连接的安全套接字层 (SSL) 或传输层安全性 (TLS) 协议的版本;现有连接不会更改。
.NET Framework 4.7 开始,该属性的默认值为 SecurityProtocolType.SystemDefault。这允许基于 SslStream 的 .NET Framework 网络 API(如 FTP、HTTP 和 SMTP)从操作系统继承默认安全协议,或从系统管理员执行的任何自定义配置中继承默认协议。
一般来说,在您的应用程序中无需指定任何配置即可启用最新的TLS协议。
早期版本的最佳实践和场景在learn.microsoft.com中概述。
在高层次上,您应该进行审计,以确保您的应用程序不会对较低的TLS版本有任何硬依赖。但是除此之外,不需要任何工作。
我们建议您:
- 在应用程序中目标.NET Framework 4.7或更高版本。在WCF应用程序中目标.NET Framework 4.7.1或更高版本。
- 不要指定TLS版本。将代码配置为让操作系统决定TLS版本。
- 执行彻底的代码审计以验证您未指定TLS或SSL版本。
当您的应用程序允许操作系统选择TLS版本时:
- 它自动利用未来添加的新协议,例如TLS 1.3。
- 操作系统阻止发现不安全的协议。
值得探索Microsoft文档中关于 TLS最佳实践的内容。
对我来说,问题是通过添加以下注册表键之一解决的:
Windows Registry Editor Version 5.00
[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
必须说两件事情是真的:
1.) .NET 4.7.2 中的 HTTP 客户端读取 SystemDefaultTLSVersions,而 4.6 没有。如果没有此项,则 4.7.2 只会否定到 SSL 3.0,然后停止。这是一个根本性的改变,使用该 HTTP 客户端的应用程序最好通过产品设置单独添加注册表值。
2.) 操作系统默认不阻止任何内容。管理员必须禁用较低级别的加密,不应使用它们。而这在 schannel 注册表键下面技术上发生。
只是举个例子...强制使用 TLS 1.1,您必须像这样禁用 TLS 1.0、SSL 3.0、SSL 2.0 和 PCI 2.0
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client] "DisabledByDefault"=dword:00000001 "Enabled"=dword:00000000
TLS 1.1 将具有 Disabledbydefault=0 和 Enabled=1,在 Server 2022 中还有一个针对 TLS 1.3 的选项。