首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强迫HttpClient执行高于1.0的TSL

强迫HttpClient执行高于1.0的TSL
EN

Stack Overflow用户
提问于 2019-11-14 13:32:15
回答 1查看 174关注 0票数 0

我的WPF应用程序连接到Azure。端点将被配置为拒绝对任何非安全(HTTP)或弱安全(TLS1.0或更高版本的HTTPS)请求的访问。但我也希望我的应用程序永远不要尝试发送非安全或弱安全的请求。

微软建议这里那里以Framework4.7为目标,并将ServicePointManager.SecurityProtocol保留在其默认值,以便操作系统决定使用什么协议。

我提到的第二篇文章还指出,Windows 7将依赖TLS 1.0,在强烈建议不要依赖TLS 1.0之后,只需几行。因此,我知道我可以信任操作系统来获得它所拥有的最好的安全层,但如果最佳选项仍然是一个糟糕的选项,则不能信任OS没有发送请求。

我的应用程序依赖于System.Net.Http.HttpClient。我想确保我通过这个客户打的电话是:

  1. 总是安全的。也就是说,始终使用HTTPS,永远不要使用HTTP。
  2. 始终保持在足够的水平。也就是说,至少要依赖TLS 1.1,但绝不依赖TLS 1.0或SSL。

我怎样才能做到这一点?

  • 对于第1点,我只需指定“创建URI对象时的https://”;这总是正确的吗?“
  • 对于第2点,我可以按位组合所有的SecurityProtocolType 枚举,不包括.ssl3.Tls,但这也排除了任何未来的技术(TLS1.4?)。既然这个答案字段已经添加到枚举中了,那么.SystemDefault是否仍然为真呢?
EN

回答 1

Stack Overflow用户

发布于 2019-11-14 17:11:52

正如Devs在HttpClient谈判之前所说的那样,TLS从操作系统上经过。特别是在W7中,默认情况下不允许应用程序正确使用该功能。为了解决这个问题,如果您不想在运行应用程序的机器上更新.NET框架,或者您不想在操作系统上进行任何更新,那么您需要更新注册表中的一些键。您可以通过VB.Net中的代码来实现这一点。在下面的示例中,我想向您展示需要更新/设置的键。另外,如果您获得了这些代码并创建了一个.reg文件并尝试执行,那么您就可以解决计算机中的问题,但是对于分布式应用程序,您需要在安装了应用程序的每台机器上通过代码来解决这个问题。注意,标签v2.0.50727或标签v4.0.30319是安装在机器上的.Net框架的版本。这意味着您必须在安装版本之前知道(您也可以通过注册表或代码获得此信息),以及您的应用程序是否在其中一个版本中编译。您只能更新您的应用程序所使用的版本。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58857996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档