ubuntu nginx ssl证书过期怎么办
导读:Ubuntu Nginx SSL证书过期处理与防过期方案 一、先快速确认是否过期与影响范围 检查证书到期时间(将 your.domain 替换为实际域名): echo | openssl s_client -connect your.d...
Ubuntu Nginx SSL证书过期处理与防过期方案
一、先快速确认是否过期与影响范围
- 检查证书到期时间(将 your.domain 替换为实际域名):
- echo | openssl s_client -connect your.domain:443 -servername your.domain 2> /dev/null | openssl x509 -noout -dates
- 查看本地证书清单与到期日:
- sudo certbot certificates
- 在线检测站点与链是否完整(可选):
- 使用如 myssl.cn 的服务器检测工具查看证书链与配置问题
- 若已过期,浏览器会报 NET::ERR_CERT_DATE_INVALID,客户端握手失败,需要立即续签并重新加载 Nginx。
二、立即续签证书(适用于 Let’s Encrypt 与 Certbot)
- 一键续签并自动修改 Nginx 配置(推荐):
- sudo certbot --nginx -d your.domain -d www.your.domain
- 过程中可选择是否将 HTTP 重定向到 HTTPS,完成后自动重载 Nginx
- 仅续签证书文件(不改动 Nginx 配置):
- sudo certbot certonly --nginx -d your.domain -d www.your.domain
- 如域名验证失败(例如改了 Web 根目录或无法临时停服务),改用 Webroot 方式:
- 在 Nginx 配置中确保存在 ACME 挑战目录(示例):
- location ^~ /.well-known/acme-challenge/ { root /var/www/letsencrypt; }
- 获取/续签:
- sudo certbot certonly --webroot -w /var/www/letsencrypt -d your.domain -d www.your.domain
- 在 Nginx 配置中确保存在 ACME 挑战目录(示例):
- 续签后务必让 Nginx 加载新证书:
- sudo systemctl reload nginx
- 说明:Let’s Encrypt 证书有效期为 90 天,建议配置自动续期以避免再次过期。
三、配置自动续期与零停机重载
- 使用系统自带的定时机制(优先):
- Certbot 安装后自带 systemd 计时器 或 /etc/cron.d 脚本,默认每天运行 2 次 renew,自动续期 到期前 30 天内 的证书
- 建议先测试:sudo certbot renew --dry-run
- 使用 crontab 的最简做法(任选其一):
- 每天检查并在成功后重载 Nginx:
- 0 3 * * * /usr/bin/certbot renew --quiet --post-hook “systemctl reload nginx”
- 如需更稳健,先语法检查再重载:
- 0 3 * * * /usr/bin/certbot renew --quiet --post-hook “nginx -t & & systemctl reload nginx”
- 每天检查并在成功后重载 Nginx:
- 使用 Certbot 续期钩子目录(推荐用于统一管理):
- 创建钩子脚本:
- echo -e ‘#!/bin/bash\nnginx -t & & systemctl reload nginx’ | sudo tee /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh
- sudo chmod a+x /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh
- 创建钩子脚本:
- 验证与监控:
- 定期查看证书状态:sudo certbot certificates
- 定期模拟续期:sudo certbot renew --dry-run
- 可结合日志与监控告警(如证书到期前邮件或企业微信/钉钉机器人)。
四、Nginx 配置与常见排错要点
- 证书路径与指令(确保与续签产出一致):
- ssl_certificate /etc/letsencrypt/live/your.domain/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/your.domain/privkey.pem;
- 如需 OCSP Stapling(可选增强):
- ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/your.domain/chain.pem;
- 修改配置后先语法检查再重载:
- sudo nginx -t & & sudo systemctl reload nginx
- ACME 挑战失败排查:
- 确保 80 端口 对 Let’s Encrypt 可达(验证文件放在 /.well-known/acme-challenge/)
- 检查防火墙/安全组、反向代理、CDN 是否拦截或缓存了挑战请求
- 协议与套件建议(提升兼容与安全):
- ssl_protocols TLSv1.2 TLSv1.3;
- ssl_ciphers ‘ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256’;
- ssl_prefer_server_ciphers on;
- 客户端握手失败或证书不被信任:
- 检查证书域名匹配(SAN 是否包含访问域名)
- 更新系统根证书:sudo apt update & & sudo apt install --reinstall ca-certificates
- 用 curl 直连排查:curl -v https://your.domain
- 查看详细错误日志:/var/log/letsencrypt/letsencrypt.log
五、非 Let’s Encrypt 证书的处理
- 若使用的是 商业 CA 或其他 ACME 客户端(如 acme.sh),思路一致:
- 按 CA 流程重新签发(CSR/HTTP-01 或 DNS-01 挑战)
- 在 Nginx 中更新证书路径后执行:sudo nginx -t & & sudo systemctl reload nginx
- 配置定时任务或客户端内置的自动续期(如 acme.sh 的 --cron),并在续期后重载 Nginx
- 示例(acme.sh 思路):
- 0 1 * * * “/path/to/acme.sh” --cron --home “/etc/acme” > /dev/null
- 证书路径示例:/etc/acme/certs/your.domain_ecc/fullchain.cer 与 your.domain.key
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu nginx ssl证书过期怎么办
本文地址: https://pptw.com/jishu/776288.html
