核心思路
申请新证书 → 备份原环境 → 替换证书文件 → 平滑重载Nginx → 多维度验证
详细操作步骤 & 原理解析
第一步:获取新SSL证书
- 1.登录阿里云控制台 → 进入 SSL证书控制台 作用:统一管理证书避免遗漏到期时间
- 2.购买/续费证书
- •如有可用额度:点击「创建证书」选免费型DV SSL
- •需付费证书:选择对应类型购买 注意:免费证书有效期3个月,付费证书1年
- 3.补全证书申请信息
- 域名:输入完整域名(如 `www.yoursite.com`) - 验证方式:推荐「DNS验证」 - 原理:在DNS解析中添加TXT记录证明域名所有权 - CSR生成:选择「系统生成」
- 4.完成域名验证
- •在域名解析控制台添加指定的TXT记录
- •等待验证通过(通常5分钟内) 关键:
_dnsauth
开头的记录值必须准确复制
第二步:服务器环境准备
- 1.SSH登录服务器
ssh root@your_server_ip
- 2.定位Nginx证书目录
# 查找现有证书位置(通常在 /etc/nginx/ssl/) grep ssl_certificate /etc/nginx/sites-enabled/*.conf
输出示例:ssl_certificate /etc/nginx/ssl/fullchain.pem;
- 3.创建备份目录
mkdir /etc/nginx/ssl_backup_$(date +%F) cp -r /etc/nginx/ssl/* /etc/nginx/ssl_backup_$(date +%F)/
作用:防止操作失误导致服务不可恢复
第三步:证书文件部署
- 1.下载新证书到服务器
- •在阿里云证书控制台下载Nginx格式证书
- •解压得到两个文件:
- •
xxx.pem
(证书链文件) - •
xxx.key
(私钥文件)
- •
- 2.安全传输文件
# 使用SCP上传(本地终端执行) scp xxx.pem root@your_server_ip:/tmp/ scp xxx.key root@your_server_ip:/tmp/
- 3.移动证书到Nginx目录
mv /tmp/xxx.pem /etc/nginx/ssl/fullchain.pem mv /tmp/xxx.key /etc/nginx/ssl/private.key
- 4.设置严格权限
chmod 600 /etc/nginx/ssl/private.key # 私钥仅root可读写 chmod 644 /etc/nginx/ssl/fullchain.pem # 证书全局可读
原理:防止私钥泄露导致安全风险
第四步:Nginx服务重载
- 1.测试配置语法
nginx -t
预期输出:syntax is ok
+test is successful
- 2.平滑重启Nginx
systemctl reload nginx # 推荐!零停机重启 # 或 service nginx reload
🔥 关键区别:- •
reload
:热加载新配置,不断开现有连接 - •
restart
:强制重启导致短暂服务中断
- •
第五步:全方位验证
- 1.本地OpenSSL验证
openssl s_client -connect your_domain:443 -servername your_domain | openssl x509 -noout -dates
检查输出中的notAfter
日期是否更新 - 2.在线工具验证
- •https://www.ssllabs.com/ssltest
- •https://checktls.com/ 作用:验证证书链完整性+兼容性
- 3.浏览器强制刷新
- •Chrome访问:
chrome://net-internals/#hsts
- •清除域名的HSTS缓存
- •Chrome访问:
关键技术解析
- 1.证书链原理
graph LR A[你的证书] --> B[中间证书] B --> C[根证书]
fullchain.pem
= A + B 确保客户端可追溯信任链 - 2.热加载机制
- •Nginx master进程接收reload信号
- •启动新worker加载新配置
- •旧worker完成当前请求后退出
- 3.证书格式说明文件类型包含内容典型文件名证书文件公钥+主体信息domain.crt私钥文件加密用的密钥private.key证书链文件你的证书+中间证书fullchain.pem
遇到任何异常情况,立即执行回滚:
# 紧急回滚操作
cp /etc/nginx/ssl_backup_2023-01-01/* /etc/nginx/ssl/
systemctl reload nginx