目录
以下是Nginx SSL 证书更换与 HTTPS 服务更新详细步骤,适用于手动替换证书或结合 Let's Encrypt 自动续签的情况:
1. 准备工作
1.1 获取新证书
-
从证书颁发机构(CA)获取新证书文件(如
.crt
或.pem
文件)和私钥文件(.key
文件)。 -
确保证书与域名匹配,并包含完整的证书链(如
fullchain.crt
和private.key
)。
1.2 备份旧证书
-
备份证书和私钥:
sudo cp /etc/nginx/ssl/example.com.crt /etc/nginx/ssl/example.com.crt.bak sudo cp /etc/nginx/ssl/example.com.key /etc/nginx/ssl/example.com.key.bak
-
备份 Nginx 配置文件(如
/etc/nginx/nginx.conf
或站点配置文件):sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
2. 替换证书
2.1 上传新证书
-
将新证书和私钥上传到服务器的安全目录(如
/etc/nginx/ssl/
)。 -
示例:
sudo scp new_cert.crt new_private.key user@your_server:/etc/nginx/ssl/
2.2 修改 Nginx 配置
-
编辑 Nginx 配置文件(如
/etc/nginx/sites-available/default
或/etc/nginx/conf.d/your_site.conf
)。 -
更新证书路径(确保
ssl_certificate
和ssl_certificate_key
指向新证书):nginxserver { listen 443 ssl; server_name your_domain.com; ssl_certificate /etc/nginx/ssl/new_cert.crt; # 新证书路径 ssl_certificate_key /etc/nginx/ssl/new_private.key; # 新私钥路径 # 其他 SSL 配置(可保留原样) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; }
2.3 检查配置文件语法
-
测试 Nginx 配置是否正确:
sudo nginx -t
如果提示
syntax is ok
且test is successful
,则配置无误。
3. 重启 Nginx 服务
-
平滑重启 Nginx(避免服务中断):
sudo systemctl reload nginx
-
如果失败,尝试完全重启:
sudo systemctl restart nginx
4. 验证新证书
4.1 浏览器验证
-
访问
https://your_domain.com
,检查浏览器地址栏是否显示安全锁标志,且无证书错误。
4.2 命令行验证
-
使用
openssl
检查证书有效期:openssl x509 -in /etc/nginx/ssl/new_cert.crt -text -noout | grep "Not After"
-
使用在线工具(如 SSL Labs)测试证书配置。
5. 自动续签(推荐,适用于 Let's Encrypt)
如果使用 Certbot(Let's Encrypt)管理证书:
5.1 获取并配置证书
sudo certbot --nginx
按提示选择域名并启用自动重定向(HTTP 到 HTTPS)。
5.2 测试自动续签
sudo certbot renew --dry-run
确保续签脚本无错误。
5.3 设置定时任务
-
编辑定时任务:
sudo crontab -e
-
添加以下任务(每月 1 日凌晨 1 点续签):
0 1 1 * * certbot renew --quiet
6. 注意事项
(1)权限设置:
-
确保证书和私钥文件权限正确:
sudo chmod 600 /etc/nginx/ssl/*.key sudo chmod 644 /etc/nginx/ssl/*.crt sudo chown root:root /etc/nginx/ssl/*.key
(2)证书链完整性:
-
如果证书文件缺少中间证书,需将 CA 提供的中间证书合并到主证书文件中:
cat new_cert.crt intermediate.crt > fullchain.crt
(3)回滚准备:
-
若新证书导致问题,立即恢复备份的旧证书和配置,并重启 Nginx:
sudo cp /etc/nginx/ssl/example.com.crt.bak /etc/nginx/ssl/example.com.crt sudo cp /etc/nginx/ssl/example.com.key.bak /etc/nginx/ssl/example.com.key sudo systemctl reload nginx
7. 常见问题排查
-
证书未生效:检查 Nginx 配置中证书路径是否正确,或尝试强制刷新浏览器缓存。
-
权限错误:确保私钥文件权限为
600
,且 Nginx 进程有权限读取证书文件。 -
配置冲突:运行
nginx -t
检查语法,或查看日志文件/var/log/nginx/error.log
。
通过以上步骤,可以完成 Nginx 的 SSL 证书更换。
扩展阅读:
Nginx 配置新 SSL 证书并启用 HTTPS 的详细步骤 | Nginx 配置新 SSL 证书并启用 HTTPS 的详细步骤 |
Nginx SSL 证书更换与 HTTPS 服务更新指南 | Nginx SSL 证书更换与 HTTPS 服务更新指南 |