我正试图通过appsettings.json文件配置一个自签名证书.我将现有的IIS证书导出到pfx文件。然后我在我的appsettings.json里有了这个:
"Kestrel": {
"Endpoints": {
"Https": {
"Url": "https://MYDOMAIN:5001",
"Certificate": {
"Path": "c:\\1\\IIScert.pfx",
"Password": "12345"
}
}
}
}
它完全忽略它,而是通过http收听5000。
然后,我尝试通过program.cs文件对其进行配置,结果稍微好一点:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel(serverOptions =>
{
serverOptions.Listen(IPAddress.Any, 5001, listenOptions =>
{
listenOptions.UseHttps(@"C:\1\IIScert.pfx", "12345");
});
});
});
它在火狐上运行,但在Chrome上返回"ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY“。
为什么它忽略了我的appsettings.json,为什么它不能在Chrome上工作?我能够访问我的IIS网站使用这个证书在Chrome上没有问题。
发布于 2022-04-13 19:05:33
没有使用appsettings.json设置,因为很明显,它也需要在program.cs中加载文件,而不是像我所拥有的那样只加载startup.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
var config = new ConfigurationBuilder().AddJsonFile($"appsettings.json", optional: true).Build();
webBuilder.UseConfiguration(config);
webBuilder.UseStartup<Startup>();
});
}
至于通过代码设置证书,则需要设置。
listenOptions.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http1;
这也可以在appsettings.json中完成。
至于为什么Http2返回Chrome错误,请参阅此错误报告。https://github.com/dotnet/aspnetcore/issues/41175
https://stackoverflow.com/questions/71862016
复制相似问题