为什么ServicePointManager.不同机器上的SecurityProtocol默认值不同

本文关键字:SecurityProtocol 默认值 机器 ServicePointManager 为什么 | 更新日期: 2023-09-27 18:04:58

目前我有一个问题,不能找到严格的答案。

我有ASP。. NET MVC 5应用程序瞄准4.6.1框架,其目标是与由TLS 1.1/TLS 1.2协议保护的第三方API一起工作。

我尝试在两个环境下运行我的应用程序:

  • 我的本地机器Windows 10 with .NET 4.6.2 Framework, IIS Express;
  • 服务器机Windows server 2012 with .NET 4.6.1, IIS 8.0;

问题在于,当我在本地启动它时,ServicePointManager.SecurityProtocol默认值设置为Ssl3, Tls,因此我无法瞄准API,并且必须在应用程序启动时使用TLS 1.1/TLS 1.2: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12

当应用程序在服务器上运行时,默认值ServicePointManager.SecurityProtocol设置为Tls, Tls11, Tls12,因此它运行良好。

根据文档,在。net Framework 4.6或以上版本上运行的应用程序默认必须使用TLS 1.1/TLS 1.2,这是远程机器上的情况。

为什么ServicePointManager.SecurityProtocol的默认值不同?是因为。net框架配置吗?或者注册表设置?

为什么ServicePointManager.不同机器上的SecurityProtocol默认值不同

MSDN: ServicePointManager。SecurityProtocol属性:

注意,故意没有列出此属性的默认值。安全环境不断变化,默认协议和保护级别随着时间的推移而变化,以避免已知的弱点。默认值将根据各个机器的配置、安装的软件和应用的补丁而变化。

MSDN博客:支持Windows上的SSL/TLS协议:

在Windows上,对SSL/TLS协议的支持与SCHANNEL组件绑定。因此,如果一个特定的操作系统版本不支持SSL/TLS版本,这意味着它仍然不受支持。

MSDN: TLS/SSL(通道SSP)中的密码套件

不同的Windows版本支持不同的TLS密码套件和优先顺序。请参阅相应的Windows版本,以了解Microsoft channel Provider选择它们的默认顺序。

换句话说:这是由您的Windows版本及其补丁级别决定的。

但是就像@Damien说的,你为什么要麻烦默认级别是什么?

我们可以像下面这样更新注册表,让。net框架使用TLS1.1'TLS1.2,需要重新启动。

我试过了,ServicePointManager的值。我的机器中的安全协议从"Ssl3, Tls"更改为"Tls, Tls11, Tls12":

[HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'.NETFramework'v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE'SOFTWARE'Wow6432Node'Microsoft'.NETFramework'v4.0.30319]
"SchUseStrongCrypto"=dword:00000001 
相关文章:
  • 没有找到相关文章