ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY错误求助:Win10+VS环境问题
解决ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY错误的方案
这个错误的核心原因是HTTP2协议对TLS版本、加密套件的要求远高于HTTP1,即使证书本身有效,只要TLS配置不达标就会触发。以下是针对性的解决步骤:
1. 调整项目的Kestrel/IIS Express TLS配置
ASP.NET Core项目(Kestrel)
修改launchSettings.json,明确指定支持的TLS版本和HTTP协议:
{ "profiles": { "YourProjectName": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "applicationUrl": "https://localhost:5001;http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_Kestrel__EndpointDefaults__Protocols": "Http1AndHttp2", "ASPNETCORE_Kestrel__Https__TlsProtocols": "Tls12,Tls13" } } } }
或者直接在Program.cs中硬编码Kestrel配置:
builder.WebHost.ConfigureKestrel(options => { options.ListenAnyIP(5001, listenOptions => { listenOptions.UseHttps(); listenOptions.Protocols = HttpProtocols.Http1AndHttp2; listenOptions.UseHttps(httpsOptions => { httpsOptions.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13; }); }); });
IIS Express运行场景
找到项目根目录.vs\config\applicationhost.config文件,修改对应站点的https绑定,添加sslFlags="9"(1=TLS启用,8=HTTP2启用):
<site name="YourProjectName" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="YourProjectPath" /> </application> <bindings> <binding protocol="https" bindingInformation="*:44300:localhost" sslFlags="9" /> </bindings> </site>
2. 修正Windows系统的TLS加密配置
Win10家庭版默认可能缺少HTTP2要求的加密套件,通过注册表调整:
- 打开注册表编辑器(运行
regedit) - 定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols- 新建
TLS 1.2项,再创建Client和Server子项,每个子项添加两个DWORD值:DisabledByDefault设为0Enabled设为1
- 同理创建
TLS 1.3项(Win10 1903及以上版本支持),重复上述配置
- 新建
- 定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002- 新建字符串值
Functions,设置为符合HTTP2要求的加密套件列表:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- 新建字符串值
- 重启系统生效
3. 验证证书的算法合规性
重新创建证书后,确认证书使用的是强加密算法:
- 打开证书管理器(运行
certmgr.msc) - 找到
个人→证书中的localhost证书,右键→属性→详细信息 - 查看
公钥项,确认密钥长度≥2048位,算法为RSA或ECDSA(禁止使用DSA等弱算法)
内容的提问来源于stack exchange,提问作者Abilio
相关产品推荐
相关产品推荐

