目前我遇到了一个问题,无法找到严格的答案。
我有针对4.6.1框架的ASP.NET MVC 5应用程序,其目标是使用受TLS 1.1 / TLS 1.2协议保护的第三方API。
我试图在两种环境下运行我的应用程序:
问题在于,当我在本地启动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 Framework配置?或者注册表设置?我已经搜索过但无法找到答案。
答案 0 :(得分:10)
MSDN: ServicePointManager.SecurityProtocol Property:
请注意,此属性没有列出默认值。安全格局不断变化,默认协议和保护级别会随着时间的推移而发生变化,以避免已知的弱点。默认值将根据各个计算机配置,安装的软件以及已应用的修补程序而有所不同。
MSDN Blogs: Support for SSL/TLS protocols on Windows:
在Windows上,对SSL / TLS协议的支持与SCHANNEL组件相关联。因此,如果特定操作系统版本不支持SSL / TLS版本,则表示它仍然不受支持。
MSDN: Cipher Suites in TLS/SSL (Schannel SSP)
不同的Windows版本支持不同的TLS密码套件和优先级顺序。请参阅相应的Windows版本,了解Microsoft Schannel提供程序选择它们的默认顺序。
换句话说:这取决于您的Windows版本及其补丁级别。
但是像@Damien说的那样,为什么你会打扰默认级别呢?
答案 1 :(得分:7)
我们可以更新下面的注册表,让.Net框架使用TLS1.1 \ TLS1.2,需要重启。
我已经尝试了,我的机器中的ServicePointManager.SecurityProtocol的值已从" Ssl3,Tls" to" 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