SSL自签证书管理
# 背景说明
在开发、测试、内网或私有云环境中,我们经常需要为自定义域名配置 HTTPS,但自签名证书默认不被信任,导致浏览器警告、API 调用失败、自动化脚本中断等问题。 本文介绍如何创建自签名 CA 证书,并将其设为系统受信任根证书,从而实现所有由该 CA 签发的证书自动被信任。
# 环境信息
- 操作系统:Ubuntu 24.04.2 LTS
- 工具:OpenSSL
# 实施步骤
# 1. 创建根 CA 证书(有效期 10 年)
openssl req -newkey rsa:2048 -nodes -x509 -days 3650 \
-subj "/C=CN/ST=Jiangsu/L=Wuxi/O=MyOrg/CN=My Internal CA" \
-keyout ca.key -out ca.crt
1
2
3
2
3
# 2. 生成服务器私钥
openssl genrsa -out jiang.key 4096
1
# 3. 生成证书签名请求(CSR)
CN 建议设为主域名或泛域名,但实际以 SAN 为准
openssl req -new -sha256 \
-subj "/C=CN/ST=Jiangsu/L=Wuxi/O=MyOrg/CN=*.jiang.top" \
-key jiang.key -out jiang.csr
1
2
3
2
3
# 4. 创建 SAN 扩展配置文件
这是支持多域名和泛域名的关键配置
cat > extfile.cnf <<EOF
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = jiang.top
DNS.2 = *.jiang.top
DNS.3 = *.dev.jiang.top
EOF
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 5. 通过 CA 签发服务器证书
openssl x509 -req -days 3650 -sha256 \
-in jiang.csr \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-out jiang.crt \
-extfile extfile.cnf -extensions req_ext
1
2
3
4
5
2
3
4
5
生成的文件列表:
-rw-r--r-- ca.crt # CA 根证书
-rw------- ca.key # CA 私钥
-rw-r--r-- ca.srl # CA 序列号文件
-rw-r--r-- extfile.cnf # SAN 配置文件
-rw-r--r-- jiang.crt # 服务器证书
-rw-r--r-- jiang.csr # 证书签名请求
-rw------- jiang.key # 服务器私钥
1
2
3
4
5
6
7
2
3
4
5
6
7
# 信任配置
# 将 CA 证书安装为系统受信任根证书
cp ca.crt /usr/local/share/ca-certificates/jiang.top.crt
update-ca-certificates
1
2
2
# Nginx 配置示例
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name jiang.top *.jiang.top;
ssl_certificate /root/jiang.crt;
ssl_certificate_key /root/jiang.key;
root /var/www/html;
index index.nginx-debian.html;
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 验证结果
使用 curl 验证证书是否被正确信任:
curl -v https://jiang.top
1
关键输出(验证成功):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / X25519 / RSASSA-PSS
* Server certificate:
* subject: C=CN; ST=Jiangsu; L=Wuxi; O=MyOrg; CN=*.jiang.top
* start date: Feb 10 05:14:02 2026 GMT
* expire date: Feb 8 05:14:02 2036 GMT
* subjectAltName: host "jiang.top" matched cert's "jiang.top"
* issuer: C=CN; ST=Jiangsu; L=Wuxi; O=MyOrg; CN=My Internal CA
* SSL certificate verify ok.
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 总结
将自建 CA 证书导入系统受信任的根证书存储后,所有由该 CA 签发的证书(包括未来新增的)将自动被系统及应用程序信任,无需逐个导入。
上次更新: 2026/05/31, 03:30:34