在 ASP.NET 6.0 应用程序中使用 .pem 文件而不是 .pfx 配置 ListenOptions.UseHttps

Configure ListenOptions.UseHttps with .pem file rather than .pfx in ASP.NET 6.0 app

我在 ubuntu 20.04 上有一个 ASP.NET 网络应用程序,我使用的是 .pfx 格式的 SSL 证书,效果很好。但是,我想了解如何对 .pem 文件执行相同的操作。

我知道它可以在 appsettings.json 中像这样通过 HttpsFromPem 键完成:

{
  "Kestrel": {
    "Endpoints": {
      "HttpsInlineCertAndKeyFile": {
        "Url": "https://localhost:5001",
        "Certificate": {
          "Path": "<path to .pem/.crt file>",
          "KeyPath": "<path to .key file>",
          "Password": "$CREDENTIAL_PLACEHOLDER$"
        }
      }
    }
  }
}

而且我知道如何像这样使用 .pfx 格式:

var httpsCert = Environment.GetEnvironmentVariable("HTTPS_CERT");
var httpsCertKey = Environment.GetEnvironmentVariable("HTTPS_CERT_KEY");

if (httpsCert != null && httpsCertKey != null)
{
    options.Listen(IPAddress.Loopback, 5001,
               listenOptions => listenOptions.UseHttps(httpsCert, httpsCertKey));
}

来源 - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/endpoints?view=aspnetcore-6.0

我的问题是:如何配置 Kestrel 以在代码中从 .pem 文件中读取证书?

你可以在using中加载它

var pemPath = //read in from configuration
var privateKeyPath = //read in from configuration
var certificate = X509Certificate2.CreateFromPemFromFile(pemPath, privateKeyPath);

然后你可以在配置 Kestrel 的时候用这样的东西配置 Kestrel。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.ConfigureKestrel(options =>
        {
            options.ConfigureHttpsDefaults(adapterOptions =>
            {
                adapterOptions.ServerCertificate = certificate
            });
        });
    }