You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Kestrel使用Ubuntu自带自签名证书 无需生成PFX证书

结论

可以直接使用,不需要转换为PFX格式。.NET Core 3.0及以上版本的Kestrel已经原生支持分别加载PEM格式的证书文件和对应私钥文件,仅需做简单配置即可使用。

适用前提
  • 仅适配.NET Core 3.0 / .NET 5 及更高版本,更早版本的Kestrel仅支持PFX格式证书,需要手动合并PEM证书和私钥生成PFX后使用
  • 运行.NET应用的系统账户必须拥有两个证书文件的读取权限,尤其是/etc/ssl/private/ssl-cert-snakeoil.key默认仅root用户和ssl-cert用户组可读,需要提前配置权限避免读取失败
具体配置方法

方法1:通过appsettings.json配置(无代码侵入,推荐)

直接在项目的appsettings.json配置文件中添加Kestrel节点即可,示例配置如下:

{
  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://0.0.0.0:443",
        "Certificate": {
          "Path": "/etc/ssl/certs/ssl-cert-snakeoil.pem",
          "KeyPath": "/etc/ssl/private/ssl-cert-snakeoil.key"
          // 若私钥设置了密码,补充配置 "Password": "你的私钥密码" 即可,系统默认生成的snakeoil证书私钥无密码,可省略该配置
        }
      }
    }
  }
}

方法2:通过程序代码手动配置

如果需要在代码中动态配置,可在Program.cs中添加Kestrel的配置逻辑,.NET 6+ 顶级语句示例如下:

var builder = WebApplication.CreateBuilder(args);

// 配置Kestrel加载指定证书
builder.WebHost.ConfigureKestrel(serverOptions =>
{
    serverOptions.ListenAnyIP(443, listenOptions =>
    {
        listenOptions.UseHttps(
            certPath: "/etc/ssl/certs/ssl-cert-snakeoil.pem",
            keyPath: "/etc/ssl/private/ssl-cert-snakeoil.key");
        // 私钥有密码的话,增加第三个参数传入密码即可
    });
});

var app = builder.Build();

// 其余中间件、路由配置逻辑省略

app.Run();
注意事项
  • 权限配置:如果应用不是以root身份运行,执行命令sudo usermod -aG ssl-cert 你的应用运行用户名,将运行用户加入ssl-cert用户组,之后重启应用服务即可正常读取私钥文件
  • 系统内置的snakeoil证书为自签名证书,仅适合开发、内部测试环境使用,生产环境必须替换为受信任CA机构颁发的正规证书,否则客户端访问会触发证书不安全告警
  • 如果使用低于.NET Core 3.0的版本,可通过openssl命令手动合并生成PFX证书,命令如下:
    openssl pkcs12 -export -out certificate.pfx -inkey /etc/ssl/private/ssl-cert-snakeoil.key -in /etc/ssl/certs/ssl-cert-snakeoil.pem
    
    按提示设置导出密码后,即可按PFX证书的加载方式配置Kestrel。

内容的提问来源于stack exchange,提问作者Peter Wone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:54:01