在 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));
}
我的问题是:如何配置 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
});
});
}
我在 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));
}
我的问题是:如何配置 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
});
});
}