首页主机资讯ubuntu nginx ssl证书过期怎么办

ubuntu nginx ssl证书过期怎么办

时间2025-12-19 15:04:03发布访客分类主机资讯浏览1183
导读: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 加载新证书:
    • 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”
  • 使用 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
如何在ubuntu上为nginx配置hsts 如何在Debian上编译Golang跨平台应用

游客 回复需填写必要信息