如何通过 ASP.Core Kestrel 中的代码禁用弱密码套装?

How to disable weak cipher suits by code in ASP.Core Kestrel?

我有一个网络 API 由一个使用 Kestrel 网络服务器的简单 ASP.Core 应用程序托管。 Web 服务器在 Ubuntu linux 下的普通 ASP.Core docker 容器中运行(没有安装 IIS)。

我们使用 SSL 服务器测试来确定 SSL 配置是否安全: https://www.ssllabs.com/ssltest/index.html

目前我们得到 F- 评级(最差,有点糟糕)。

我们只启用了 TLS 1.2,这很好,但显然我们的 TLS 1.2 配置支持以下被认为非常不安全的密码套装:

This server supports anonymous (insecure) suites (see below for details). Grade set to F.

TLS_ECDH_anon_WITH_AES_256_CBC_SHA (0xc019) INSECURE 256 TLS_ECDH_anon_WITH_AES_128_CBC_SHA (0xc018) INSECURE 128

如何在容器中的 Kestrel 网络服务器 运行 上禁用这些加密机制?最好通过向应用程序添加代码,这样我们仍然可以独立于配置。

我已经通过添加以下代码禁用了不安全的 SSLv3、TLS 1.0 和 TLS 1.1:

httpsOptions.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;

解决方案是从 ASP Core 2.2 升级到 ASP Core 3.0-preview8

此问题已在 ASP Core 3.0-preview6 及更新版本中修复。默认情况下,不安全的密码套装现在被禁用。在不更改代码的情况下,SSL 测试等级从 F 变为 B。在此处查看有关 Kestrel 密码套件的详细信息:https://github.com/aspnet/AspNetCore/issues/9349

ASP Core 3.0-preview8 被认为是生产稳定的并且从 2.2 迁移服务器很容易(即使有 IdentityServer4 库依赖)。以下是我们迁移服务器所遵循的说明: https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30