文档中心
NginxSSL璇佷功鏇挎崲鍏ㄦ敾鐣ユ墜鎶婃墜鏁欎綘闆堕闄╂洿鏂癏TTPS璇佷功
时间 : 2025-09-27 16:26:14浏览量 : 3

作为网站管理员,你是否遇到过SSL证书即将过期的手忙脚乱?去年某知名电商就因证书过期导致全网服务中断2小时,直接损失超千万。本文将用运维老司机的实战经验,带你掌握Nginx证书替换的完整流程,涵盖从准备工作到验证的全套解决方案。
一、为什么要定期更换SSL证书?
SSL证书就像网站的"身份证",有效期通常为1年(免费证书)或2年(付费证书)。到期不更换会导致浏览器弹出红色警告,用户看到这样的提示往往会直接关闭页面:
```
您的连接不是私密连接
攻击者可能会试图从xxx.com窃取您的信息
更严重的是:
1. Chrome/Firefox会强制拦截页面
2. 微信内置浏览器直接白屏
3. API接口全部报错
真实案例:2025年3月,某银行测试环境证书过期未及时更换,导致移动端APP所有交易功能瘫痪8小时。
二、准备工作:获取新证书的3种方式
方式1:免费申请Let's Encrypt(适合个人站点)
```bash
sudo certbot certonly --webroot -w /var/www/html -d example.com
自动续期配置:
0 0 1 * * /usr/bin/certbot renew --quiet
方式2:商业CA购买(企业推荐)
推荐DigiCert/Sectigo的OV/EV证书,提供更好的信任标识:
| 功能 | DV证书 | OV/EV证书 |
||-|-|
| 绿色地址栏 | ? | ? |
| 公司名称显示| ? | ? |
| 赔付保障 | $10,000 | $1,750,000 |
方式3:内部PKI签发(金融/政务专用)
使用OpenSSL自签名:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/server.key \
-out /etc/nginx/ssl/server.crt
三、Nginx证书替换四步法
Step1?? 备份关键配置
cp /etc/nginx/sites-available/default ~/nginx_backup_$(date +%F).conf
tar czvf /backup/nginx_ssl_$(date +%s).tar.gz /etc/nginx/ssl/
血泪教训:某运维误操作覆盖了key文件,因为没有备份最终不得不重新申请证书。
Step2?? 上传新证书文件
推荐目录结构:
/etc/nginx/ssl/
├── live/
│ ├── example.com.crt
PEM格式证书链
│ └── example.com.key
私钥文件
└── archive/
├── example.com_20250501.crt
└── example.com_20250501.key
Step3?? 修改Nginx配置
典型SSL配置模板:
```nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/live/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/live/example.com.key;
TLS优化参数
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
}
Step4?? 平滑重启Nginx
sudo nginx -t
测试配置语法
sudo systemctl reload nginx
Hot reload不中断连接
查看进程是否加载新配置
ps aux | grep nginx | grep worker
四、验证是否成功的5种方法
1. 浏览器检查:访问`https://example.com`点击锁图标→"连接是安全的"→"查看证书"
2. OpenSSL命令行:
echo | openssl s_client -connect example.com:443 -servername example.com \
| openssl x509 -noout -dates
3. 在线检测工具:
- SSL Labs测试(https://www.ssllabs.com/ssltest)
- Why No Padlock(检查混合内容问题)
4. 日志监控:
tail -f /var/log/nginx/error.log | grep SSL
5. 自动化监控(Zabbix/Prometheus示例):
```yaml
- name: SSL Certificate Expiry Check
hosts: webservers
tasks:
- shell: |
echo | openssl s_client -connect {{ inventory_hostname }}:443 \
2>/dev/null | openssl x509 -noout -enddate
register: cert_date
- debug:
msg: "Certificate expires on {{ cert_date.stdout.split('=')[1] }}"
五、高级场景处理技巧
? HSTS预加载注意事项
如果启用了`Strict-Transport-Security`头:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
需要确保新旧证书无缝衔接,否则会导致客户端强制拒绝连接。
? OCSP装订优化方案
在Nginx中添加OCSP Stapling提升性能:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
resolver_timeout
TAG:nginx ssl证书替换,nginx 更换证书用重启吗,nginx ssl证书申请,nginx替换ssl证书不生效,nginx ssl_ciphers