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

如何用OpenSSL生成Chrome信任、适配Nginx站点的自签名证书

问题排查及解决方法

核心问题共3处:

  1. 混用根CA证书和站点证书:你当前生成的证书同时配置了CA:TRUE(CA属性)和服务端认证属性,且直接将该证书同时作为信任根和站点证书使用,Chrome高版本禁止终端实体证书具备CA属性,也不允许CA证书直接作为站点证书使用。
  2. 根CA的keyUsage配置错误:作为信任根的CA证书必须包含keyCertSign和cRLSign用途,你当前配置的keyUsage是站点证书所需的用途,不符合CA证书的规范,Chrome因此不认可该证书为合法根证书。
  3. 证书有效期超过Chrome限制:Chrome要求TLS证书的最大有效期不能超过398天,你设置的10500天远超出限制,也会触发无效报错。

正确操作步骤

1. 生成独立的根CA证书

首先创建根CA配置文件ca.cnf:

[req]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
x509_extensions = x509_ca
prompt = no

[req_distinguished_name]
C = PT
ST = MD
L = Funchal
O = luisabreu
CN = Luis Test Local CA

[x509_ca]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:TRUE, pathlen:0
keyUsage = critical, keyCertSign, cRLSign

执行命令生成根CA的密钥和证书:

openssl req -config ca.cnf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout ca.key -out ca.crt -days 3650

将生成的ca.crt导入Chrome的「受信任的根证书颁发机构」存储中,也可同步导入系统CA存储。

2. 生成并签发站点证书

创建站点证书配置文件server.cnf:

[req]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no

[req_distinguished_name]
C = PT
ST = MD
L = Funchal
O = luisabreu
CN = testing.pt

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
DNS.2 = testing.pt
IP.1 = 10.50.150.130

[x509_server]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = critical, CA:FALSE
keyUsage = critical, keyEncipherment, digitalSignature
extendedKeyUsage = critical, serverAuth, clientAuth
subjectAltName = @alt_names

首先生成站点证书的签发请求:

openssl req -config server.cnf -new -newkey rsa:2048 -nodes -keyout ssl.key -out server.csr

用根CA签发站点证书,有效期设为365天(符合Chrome限制):

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out ssl.crt -days 365 -sha256 -extfile server.cnf -extensions x509_server

3. 更新Nginx配置

将签发好的ssl.crt和ssl.key放到对应的Nginx配置路径:

sudo cp ssl.crt /etc/ssl/certs/
sudo cp ssl.key /etc/ssl/private/

重载Nginx配置即可:

sudo nginx -s reload

内容的提问来源于stack exchange,提问作者Luis Abreu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:06:02