从 appsettings.json 加载 SSL 证书

Load an SSL certificate from appsettings.json

我构建了一个 .NET core 2.2 应用程序,我正在将其加载到 raspberry pi。我正在使用 Kestrel 托管 Web 服务。在pi上,我创建了一个自分配的certificate.pfx。如果我将带有证书名称和密码的 .UseHttps 硬编码到应用程序中,浏览器可以找到它。

但是,如果我从代码中注释掉它并改用 appsettings.json 文件(我希望它在 appsettings.json 中,这样客户就可以上传他们自己的证书),重定向到Https 可以工作,但证书未加载且页面无法连接。

这是我用来配置 appsettings.json 文件的文档: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2

证书位于应用程序文件夹中。

目前我已将此代码从应用程序中注释掉,但是当代码未被注释时它确实有效。我希望通过 appsettings.json 文件设置这些相同的设置。

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureKestrel((context, options) =>
                {                   
                    /*options.Listen(IPAddress.Any, 80);*/         // http:*:80                 
                    //options.Listen(IPAddress.Any, 5001, listenOptions =>
                    //{
                    //  listenOptions.UseHttps("certificate.pfx", "password");
                    //});
                });

这里是 appsettings.json 文件:

{
  "https_port": 5001,
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "AllowInvalid": true,
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://*:80"
      }
    },
    "Https": {
      "Url": "https://*:5001",
      "Certificate": {
        "Path": "certificate.pfx",
        "Password": "password"
      }
    }
  }
}

这篇文章最终得到了我需要的解决方案:

https://www.humankode.com/asp-net-core/develop-locally-with-https-self-signed-certificates-and-asp-net-core

更准确地说是文章标题为 "Configuring HTTPS in ASP.NET Core 2.0"

的部分

我创建了一个名为 certificate.json 的新 json 文件,而不是使用 appsettings.json。

然后我将 certificate.json 中的证书名称和密码提取到 program.cs 代码中。