【发布时间】:2017-01-07 21:21:43
【问题描述】:
目前我有一个问题,无法找到严格的答案。
我有面向 4.6.1 框架的 ASP.NET MVC 5 应用程序,它的目标是使用受 TLS 1.1/TLS 1.2 协议保护的第三方 API。
我尝试在 2 个环境中运行我的应用程序:
- 我的本地计算机 Windows 10 与 .NET 4.6.2 框架、IIS Express;
- 服务器机器 Windows Server 2012 与 .NET 4.6.1、IIS 8.0;
问题在于,当我在本地启动它时 ServicePointManager.SecurityProtocol 默认值设置为 Ssl3, Tls,因此我无法针对 API 并且必须在应用程序开始使用 TLS 1.1/TLS 1.2 时对其进行编码:@987654323 @。
应用程序在服务器上运行时默认值ServicePointManager.SecurityProtocol设置为Tls, Tls11, Tls12,所以运行良好。
根据文档,在 .NET Framework 4.6 或以上版本上运行的应用程序默认必须使用 TLS 1.1/TLS 1.2,在远程机器上的情况如何。
为什么ServicePointManager.SecurityProtocol的默认值不一样?是因为.NET Framework 配置吗?或者也许是注册表设置?我已经搜索过了,但找不到答案。
【问题讨论】:
-
default 值为何重要?如果您需要一些特定的设置,无论如何设置它们似乎是最简单的做法。
-
@Damien_The_Unbeliever 这很重要,因为当服务器因为
Ssl3和Tls已过时而撤销使用时,进行调用的应用程序必须具有Tls11和Tls12ServicePointManager.SecurityProtocol将较新的协议定义为可以使用的选项。您可以在代码中手动指定它们,但这显然不是一个好主意。为什么默认情况下不使用最安全的版本?恕我直言,这应该在我们不做任何事情的情况下发生...... -
@Damien_The_Unbeliever 这很重要,因为为每个脚本/应用程序硬编码特定协议需要更多资源来维护,需要通过营业额和未来可能不明显的更新来了解(尤其是使用不透明的 Windows SSL/TLS异常消息)。在许多环境中,现实情况是系统之间支持的最低协议版本会定期在组织范围内提高,并且在服务器范围内解决这个问题而不是在每个服务器上逐个脚本或逐个应用程序更容易管理.
标签: c# .net asp.net-mvc ssl iis