Nginx SSL证书更新指南
一、更新前准备
- 明确证书来源与文件:确认是 Let’s Encrypt 还是 手动/企业CA,准备好新的证书文件(常见为 .crt/.pem 与 .key,若使用中间证书可能还有 .ca-bundle 或 chain.pem)。
- 备份现有证书与密钥(强烈建议):例如
sudo cp /etc/nginx/ssl/your_domain.crt /etc/nginx/ssl/your_domain.crt.bak
sudo cp /etc/nginx/ssl/your_domain.key /etc/nginx/ssl/your_domain.key.bak
- 确认 Nginx 配置中证书路径:在 server 配置块中查看 ssl_certificate 与 ssl_certificate_key 的实际路径,避免替换错文件。
- 权限与目录:私钥权限应严格,建议 600;证书目录如 /etc/nginx/ssl 或 /etc/pki/tls 需确保 Nginx 可读。
二、手动更新步骤(通用)
- 放置新证书到目标目录(示例:/etc/nginx/ssl)
sudo mkdir -p /etc/nginx/ssl
sudo cp /tmp/your_new_cert.crt /etc/nginx/ssl/your_domain.crt
sudo cp /tmp/your_new_key.key /etc/nginx/ssl/your_domain.key
如包含中间证书,一并复制:
sudo cp /tmp/chain.pem /etc/nginx/ssl/chain.pem
- 更新 Nginx 配置中的证书路径(仅当路径有变化时需要)
- ssl_certificate:指向你的域名证书(若使用完整链,可指向包含链的文件)
- ssl_certificate_key:指向你的私钥
- 如需单独指定信任链:
ssl_certificate /etc/nginx/ssl/your_domain.crt;
ssl_certificate_key /etc/nginx/ssl/your_domain.key;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
- 校验配置并热重载
sudo nginx -t
sudo systemctl reload nginx
- 验证结果
- 浏览器访问 https://your_domain 查看证书有效期与颁发者
- 命令行核验:
openssl s_client -connect your_domain:443 -servername your_domain
检查输出中的 Certificate chain 是否为新证书与中间证书
三、Let’s Encrypt 自动更新(Certbot)
- CentOS 安装与更新
sudo yum install epel-release
sudo yum install certbot python2-certbot-nginx
sudo certbot --nginx -d your_domain
- Debian/Ubuntu 安装与更新
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain
- 说明
- Certbot 会自动修改 Nginx 配置、部署新证书并(默认)自动续期。
- Let’s Encrypt 证书有效期通常为 90 天,建议保持自动续期开启,并定期(如每 60–80 天)检查续期是否成功。
四、常见问题与排查
- 权限错误:私钥应为 600,属主为 root,否则 Nginx 启动失败。
- 配置路径不一致:确认 ssl_certificate 与 ssl_certificate_key 指向新文件;若使用链证书,确认 ssl_trusted_certificate 或合并链文件配置正确。
- 配置语法错误:每次修改后先执行 sudo nginx -t,通过后再 reload。
- 端口与连通性:确保 443 端口开放,云安全组/防火墙放行;验证时使用 openssl s_client 或在线工具(如 SSL Labs)核对证书链与有效期。