文档中心
LNMP鐜涓婼SL璇佷功鍒锋柊鍏ㄦ敾鐣ユ墜鎶婃墜鏁欎綘5鍒嗛挓鎼炲畾
时间 : 2025-09-27 16:23:09浏览量 : 2

关键词:LNMP刷新SSL证书
一、为什么需要定期刷新SSL证书?
想象一下SSL证书就像你家大门的电子锁密码,默认有效期通常只有90天(如Let's Encrypt)。如果不及时更新:
1. 浏览器会弹出红色警告(就像邻居看到你家大门密码锁闪着红灯)
2. 用户数据可能被窃听(相当于用明信片寄银行卡密码)
3. SEO排名直接下跌(谷歌明确将HTTPS作为排名因素)
> 真实案例:2025年某电商平台因证书过期导致支付页面瘫痪2小时,直接损失超300万元。
二、LNMP环境刷新SSL的3种姿势
方法1:Certbot自动化续签(推荐新手)
```bash
进入Certbot目录
cd /usr/local/bin/
执行续签命令(--nginx参数自动修改Nginx配置)
sudo ./certbot renew --nginx --quiet
测试是否生效(模拟续签)
sudo ./certbot renew --dry-run
```
原理图解:
Certbot → 向CA机构发起请求 → 验证域名所有权 → 下载新证书 → 自动重启Nginx
方法2:手动替换证书文件(适合自定义证书)
备份旧证书(重要!)
cp /usr/local/nginx/conf/ssl/example.com.crt /root/ssl_backup/
上传新证书到服务器
scp new_cert.crt root@yourserver:/usr/local/nginx/conf/ssl/
重新加载Nginx
/usr/local/nginx/sbin/nginx -s reload
?? 常见踩坑点:
- 证书链不完整 → 用`openssl x509 -in certificate.crt -text`检查
- 私钥不匹配 → `openssl rsa -noout -modulus -in private.key | openssl md5`比对指纹
方法3:acme.sh脚本方案(适合多域名管理)
安装acme.sh
curl https://get.acme.sh | sh
DNS API方式申请(无需暂停网站)
export DP_Id="1234"
export DP_Key="sADVdasdfsd"
acme.sh --issue --dns dns_dp -d example.com -d *.example.com
强制安装到Nginx
acme.sh --install-cert -d example.com \
--key-file /usr/local/nginx/conf/ssl/key.pem \
--fullchain-file /usr/local/nginx/conf/ssl/cert.pem \
--reloadcmd "service nginx force-reload"
三、高手都在用的进阶技巧
?? Failover双证书配置
在Nginx配置中添加备用证书路径,即使主证书更新失败也不影响业务:
```nginx
server {
listen 443 ssl;
ssl_certificate /path/to/main_cert.pem;
ssl_certificate_key /path/to/main_key.key;
备用证书路径
ssl_certificate /path/to/failover_cert.pem;
ssl_certificate_key /path/to/failover_key.key;
}
?? OCSP Stapling优化
减少客户端验证时间,在nginx.conf中添加:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
?? Docker环境特殊处理
如果LNMP跑在Docker中,需要挂载证书目录并设置定时任务:
```dockerfile
VOLUME ["/etc/letsencrypt"]
CMD ["sh", "-c", "certbot renew && nginx -s reload"]
四、必须检查的5个安全项
1. 权限设置:确保证书文件权限为640
```bash
chmod 640 /usr/local/nginx/conf/ssl/*.key
```
2. 日志监控:在Zabbix/Grafana添加证书过期告警
```sql
SELECT * FROM certificates WHERE expiry_date < NOW() + INTERVAL '30 days'
3. 协议禁用:关闭不安全的TLSv1.0/TLSv1.1
```nginx
ssl_protocols TLSv1.2 TLSv1.3;
4. HSTS头配置:强制HTTPS访问
add_header Strict-Transport-Security "max-age=63072000" always;
5. CRL定期更新:设置每周更新的cron任务
```cron
0 3 * * MON /usr/bin/crlutil -update -url http://crl.example.com/
FAQ高频问题解答
Q:为什么执行renew后网站还是显示旧证书?
A:90%的情况是Nginx未正确重启,用`ps aux | grep nginx`确认worker进程的启动时间。
Q: Let's Encrypt提示"Too many requests"怎么办?
A: CA机构限制每周5次申请,临时解决方案是用`--staging`参数测试或换ZeroSSL等替代CA。
Q: ECC和RSA证书该选哪个?
A: ECC密钥更短(256bit vs RSA2048)、性能更快,但老安卓4.x可能不兼容。企业建议双证部署。
TAG:lnmp刷新ssl证书,lnmp ssl,lnmp升级