以下是Nginx更新SSL证书的详细实现步骤,涵盖证书获取、配置替换、验证及回滚等关键环节,适用于Let’s Encrypt自动续期或商业证书手动更新场景:
![图片[1]_Nginx更新SSL证书的实现步骤_知途无界](https://zhituwujie.com/wp-content/uploads/2025/12/d2b5ca33bd20251211095051.png)
一、准备工作
1. 确认当前SSL证书信息
首先查看Nginx当前使用的证书路径及相关配置,避免更新时遗漏:
# 查找Nginx配置文件中的SSL证书路径(以默认配置为例)
grep -r "ssl_certificate" /etc/nginx/
# 示例输出(记录证书路径):
# /etc/nginx/sites-enabled/default: ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# /etc/nginx/sites-enabled/default: ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
2. 备份当前证书及配置
为防止更新失败,需备份现有证书和Nginx配置:
# 备份证书(假设当前证书路径为/etc/letsencrypt/live/example.com/)
cp -r /etc/letsencrypt/live/example.com/ /etc/letsencrypt/live/example.com_backup_$(date +%F)
# 备份Nginx配置(假设主配置文件为/etc/nginx/nginx.conf)
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf_backup_$(date +%F)
cp -r /etc/nginx/sites-enabled/ /etc/nginx/sites-enabled_backup_$(date +%F)
二、获取新SSL证书
根据证书类型(Let’s Encrypt免费证书或商业证书),选择以下方式获取新证书:
场景1:Let’s Encrypt证书(推荐自动续期)
Let’s Encrypt证书有效期为90天,通常通过certbot工具自动续期。若需手动更新(如域名变更或首次部署),步骤如下:
1. 安装Certbot(若未安装)
# Ubuntu/Debian
sudo apt update && sudo apt install certbot python3-certbot-nginx -y
# CentOS/RHEL
sudo yum install certbot python3-certbot-nginx -y
2. 申请/续期证书
使用Certbot自动识别Nginx配置并生成证书(支持单域名或多域名):
# 自动续期(若证书未过期,Certbot会提示;若已过期需强制续期)
sudo certbot renew --dry-run # 模拟续期,检查是否有错误(可选)
# 实际续期(针对特定域名)
sudo certbot renew --cert-name example.com # 仅续期example.com的证书
# 若为首次申请(如新增域名)
sudo certbot --nginx -d example.com -d www.example.com # 自动配置Nginx并生成证书
说明:Certbot会自动将新证书保存至/etc/letsencrypt/live/example.com/,并更新Nginx配置中的证书路径(若使用--nginx参数)。
场景2:商业SSL证书(手动上传)
若使用商业CA(如DigiCert、GlobalSign)签发的证书,需手动下载并上传至服务器:
1. 下载证书文件
通常商业CA会提供以下文件(格式可能为.crt、.pem或.cer):
- 证书文件(如
example.com.crt):包含服务器公钥及CA链(可能需合并中间证书); - 私钥文件(如
example.com.key):需确保与证书匹配且权限为600(仅属主可读); - 中间证书(如
intermediate.crt):部分CA需单独提供,需与主证书合并。
2. 合并证书(若需要)
若主证书不包含中间证书,需将主证书与中间证书合并为fullchain.pem(顺序:主证书在前,中间证书在后):
cat example.com.crt intermediate.crt > fullchain.pem
3. 上传证书至服务器
将合并后的fullchain.pem和私钥example.com.key上传至服务器(建议路径:/etc/ssl/certs/或/etc/nginx/ssl/):
scp fullchain.pem user@server_ip:/etc/nginx/ssl/
scp example.com.key user@server_ip:/etc/nginx/ssl/
chmod 600 /etc/nginx/ssl/example.com.key # 限制私钥权限
chmod 644 /etc/nginx/ssl/fullchain.pem # 证书文件权限可放宽
三、更新Nginx配置
无论证书来源如何,需确保Nginx配置中指向新证书的路径正确。
1. 编辑Nginx配置文件
打开之前记录的配置文件(如/etc/nginx/sites-enabled/default),修改ssl_certificate和ssl_certificate_key指令:
server {
listen 443 ssl;
server_name example.com www.example.com;
# 新证书路径(Let's Encrypt自动续期无需修改,商业证书需替换为新路径)
ssl_certificate /etc/nginx/ssl/fullchain.pem; # 或 /etc/letsencrypt/live/example.com/fullchain.pem
ssl_certificate_key /etc/nginx/ssl/example.com.key; # 或 /etc/letsencrypt/live/example.com/privkey.pem
# 其他SSL配置(如协议、加密套件等)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# ...
}
2. 测试Nginx配置语法
修改配置后,必须验证语法是否正确,避免重启Nginx时失败:
sudo nginx -t
若输出nginx: configuration file /etc/nginx/nginx.conf test is successful,则配置无误。
四、重载Nginx使新证书生效
配置验证通过后,重载Nginx以应用新证书(无需中断服务):
sudo systemctl reload nginx # 或 sudo service nginx reload
注意:若使用restart命令(systemctl restart nginx),会导致短暂的服务中断,生产环境优先使用reload。
五、验证新证书是否生效
通过以下方式确认新证书已正确加载:
1. 浏览器验证
访问https://example.com,点击地址栏锁图标,查看证书详情(签发日期应为新证书的起始日期)。
2. 命令行验证(OpenSSL)
使用openssl工具直接查询证书信息:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
输出示例(关注notBefore字段):
notBefore=Dec 1 00:00:00 2024 GMT # 新证书签发时间
notAfter=Mar 1 23:59:59 2025 GMT # 新证书过期时间
3. 在线工具验证
使用SSL Labs输入域名,检查证书状态及评分(确保无“证书过期”警告)。
六、回滚方案(若更新失败)
若新证书导致问题(如配置错误、证书不匹配),需快速回滚:
- 恢复Nginx配置:
cp /etc/nginx/nginx.conf_backup_2024-XX-XX /etc/nginx/nginx.conf cp -r /etc/nginx/sites-enabled_backup_2024-XX-XX/* /etc/nginx/sites-enabled/ - 恢复旧证书(若手动替换过):
rm -rf /etc/letsencrypt/live/example.com/ mv /etc/letsencrypt/live/example.com_backup_2024-XX-XX /etc/letsencrypt/live/example.com - 重载Nginx:
sudo systemctl reload nginx
七、后续维护(针对Let’s Encrypt)
为避免证书过期导致服务中断,需确保自动续期任务正常运行:
- 检查Certbot定时任务(通常由
certbot自动添加至crontab):crontab -l | grep certbot示例输出(每天凌晨检查续期):0 0 * * * /usr/bin/certbot renew --quiet && systemctl reload nginx - 手动触发续期测试(可选):
sudo certbot renew --force-renewal # 强制续期(仅测试用,避免浪费配额)
总结
Nginx更新SSL证书的核心流程为:备份→获取新证书→更新配置→验证→重载。关键注意事项包括:
- 严格备份证书和配置,防止数据丢失;
- 商业证书需确保私钥权限为
600,避免安全风险; - Let’s Encrypt优先使用自动续期,减少人工操作;
- 生产环境通过
reload而非restart避免服务中断。
通过以上步骤,可安全、高效地完成SSL证书更新,保障HTTPS服务的连续性。
























暂无评论内容