【发布时间】:2020-05-08 17:00:48
【问题描述】:
我使用了一个正常工作的 ASP.NET Core 2.2 应用程序,将其升级到 3.0,突然该应用程序在 Windows Server 2012 中不再工作。它出现了以下问题:
ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY
似乎在我不得不选择 HTTP/2 之前,现在它与 HTTP1.1 一起成为默认设置。这里有一个帖子 https://github.com/aspnet/AspNetCore/issues/14350 但这完全令人困惑,没有真正的解决方案。
我尝试了各种启用/禁用不安全协议,但无济于事。如https://www.admin-enclave.com/de/articles-by-year/11-data-articles/website_articles/articles/exchange_articles/405-resolved-error-err_spdy_inadequate_transport_security-when-using-google-chome-and-owa.html
在 Windows 10 上运行良好,因为我认为协议套件更好。但在 Fiddler 中,我检查了与 Kestrel 谈判时的唯一区别是:
Windows Server 2012 R2:
[0A0A] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1301] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1302] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1303] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C02B] TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
[C02F] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C02C] TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
[C030] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[CCA9] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[CCA8] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C013] TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA
[C014] TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA
[009C] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[009D] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[002F] TLS_RSA_AES_128_SHA
[0035] TLS_RSA_AES_256_SHA
[000A] SSL_RSA_WITH_3DES_EDE_SHA
Windows 10:
[3A3A] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1301] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1302] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1303] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C02B] TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
[C02F] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C02C] TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
[C030] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[CCA9] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[CCA8] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C013] TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA
[C014] TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA
[009C] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[009D] Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[002F] TLS_RSA_AES_128_SHA
[0035] TLS_RSA_AES_256_SHA
[000A] SSL_RSA_WITH_3DES_EDE_SHA
顶行不同,但仅此而已。不知道它是什么,它是一些GREASE 值。
程序.cs:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel(opts => {
opts.ListenAnyIP(5000);
opts.ListenAnyIP(5001, listenOpts => {
listenOpts.UseHttps(new HttpsConnectionAdapterOptions {
ServerCertificate = new X509Certificate2("certificate-server.pfx", "...")
});
});
opts.Limits.MaxRequestBodySize = null;
})
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>();
}
更新
感谢@chris-pratt,我似乎走在了正确的轨道上。将证书密码更改为 ECDSA_nistP256 使 Web 应用程序工作。但不幸的是,我正在使用证书来签署 JWT 令牌,现在这被打破了:
System.NotSupportedException:证书密钥算法不是 支持的。在 System.Security.Cryptography.X509Certificates.PublicKey.get_Key()
签名码是:
var privateKey = new X509SecurityKey(new X509Certificate2("certificate-server.pfx", "..."));
var token = new JwtSecurityToken(
issuer: "Sentry",
claims: claims,
notBefore: DateTime.Now,
expires: DateTime.Now.AddDays(1),
signingCredentials: new SigningCredentials(privateKey, SecurityAlgorithms.RsaSha256Signature));
return new JwtSecurityTokenHandler().WriteToken(token);
我尝试更改 SecurityAlgorithms 枚举但没有成功。
【问题讨论】:
-
您有在该服务器上运行的任何 ASP.NET Core 3.0 应用程序吗?我在想您可能需要通过服务器管理器向服务器添加角色/功能。
-
@kristech 是的,在我使用 .NET Core 3.0 制作新版本之前,同样的应用程序运行良好
-
在服务器管理器中,单击添加角色和功能。在服务器角色部分中,转到 Web 服务器 (IIS) > Web 服务器 > 安全性。在该部分中安装所有这些角色。之后重新启动服务器,然后重试。
-
@kristech 尽管我使用 Kestrel 进行自我托管,但我尝试了您的建议,但没有奏效。
-
证书使用什么密码套件?
标签: c# asp.net-core https windows-server-2012-r2 network-protocols