痛点场景
用户反馈网站打不开了,你排查了一圈,发现浏览器弹窗:Your connection is not private. NET::ERR_CERT_EXPIRED。SSL 证书过期是线上事故的高发原因之一,因为它不像代码报错那样有日志,证书过期没有任何预警,等用户报障了才发现已经晚了。
问题根因
SSL 证书过期的常见原因:
- Let's Encrypt 证书90天后自动过期,没配置自动续期就会中招
- 手动部署证书,过期了没更新
- 负载均衡层证书,只更新了后端服务器,没更新 LB 层
- 通配符证书,覆盖多个子域名但某个域名不在范围内
解决方案
检查一:命令行快速检查(最方便)
# 用 OpenSSL 检查证书过期时间
echo | openssl s_client -servername your-site.com -connect your-site.com:443 2>/dev/null | openssl x509 -noout -dates
# 输出示例:
# notBefore=Jan 25 00:00:00 2026 GMT
# notAfter=Apr 25 00:00:00 2026 GMT ← 这个日期就是过期时间
# 批量检查多个域名
for domain in site1.com site2.com site3.com; do
echo -n "$domain: "
echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -enddate
done
检查二:在线工具检查
打开 SSL Labs SSL Test,输入域名,可以拿到完整的证书链信息、过期时间、评分,以及其他安全问题(TLS 版本、密码套件等)。
修复:Let's Encrypt 自动续期
# 查看 certbot 是否安装
which certbot
# 测试续期(不加 --dry-run 实际执行)
sudo certbot renew --dry-run
# 如果续期失败,查看原因
sudo certbot renew -v
# 常见失败原因:nginx 占用了 80 端口
# 解决:先 stop nginx,续期后再 start
sudo systemctl stop nginx
sudo certbot renew
sudo systemctl start nginx
预防:crontab 自动检查
# 每天检查一次证书,过期前30天发邮件告警
0 0 * * * echo | openssl s_client -servername your-site.com -connect your-site.com:443 2>/dev/null | openssl x509 -noout -enddate | grep -q "Apr 25" && echo "Certificate expiring soon!" | mail -s "SSL Alert" admin@your-site.com
修复:Nginx 证书路径更新
# 查看当前证书路径
grep -r "ssl_certificate" /etc/nginx/sites-enabled/
# 或
grep -r "ssl_certificate" /etc/nginx/conf.d/
# 更新为新证书路径后重载配置
sudo nginx -t && sudo nginx -s reload
顺手工具推荐
可以用 CloverTools SSL/TLS 检测工具(如果没有专门的 SSL 工具,可以用 API测试工具发 HTTPS 请求看返回的证书信息)。另外 时间戳转换工具可以把证书的 notAfter 字符串(如 "Apr 25 00:00:00 2026 GMT")转换成时间戳,算出还有多少天过期。
常见问题
Q: 遇到 https证书过期怎么检查,是什么原因导致的?
A: 常见原因有:数据格式不符合规范(如 JSON 多了逗号或少了引号)、字符编码不统一(UTF-8 和 GBK 混用)、特殊字符未正确转义,或接口返回了非标准数据。先用工具验证格式是最快的排查方式。
A: 常见原因有:数据格式不符合规范(如 JSON 多了逗号或少了引号)、字符编码不统一(UTF-8 和 GBK 混用)、特殊字符未正确转义,或接口返回了非标准数据。先用工具验证格式是最快的排查方式。
Q: https证书过期怎么检查 会影响程序正常运行吗?
A: 会的。格式错误会导致数据无法正常解析,轻则功能异常,重则程序崩溃。尤其是涉及支付、用户输入等关键流程时,这类问题必须第一时间修复。
A: 会的。格式错误会导致数据无法正常解析,轻则功能异常,重则程序崩溃。尤其是涉及支付、用户输入等关键流程时,这类问题必须第一时间修复。
Q: https证书过期怎么检查 有没有自动修复的办法?
A: 大多数格式问题可以用在线工具自动修复。如果是自己生成的 JSON/编码数据,修复后再重新提交即可;如果是第三方接口返回的格式问题,则需要联系对方修正或做容错处理。
A: 大多数格式问题可以用在线工具自动修复。如果是自己生成的 JSON/编码数据,修复后再重新提交即可;如果是第三方接口返回的格式问题,则需要联系对方修正或做容错处理。
Q: 修复后还需要注意什么?
A: 建议增加格式校验环节,在数据提交前或接收后先做格式验证(用 JSON.parse 或对应工具),避免再次出现同样问题。同时统一前后端编码规范,从源头减少这类错误。
A: 建议增加格式校验环节,在数据提交前或接收后先做格式验证(用 JSON.parse 或对应工具),避免再次出现同样问题。同时统一前后端编码规范,从源头减少这类错误。