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

如何为Ubuntu上运行的C# Secure WebSockets服务生成LAN访问可用证书

问题根因

你遇到的证书不信任问题本质是默认ASP.NET Core开发证书仅在主体备用名称(SAN)中配置了localhost域名,没有包含127.0.0.1、192.168.0.10这类IP地址,浏览器校验访问地址与证书绑定地址不匹配就会触发安全警告。

证书生成步骤

以下操作全部在Ubuntu服务器上执行,系统默认预装openssl,缺失的话先执行sudo apt install openssl安装。

  1. 生成自签根CA证书(用于给服务器证书签名,后续客户端信任这个根CA即可信任所有它签发的证书)
  • 生成根CA私钥:
    openssl genrsa -out myLocalCA.key 2048
  • 生成根CA公钥证书(有效期设为3650天可自行调整):
    openssl req -x509 -new -nodes -key myLocalCA.key -sha256 -days 3650 -out myLocalCA.crt
    执行后按提示填写信息即可,Common Name可填写自定义名称比如MyHomeDevCA
  1. 生成服务器证书
  • 新建证书配置文件server.conf,写入以下内容,注意替换对应地区、组织信息,IP地址改为你服务器的实际局域网IP:
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext

[dn]
C = CN
ST = 你所在省份
L = 你所在城市
O = 你的开发组织名
OU = 开发组
CN = 192.168.0.10

[req_ext]
subjectAltName = @alt_names
extendedKeyUsage = serverAuth

[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
IP.2 = 192.168.0.10
  • 生成服务器私钥:
    openssl genrsa -out server.key 2048
  • 生成服务器证书签名请求:
    openssl req -new -key server.key -out server.csr -config server.conf
  • 用根CA签发服务器证书(有效期设为365天可自行调整):
    openssl x509 -req -in server.csr -CA myLocalCA.crt -CAkey myLocalCA.key -CAcreateserial -out server.crt -days 365 -sha256 -extensions req_ext -extfile server.conf
  • 导出为ASP.NET Core需要的PFX格式,执行后按提示设置PFX密码,记得留存后续配置要用:
    openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
  1. 校验证书是否正确
    执行命令查看证书SAN配置,确认包含你需要的所有访问地址:
    openssl x509 -in server.crt -text -noout | grep -A 1 "Subject Alternative Name"
服务端配置
  1. 把生成的server.pfx文件放到你的C#项目根目录,或者指定一个固定路径比如/etc/ssl/certs/server.pfx,设置正确权限:
    sudo chmod 644 /path/to/server.pfx
  2. 修改C#项目的Kestrel配置,在Program.cs中添加以下配置,替换为你自己的PFX路径和密码:
builder.WebHost.UseKestrel(options =>
{
    options.ListenAnyIP(5000, listenOptions =>
    {
        listenOptions.UseHttps("server.pfx", "你设置的PFX密码");
    });
});
  1. 重新编译启动后端服务即可。
客户端信任配置

所有需要访问该服务的局域网设备,都需要安装之前生成的myLocalCA.crt根证书到受信任根证书存储区:

  • Windows设备:双击crt文件,选择安装证书→本地计算机→将所有证书放入下列存储→浏览选择「受信任的根证书颁发机构」→完成安装
  • Linux设备:将crt文件复制到/usr/local/share/ca-certificates/目录,执行sudo update-ca-certificates
  • 移动设备:将crt文件传到设备后点击安装,选择信任为VPN/应用级根证书
额外安全配置建议
  • 服务器证书有效期不要超过1年,根CA证书不要超过3年,到期前及时更新
  • 私钥文件(myLocalCA.key、server.key、server.pfx)严格保管,不要提交到代码仓库、不要公开对外泄露
  • Kestrel配置中禁用不安全的TLS版本,仅启用TLS1.2和TLS1.3:
listenOptions.UseHttps(opt =>
{
    opt.SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13;
});
  • 后期如果需要新增域名/IP访问,直接在server.conf的alt_names下添加对应条目,重新签发服务器证书即可

内容的提问来源于stack exchange,提问作者Mihnea Cristian Marin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:08