【问题标题】:How to implement TLS 1.2 in ASP.Net Core 2.0如何在 ASP.Net Core 2.0 中实现 TLS 1.2
【发布时间】: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


【解决方案1】:

答案在问题的 cmets 中。服务器提供了一个默认情况下不包含 TLS 1.2 的映像,因此我们所做的注册表编辑实际上是必需的,仅此而已

【讨论】:

  • 请选择您的答案作为正确答案,并详细说明您的问题。
  • 正如 cmets 所指出的,WS2016 操作系统应该已经配置为默认使用 TLS 1.2。该组织的部分供应过程从服务器中删除了 TLS1.2,因此编辑注册表以重新启用 TLS1.2 是解决方案。无需进一步更改。
猜你喜欢
  • 2018-08-30
  • 2020-12-06
  • 2018-03-21
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
相关资源
最近更新 更多