文档中心
Nginx閰嶇疆SSL璇佷功杩囨湡鎬庝箞鍔烇紵5涓疄鐢ㄨВ鍐虫柟妗堣瑙?txt
时间 : 2025-09-27 16:27:50浏览量 : 2

作为一名网络安全从业者,我经常遇到客户因为SSL证书过期导致网站无法访问的紧急情况。今天我就用最通俗易懂的方式,结合真实案例,为大家详细讲解Nginx服务器上SSL证书过期的完整处理流程。
一、为什么SSL证书会过期?
首先我们需要明白,所有正规CA机构颁发的SSL证书都有有效期(通常1年),这是安全行业的标准做法。就像食品有保质期一样,证书过期主要有三个原因:
1. 安全考虑:定期更换密钥可以降低私钥泄露风险
2. 身份验证更新:企业信息可能发生变化
3. 技术演进:淘汰旧加密算法(比如曾经普遍使用的SHA-1)
去年我们公司就遇到一个典型案例:某电商平台凌晨突然无法访问,检查发现是SSL证书过期。短短2小时损失了数十万订单,这就是没有做好证书监控的惨痛教训。
二、如何检查Nginx的SSL证书是否过期?
方法1:命令行检查(最准确)
```bash
echo | openssl s_client -connect 你的域名:443 2>/dev/null | openssl x509 -noout -dates
```
执行后会显示两个关键时间:
- notBefore:生效时间
- notAfter:过期时间
方法2:在线工具检测
推荐几个免费工具:
- SSL Labs(https://www.ssllabs.com/ssltest/)
- 站长之家SSL检测(https://tool.chinaz.com/ssl/)
方法3:浏览器直接查看
Chrome浏览器点击地址栏的小锁图标 → "连接是安全的" → "证书有效",就能看到详细的有效期信息。
三、Nginx配置已过期证书的5种解决方案
方案1:紧急续期并更换新证书(推荐)
以Let's Encrypt为例:
如果是certbot申请的证书
sudo certbot renew --force-renewal
重启nginx生效
sudo systemctl reload nginx
真实案例:某***网站在周末突然无法访问,我们通过SSH远程登录后强制续期,整个过程只用了3分钟就恢复服务。
方案2:临时启用备用旧证书
如果新证书还没准备好,可以临时启用之前的旧证书:
```nginx
server {
listen 443 ssl;
ssl_certificate /path/to/old_cert.pem;
ssl_certificate_key /path/to/old_key.key;
...其他配置
}
??注意:这种方法只能作为应急方案,旧证书可能使用了不安全的加密算法。
方案3:设置自动续期脚本
预防胜于治疗!创建自动续期脚本:
!/bin/bash
/etc/cron.daily/ssl_renew.sh
if certbot renew --quiet > /dev/null; then
systemctl reload nginx
echo "$(date) - SSL renewed" >> /var/log/ssl_renew.log
else
echo "$(date) - Renewal failed" >> /var/log/ssl_renew.log
fi
然后给脚本执行权限并加入crontab:
chmod +x /etc/cron.daily/ssl_renew.sh
方案4:使用acme.sh自动化管理
对于非certbot申请的证书,推荐使用acme.sh:
安装acme.sh
curl https://get.acme.sh | sh
申请证书(DNS验证示例)
acme.sh --issue -d example.com --dns dns_cx
安装到nginx目录
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/key.pem \
--fullchain-file /etc/nginx/ssl/cert.pem \
--reloadcmd "systemctl reload nginx"
方案5:降级为HTTP临时访问(最后手段)
在极端情况下可以临时关闭HTTPS:
listen 80;
server_name example.com;
return https://$host$request_uri; 注释掉跳转HTTPS的规则
但必须注意:
1. Chrome等浏览器会显示"不安全"警告
2.所有表单提交数据都不加密
3.违反PCI DSS等安全标准
四、高级防护措施
除了基本续期外,专业运维人员还应该:
1. 监控告警系统:
- Prometheus + Grafana监控所有域名到期时间
- Zabbix自定义触发器预警30天到期域名
2. 多节点同步更新:
当你有10台Nginx服务器时,可以用Ansible批量更新:
```yaml
- hosts: webservers
tasks:
- name: Copy new certs
copy:
src: "/tmp/newcerts/"
dest: "/etc/nginx/ssl/"
- name: Reload nginx
service:
name: nginx
state: reloaded
3. OCSP装订配置:
在nginx.conf中添加提升HTTPS性能的设置:
```nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver8.8.8.8 valid=300s;
resolver_timeout5s;
五、常见问题解答
Q:为什么更新了证书但浏览器还是显示过期?
A:可能是缓存问题。尝试:
1) Ctrl+F5强制刷新
2) clear浏览器的SSL状态缓存
3)重启Nginx服务
Q:Let's Encrypt三个月就要续期太麻烦怎么办?
A:可以使用付费的商业证书(如DigiCert/Sectigo),提供1-2年有效期。
Q:如何查看当前Nginx正在使用哪个证书?
A:运行这个命令查看进程加载的文件:
sudo ls -l/proc/$(pgrep nginx)/fd | grep pem
通过以上全套解决方案+预防措施的组合拳,你的网站就能彻底告别因SSL证照过期导致的业务中断风险。记住在网络安全领域,"预防为主、防治结合"才是王道!
TAG:nginx配置ssl证书过期,nginx配置ssl证书无效,nginx ssl_preread,nginx ssl配置