c# - 强制 HttpClient 强制 TSL 高于 1.0
问题描述
我的 WPF 应用程序连接到 Azure Web API。端点将被配置为拒绝访问任何非安全 (HTTP) 或弱安全(具有 TLS 1.0 或更早版本的 HTTPS)请求。但我也希望我的应用程序永远不要尝试发送非安全或弱安全请求。
Microsoft 建议在这里和那里以 Framework 4.7 为目标并保留ServicePointManager.SecurityProtocol
其默认值,以便操作系统确定要使用的协议。
我提到的第二篇文章也表明 Windows 7 将依赖 TLS 1.0,在强烈建议不要依赖 TLS 1.0 之后仅几行。所以我知道我可以相信操作系统可以获得它可用的最好的安全层,但如果最好的选择仍然是一个糟糕的选择,我不能相信操作系统不会发送请求。
我的应用程序依赖于System.Net.Http.HttpClient
. 我想确保我通过这个客户拨打的电话是:
- 始终安全。也就是说,始终使用 HTTPS,永远不要使用 HTTP。
- 始终保持在足够的水平。也就是说,至少依赖 TLS 1.1;但绝不是 TLS 1.0 或 SSL。
我怎样才能做到这一点?
解决方案
正如开发人员在 HttpClient 协商从操作系统传递的 TLS 之前所说的那样。特别是在 W7 中,默认情况下未启用以允许应用程序正确使用它。为了解决这个问题,如果您不想在运行您的应用程序的机器上更新 .NET 框架,或者您没有在操作系统上进行任何更新,您需要更新注册表中的一些键。您可以通过 VB.Net 中的代码来实现。在下面的示例中,我想向您展示需要更新/设置的键。此外,如果您获得此代码并创建一个 .reg 文件并尝试执行,则可以解决您机器中的问题,但对于分布式应用程序,您需要通过安装应用程序的每台机器上的代码来完成此操作。请注意,标签v2.0.50727
或标签v4.0.30319
是机器上安装的 .Net 框架的版本。这意味着您必须在安装版本之前知道(您也可以通过注册表或代码获取)以及您的应用程序是否在其中一个版本中编译。您只能更新您的应用所使用的版本。
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
[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
推荐阅读
- yii - 使用路由的重定向在 yii2 中不起作用
- laravel - 文件上传 - 执行 ListObjects 时出错 | AWS S3 和 Laravel
- javascript - 从 Reducer Giving Error 调用 Axios API 在服务文件中命中
- merge - ffmpeg 合并 mxf 音频和 m2v 视频
- java - 如何在三元运算符中进行转换?
- angular - 如何在 NG-Zorro 中更改 nz-table 的样式
- scala - Play 应用程序类的含义
- android - ViewModel 没有显示任何内容
- excel - 代码已正确执行时陷入循环
- macos - 在 macOS Mojave 中增加 HNPROC