让.NET应用支持Http/3,QUIC协议

BKT 发表于 - 2 分钟阅读 - 934 个字

1. 必备条件

1.1 .NET应用开启https

Programe.cs中配置了https支持,

var builder = WebApplication.CreateBuilder(args);

builder.WebHost.ConfigureKestrel((context, options) =>
{
    options.ListenAnyIP(5001, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
        listenOptions.UseHttps();
    });
});

或者appsettings.json中配置了https协议,建议在下面位置配置:

 "Kestrel": {
   "Endpoints": {
     "Https": {
       "Url": "https://*:7190",
       "Protocols": "Http1AndHttp2AndHttp3", //自签名证书不能用于http3,一旦满足条件,kestrel会自动添加Alt-svc标头
       "Certificate": {
         "Path": "your_cert.pfx",
         "Password": "your_cert_password"
       }
     }
   }
 }

经过测试Cloudflare的证书,可以用于开启服务端的http3,访问时可以看到Alt-Svc标头。

1.2 . 系统环境

Windows11/Windows Server 2012

直接运行

Ubuntu 24.04

添加 Microsoft 软件包库

wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update

安装 libmsquic 包

sudo apt-get install libmsquic

我安装后查看是2.4版,配和.NET 9没有问题。

在安装之前,无论怎么配https, 都看不懂Alt-Svc标头,安装后就有了。

1.3 开放端口,UDP也要开

sudo ufw allow 443

2. 测试验证

2.1 浏览器请用Chrome或者Edge最新版

自签名证书

浏览器不允许在 HTTP/3 上使用自签名证书,例如 Kestrel 开发证书,Cloudflare的10年证书

如果一定要用可以用下面方式强制开启http3/quic 方式一

chrome.exe --origin-to-force-quic-on=localhost:6001 https://localhost:6001

方式二

Chrome://flags, 启用访问http3使用自签名证书。

Chrome Enable http3 on self signed cert 使用浏览器信任机构发行的证书:

腾讯云/阿里云的免费证书可以。let’s encrypt的证书可以。所以请在appsettings.json中使用这种证书。 服务端配置了这种证书的,直接打开Chrome浏览器访问即可。 查看协议

http3,quic协议查看验证

如果没看到,不要着急,清下缓存,勾选停用缓存再看看,多试几次。

也可以换用Edge看看。

2.2 代理问题

代理通常不支持http/3,请关闭代理 IPv4可能存在多级NAT,某些路由支持的NAT类型有限制,导致UDP打不开,不易连上http3. 建议使用IPv6测试,IPv6是Peer to Peer.

对于经常使用代理的Chrome浏览器,你即使关了代理去访问支持http3/quic的网站,Chrome也不愿意切换到http3。

此时你清除缓存也不管用,完全清除所有缓存,初始化浏览器应该是可以的,但我不愿意这样做。

此时,可以采用前面方法一,给chrome加启动参数的方法,让浏览器强制开启http3,亲测有效。

chrome.exe --origin-to-force-quic-on=vtr.500599.xyz:6001 https://quic.nginx.org/

如果使用代理后,再次无法开启http/3, 此时关闭浏览器,重新打开就可以开http3了

3.3 已开启http3/quic的网站

https://quic.nginx.org/

comments powered by Disqus