【发布时间】:2019-06-06 14:37:00
【问题描述】:
平台详细信息:反向代理中的 C#、.Net Core 2.0、WS 2016、IIS 和 Kestrel
我的网络应用必须使用 HTTPS 和 TLS 1.2。它已经在 SSL 上运行良好,但这还不够。我在网上找到了有关在我的 Web 服务器上默认 TLS 1.2 所需的注册表编辑的详细信息,并进行了这些更改。在这些注册表编辑之后,我的原始代码仍然有效。为了强制使用 TLS1.2,我在 buildwebhost 方法中的 UseKestrel() 中添加了以下内容。
options =>
{
options.Listen(System.Net.IPAddress.Loopback, 443, listenOptions =>
{
listenOptions.UseHttps(new HttpsConnectionAdapterOptions { SslProtocols = SslProtocols.Tls12 });
}
}))
现在该网站正在抛出 502.5。 IIS 配置了原始证书,并且站点绑定到端口 443。有人告诉我证书本身在 SSL 和 TLS 之间是相同的,所以我不需要另一个。当我尝试使用本地主机调试代码时,我的 VS 返回错误提示
System.ArgumentException: '服务器证书参数是必需的。'
我找到了“X509Certificate2”对象的详细信息,以及作者使用加载方法从服务器上的某个位置流式传输该证书的一些不同实现,但我不知道这是否是这里需要的。
【问题讨论】:
-
您不需要做任何特别的事情。默认是使用操作系统的选项,这意味着首先使用最强的可用算法。在 WS 2016 上,即 TLS 1.2。仅当您想禁用时才需要指定某些内容,例如 TLS1.1。
-
开箱即用的 ASP.NET Core 2.1 模板在其默认配置中配置 TLS、HSTS 等。查看 2018 年 8 月的 Scott Hanselman's 文章。2.0 已经不支持。 2.x 系列中的长期发布版本是 2.1
-
如果您想禁用较低版本的 TLS,您必须在操作系统级别执行此操作。正如@PanagiotisKanavos 所说,服务器将始终使用最高的 compatible 版本,但如果一个非常老的客户端通过请求 TLS 1.0 来提供服务,除非它被操作系统禁用,否则它将被提供服务。在这种情况下,客户端将完全拒绝访问。
标签: c# asp.net-core-2.0 tls1.2 kestrel-http-server