【发布时间】:2019-08-09 06:25:46
【问题描述】:
我正在尝试让 HTTP/2 与 ASP.Net Core 2.2 一起使用。我正在 Windows 10 x64 1809 上进行测试。
我将基本模板与以下网络主机构建器一起使用:
public static IWebHostBuilder CreateWebHostBuilderKestrel(string[] args)
{
var builder = WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Any, 35000,
lo =>
{
lo.Protocols = HttpProtocols.Http1AndHttp2;
lo.UseHttps(@"path to cert");
});
});
return builder;
}
使用 Chrome 时,它接受证书并通过 HTTPS 显示网站。问题是它在 devtools 部分检查网络请求时使用的是 HTTP/1.1 而不是 h2。
使用openssl s_client -connect 'host:35000' -cipher "EDH" 会得到以下输出:
New, TLSv1.2, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : DHE-RSA-AES256-GCM-SHA384
Session-ID: FA0F0000C66FFFD36BE15AE79B2F48DF631EB83D0425DD534DAA278622CB30AE
Session-ID-ctx:
Master-Key: 2B10E9FD71B42328CAFAFBE18789777132565A98CE8CFD9B8E0452F6490929CB6D1B20AB57A000EDBFF40372C93EB547
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1552937526
Timeout : 7200 (sec)
Verify return code: 20 (unable to get local issuer certificate)
Extended master secret: yes
---
看起来不合适的一件事是“没有协商 ALPN”和“支持安全重新协商”。我在这里错过了什么吗?
The msdn site lists the following requirements:
TLS version 1.2 or later
Renegotiation disabled
Compression disabled
Minimum ephemeral key exchange sizes:
Elliptic curve Diffie-Hellman (ECDHE) [RFC4492] – 224 bits minimum
Finite field Diffie-Hellman (DHE) [TLS12] – 2048 bits minimum
Cipher suite not blacklisted
不知道如何检查大部分这些设置。其中一些似乎是证书的设置,而另一些似乎是特定于应用程序的。
【问题讨论】:
-
您使用哪个版本的 OpenSSL 来测试您的网站?
-
@Barry Old 会低估它(我真的只用它来创建自签名证书进行测试),但我明天会尝试使用最新版本并使用结果。
-
OpenSSL 1.0.2 之前的版本不支持 ALPN,因此不会协商它 - 即使您的服务器支持它。
-
@Barry 我正在运行
OpenSSL 1.1.0i 14 Aug 2018,所以这不是问题。 -
您是否确认您的目标版本正确?
<TargetFramework>netcoreapp2.2</TargetFramework>
标签: c# .net asp.net-core http2