SSL 证书过期怎么办?Certbot 自动续期配置教程与常见问题排查

什么是 SSL 证书过期问题

SSL 证书是网站启用 HTTPS 加密访问的基础,每张证书都有明确的有效期,目前主流证书有效期普遍在一年以内,Let's Encrypt 等免费证书甚至只有 90 天。一旦证书过期,浏览器访问网站时就会弹出"您的连接不是私密连接"或"证书已过期"的警告页面,部分用户会因此直接离开,对网站流量和业务转化都有明显影响。对于电商、会员登录等涉及用户数据提交的站点,证书过期还可能被搜索引擎标记为不安全站点,影响搜索排名。因此,配置证书自动续期,让系统在证书到期前自动完成更新,是每个站长都应该掌握的基础运维操作。

本文以使用最广泛的 Certbot 工具为例,讲解在 Linux 服务器上为 Nginx 配置 SSL 证书自动续期的完整步骤,并整理证书续期相关的常见问题与排查方法。无论你的证书来自 Let's Encrypt 还是其他支持 ACME 协议的证书机构,都可以参考本文的流程。涉及修改 Nginx 配置和重启服务的操作,建议先备份现有配置文件,并在业务低峰期执行,避免影响线上访问。

SSL 证书与安全锁概念配图
SSL 证书是网站 HTTPS 加密访问的基础

适用场景与准备工作

本教程适用于以下场景:网站 SSL 证书即将到期或已经过期,需要快速恢复 HTTPS 访问;希望摆脱手动每年更换证书的重复劳动;使用 Let's Encrypt 免费证书,需要配置每 90 天一次的自动续期;多域名或多站点共用一台服务器,希望统一管理证书更新。如果你的证书是由阿里云、腾讯云等平台签发的付费证书,也可以参考文末的常见问题部分了解替代方案。

开始之前,请确认以下准备条件:一台可以通过 SSH 登录的 Linux 服务器;服务器上已安装 Nginx 并正常运行网站;域名解析已正确指向服务器 IP;拥有服务器的 root 或 sudo 权限。如果证书尚未申请,Certbot 在签发过程中会自动完成申请和配置,无需提前准备证书文件。操作前建议先执行 nginx 配置备份,命令如下:

sudo cp -r /etc/nginx /etc/nginx.bak.$(date +%F)

第一步:安装 Certbot 工具

Certbot 是 EFF 维护的开源 ACME 客户端,负责向证书机构申请证书、验证域名归属并自动更新。以 Ubuntu/Debian 系统为例,先更新软件源索引,然后安装 Certbot 及其 Nginx 插件:

sudo apt update

sudo apt install certbot python3-certbot-nginx -y

如果是 CentOS/RHEL 系统,先安装 EPEL 源再安装:

sudo yum install epel-release -y

sudo yum install certbot python3-certbot-nginx -y

安装完成后执行 certbot --version 确认安装成功。如果系统自带软件源的 Certbot 版本过旧,建议按照 Certbot 官方文档使用 snap 方式安装最新版本,新版本对续期流程和兼容性都有改进。安装过程不会改动 Nginx 配置,可以放心执行。

第二步:签发证书并自动配置 Nginx

使用 Certbot 的 nginx 插件可以自动修改 Nginx 配置完成证书部署,执行以下命令:

sudo certbot --nginx -d example.com -d www.example.com

将 example.com 替换为你的实际域名。-d 参数可以写多个,一次为多个域名签发证书。执行过程中 Certbot 会要求输入联系邮箱,用于证书到期提醒和紧急通知;随后要求同意服务条款;最后询问是否将 HTTP 流量重定向到 HTTPS,建议选择重定向(Redirect),这样所有访问都会走加密通道。

签发成功后,Certbot 会输出证书保存路径(通常在 /etc/letsencrypt/live/你的域名/ 目录下)以及证书到期时间。此时打开 Nginx 配置文件,可以看到 ssl_certificate 和 ssl_certificate_key 已经被自动指向新证书路径,HTTP 到 HTTPS 的 301 跳转也已加入。建议用浏览器访问网站确认 HTTPS 正常,锁标志正常显示后再进行下一步。

第三步:配置自动续期

这是本文的核心步骤。Certbot 安装后通常会自动创建定时任务,但不同安装方式生成的机制不同,需要手动确认。先检查续期服务是否存在:

sudo systemctl list-timers | grep certbot

如果看到 certbot.timer 相关条目,说明系统已通过 systemd 定时器自动管理续期。也可以检查 cron 方式:

sudo cat /etc/cron.d/certbot

如果以上两者都不存在,手动添加一条 cron 任务,每天执行两次续期检查(Certbot 只在证书剩余有效期低于 30 天时才真正续期,所以频繁执行不会产生多余请求):

sudo crontab -e

添加以下内容后保存:

0 3,15 * * * /usr/bin/certbot renew --quiet

这条任务表示每天凌晨 3 点和下午 3 点各检查一次续期。--quiet 参数让正常情况下不产生输出,只有出错时才记录日志。

第四步:验证自动续期是否生效

配置完成后,务必用测试模式验证续期流程可以正常走通,这是很多站长容易忽略的一步。执行以下命令进行模拟续期测试:

sudo certbot renew --dry-run

该命令使用测试环境完整模拟续期流程,不会真实申请证书,也不会影响现有证书。如果输出 Congratulations, all simulated renewals succeeded 类似信息,说明自动续期配置正确。如果报错,常见原因是 80 端口被防火墙拦截、域名解析指向了 CDN 而非源站、或者 Nginx 配置被手动改动导致验证文件无法访问,需要根据报错信息针对性处理。

另外可以查看续期配置文件确认续期后是否自动重载 Nginx:

sudo cat /etc/letsencrypt/renewal/example.com.conf

在 renewal_hooks 或配置中确认包含 deploy hook 执行 nginx 重载。如果没有,可以编辑 /etc/letsencrypt/renewal/ 下的配置文件,或在 crontab 命令后追加 --deploy-hook "systemctl reload nginx",确保新证书生效时 Nginx 自动加载而无需重启。

第五步:证书已过期时的紧急恢复

如果打开网站时才发现证书已经过期,不用慌张,恢复流程和正常续期一致。先手动执行一次续期:

sudo certbot renew

如果续期失败(例如过期太久或配置变更过),可以直接重新签发:

sudo certbot --nginx -d example.com -d www.example.com

签发成功后重载 Nginx 使新证书生效:

sudo nginx -t && sudo systemctl reload nginx

注意 nginx -t 用于检查配置语法,确认无误后再 reload,避免配置错误导致服务中断。执行完成后用浏览器强刷页面(Ctrl+F5)确认证书警告消失,也可以点击浏览器地址栏的锁标志查看新证书的有效期。最后回到第三步,把自动续期配置补齐,避免下一次再出现过期问题。

常见问题 FAQ

问:证书续期成功但网站仍然提示证书过期?答:大概率是 Nginx 没有重新加载证书。执行 sudo systemctl reload nginx 后强刷浏览器验证。如果使用的是 CDN 或负载均衡,还需要在 CDN 控制台同步更新证书,因为用户访问到的是 CDN 节点的证书,源站更新不会自动同步。

问:certbot renew 报错 Failed authorization procedure 怎么办?答:这是域名验证失败。检查三点:域名解析是否仍指向本服务器(如果流量走了 CDN,需要临时关闭 CDN 代理或使用 DNS 验证方式);服务器 80 端口是否对外开放且未被防火墙拦截;是否有其他服务占用了 80 端口导致验证请求无法到达 Certbot 的临时验证服务。

问:付费证书(如阿里云、腾讯云签发的)能用 Certbot 自动续期吗?答:不能直接使用。Certbot 只支持 ACME 协议的证书机构(Let's Encrypt、ZeroSSL 等)。付费证书需要在云平台控制台手动续费并下载替换,或者使用云厂商自己的自动更新工具。如果希望全自动且免费,推荐将证书切换为 Let's Encrypt,配合本文的 Certbot 方案实现无人值守续期。

问:多久检查一次自动续期是否正常?答:建议每月执行一次 sudo certbot renew --dry-run 做模拟验证,确保证书、Nginx 配置和定时任务都处于正常状态。也可以关注 Certbot 发送到注册邮箱的到期提醒邮件。对于承载重要业务的站点,将证书到期时间纳入监控告警(如通过 Uptime 监控平台设置证书到期提醒)是更稳妥的做法。

总结

SSL 证书过期是一个完全可以通过自动化避免的问题:安装 Certbot 并签发证书、确认续期定时任务存在、用 certbot renew --dry-run 验证续期链路,三步走完之后证书就会在到期前 30 天自动更新并重载 Nginx。关键在于配置完成后一定要做一次 dry-run 验证,以及续期后确认 Nginx 能自动加载新证书。操作涉及修改 Nginx 配置和服务重载,建议提前备份配置并在业务低峰期执行;如果站点前面有 CDN 或负载均衡,记得同步更新对应平台的证书。养成每月模拟续期检查一次的习惯,就可以彻底告别证书过期的突发状况。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容