配置自签名证书

Configuring a self-signed certificate

我正在尝试通过 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:\IIScert.pfx", "12345");
                        });
                    });

                });

它在 Firefox 上运行,但 returns“ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY”在 Chrome 上运行。

为什么它忽略了我的 appsettings.json,为什么它在 Chrome 上不起作用? 我可以在 Chrome 上使用此证书访问我的 IIS 网站,没有任何问题。

没有使用 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 returns 出现 Chrome 错误,请参阅此错误报告。 https://github.com/dotnet/aspnetcore/issues/41175