我的WPF应用程序连接到Azure。端点将被配置为拒绝对任何非安全(HTTP)或弱安全(TLS1.0或更高版本的HTTPS)请求的访问。但我也希望我的应用程序永远不要尝试发送非安全或弱安全的请求。
微软建议这里和那里以Framework4.7为目标,并将ServicePointManager.SecurityProtocol保留在其默认值,以便操作系统决定使用什么协议。
我提到的第二篇文章还指出,Windows 7将依赖TLS 1.0,在强烈建议不要依赖TLS 1.0之后,只需几行。因此,我知道我可以信任操作系统来获得它所拥有的最好的安全层,但如果最佳选项仍然是一个糟糕的选项,则不能信任OS没有发送请求。
我的应用程序依赖于System.Net.Http.HttpClient。我想确保我通过这个客户打的电话是:
我怎样才能做到这一点?
发布于 2019-11-14 17:11:52
正如Devs在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:00000001https://stackoverflow.com/questions/58857996
复制相似问题