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

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.

3. 原文链接:

https://www.500599.xyz/posts/dotnet/enable_http3/

posted @ 2024-12-19 10:21  jopny  阅读(10)  评论(0编辑  收藏  举报