一、生成自签 SSL 证书(推荐:SAN 方式)
域名:
agw-qa.cmiriweb3.com
sp-qa.cmiriweb3.com
现代浏览器 必须使用 Subject Alternative Name(SAN),否则会提示证书无效。
1️⃣ 创建 OpenSSL 配置文件
cat > san.cnf << 'EOF'
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext
[ dn ]
C = CN
ST = QA
L = QA
O = CMIRI
OU = Web
CN = agw-qa.cmiriweb3.com
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = agw-qa.cmiriweb3.com
DNS.2 = sp-qa.cmiriweb3.com
EOF
2️⃣ 生成私钥
openssl genrsa -out cmiriweb3.key 2048
3️⃣ 生成证书(有效期 10 年)
openssl req -new -x509 \
-key cmiriweb3.key \
-out cmiriweb3.crt \
-days 3650 \
-config san.cnf \
-extensions req_ext
4️⃣ 验证证书 SAN 是否正确
openssl x509 -in cmiriweb3.crt -noout -text | grep -A 2 "Subject Alternative Name"
应看到:
DNS:agw-qa.cmiriweb3.com, DNS:sp-qa.cmiriweb3.com
二、部署证书到 Nginx
1️⃣ 放置证书文件
mkdir -p /etc/nginx/ssl
cp cmiriweb3.crt cmiriweb3.key /etc/nginx/ssl/
chmod 600 /etc/nginx/ssl/cmiriweb3.key
2️⃣ Nginx HTTPS 配置示例(支持两个域名)
server {
listen 443 ssl;
server_name agw-qa.cmiriweb3.com sp-qa.cmiriweb3.com;
ssl_certificate /etc/nginx/ssl/cmiriweb3.crt;
ssl_certificate_key /etc/nginx/ssl/cmiriweb3.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
如果两个域名要转发到 不同后端,我可以帮你拆成两个 server 块。
3️⃣ HTTP 强制跳转 HTTPS(推荐)
server {
listen 80;
server_name agw-qa.cmiriweb3.com sp-qa.cmiriweb3.com;
return 301 https://$host$request_uri;
}
4️⃣ 检查并重载 Nginx
nginx -t
nginx -s reload
三、访问与验证
curl -k https://agw-qa.cmiriweb3.com
curl -k https://sp-qa.cmiriweb3.com
浏览器会提示不受信任(正常,自签证书)。
四、(可选)让浏览器不报错的方法
✅ 内部环境推荐
将 cmiriweb3.crt 导入:
Windows:受信任的根证书颁发机构
Linux:/etc/pki/ca-trust/source/anchors/
Chrome:设置 → 安全 → 管理证书







网友评论