Let‘s Encrypt 证书过期续期踩坑记:从端口冲突到 DNS 失效的完整排查

发布时间:2026/10/22 2:22:23

Let‘s Encrypt 证书过期续期踩坑记:从端口冲突到 DNS 失效的完整排查 背景服务器上的域名证书过期了用certbot certificates一查发现是 Let’s Encrypt 签发的免费证书。本来以为一条certbot renew就能搞定结果接连踩了三个坑端口被 Nginx 占用、子域名 DNS 记录已删除、旧版 Certbot 不支持reconfigure命令。这篇文章完整记录了排查过程和最终方案希望能帮到遇到类似问题的朋友。环境说明系统Ubuntu腾讯云轻量服务器Web 服务Nginx部分站点通过 Docker 部署证书工具Certbot版本较旧0.40.0 左右证书域名xxx.com、www.xxx.com、rsvp.xxx.com均已脱敏第一步确认证书状态sudocertbot certificates输出显示有两张证书Certificate Name: hagent.xxx.com Expiry Date: 2026-12-07 (VALID: 48 days) Certificate Name: mytools.xxx.com Domains: mytools.xxx.com rsvp.xxx.com www.xxx.com Expiry Date: 2026-10-14 (INVALID: EXPIRED)问题定位在mytools.xxx.com这张证书已经过期。另外输出里有一行警告Cannot extract OCSP URI from /etc/letsencrypt/live/.../cert.pem这个警告可以忽略。Let’s Encrypt 正在逐步淘汰 OCSP 功能新证书不再包含 OCSP 地址Certbot 读不到就会报这个提示不影响签发和续期。第二步首次续期失败——80 端口被占用直接执行强制续期sudocertbot renew --cert-name mytools.xxx.com --force-renewal报错Plugins selected: Authenticator standalone, Installer None Problem binding to port 80: Could not bind to IPv4 or IPv6.原因当初申请证书时用的是standalone模式续期时 Certbot 需要自己临时占用 80 端口来响应 HTTP-01 验证。但服务器上 Nginx 正占着 80 端口Certbot 绑不上续期失败。第三步停 Nginx 仍失败——进程没真正停掉尝试停掉 Nginx 再续期sudosystemctl stop nginxsudocertbot renew --cert-name mytools.xxx.com --force-renewal依然报同样的端口占用错误。再启动 Nginx 时还报了Job for nginx.service failed because the control process exited with error code.用ss查端口占用sudoss-tlnp|grep:80发现 Nginx 进程其实还在LISTEN 0 511 0.0.0.0:80 users:((nginx,pid1152155,...),(nginx,pid1152154,...))原因systemd 状态和实际进程不一致systemctl stop没有真正杀掉 Nginx 进程。解决办法是直接对 PID 下手sudokill-9115215511521541151819再次确认端口已释放sudoss-tlnp|grep:80这次没有输出8099 和 8080 是 Docker 的端口不影响 80。端口释放后证书续期命令终于能往下走了。第四步续期再次失败——子域名 DNS 记录已删除端口问题解决后重新续期这次报错变了Challenge failed for domain rsvp.xxx.com Type: dns Detail: DNS problem: NXDOMAIN looking up A for rsvp.xxx.com原因rsvp.xxx.com这个子域名的 DNS 记录已经被删除Let’s Encrypt 无法解析到 IP验证自然失败。这里有两个选择补上 DNS 记录继续保留这个域名如果域名已经不用了从证书里剔除。本例中rsvp.xxx.com已经不再使用选择方案 2。第五步剔除无效域名重新签发证书先停 Nginx 释放 80 端口sudosystemctl stop nginxsudoss-tlnp|grep:80# 确认无输出然后用certonly重新签发只保留有效域名sudocertbot certonly--standalone--force-renewal\--cert-name mytools.xxx.com\-dmytools.xxx.com-dwww.xxx.comCertbot 会提示确认要移除rsvp.xxx.comYou are also removing previously included domain(s): - rsvp.xxx.com Did you intend to make this change? (U)pdate cert/(C)ancel:选U继续。签发成功后Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/mytools.xxx.com/fullchain.pem Your cert will expire on 2027-01-18.启动 Nginxsudosystemctl reset-failed nginxsudosystemctl start nginxsudosystemctl status nginx --no-pager确认active (running)后用certbot certificates复查域名列表只剩mytools.xxx.com和www.xxx.com状态VALID。第六步配置自动续期避免下次再踩坑证书续上了但如果自动续期还是用standalone模式下次定时任务触发时 Nginx 正占着 80 端口大概率会重蹈覆辙。所以要把续期方式改成Nginx 插件验证让 Certbot 通过正在运行的 Nginx 完成验证不再抢端口。1. 安装 Nginx 插件sudoaptinstallpython3-certbot-nginx-y2. 尝试reconfigure旧版本会失败sudocertbot reconfigure --cert-name mytools.xxx.com--authenticatornginx如果报错unrecognized arguments: reconfigure说明 Certbot 版本低于 2.3.0不支持这个子命令。改用下面的方式。3. 用certonly --nginx重新签发sudocertbot certonly--nginx\--cert-name mytools.xxx.com\-dmytools.xxx.com-dwww.xxx.com过程中选择2: Renew replace the cert。完成后检查续期配置sudogrepauthenticator /etc/letsencrypt/renewal/mytools.xxx.com.conf输出authenticator nginx就说明改成功了。4. 模拟测试自动续期sudocertbot renew --dry-run --cert-name mytools.xxx.com输出里出现new certificate deployed with reload of nginx server Congratulations, all renewals succeeded.说明续期流程完全正常而且续期成功后 Certbot 会自动 reload Nginx新证书自动生效。5. 确认定时器在运行systemctl list-timers|grepcertbot看到certbot.timer处于活跃状态即可。如果没有手动启用sudosystemctlenable--nowcertbot.timer关键经验总结standalone模式和 Nginx 抢 80 端口是续期失败的常见原因。长期方案是改用--nginx插件或webroot模式让 Certbot 借助现有 Web 服务完成验证。systemctl stop不一定真能停掉进程。遇到端口仍被占用时用ss -tlnp | grep :80查实际 PID必要时直接kill -9。证书里的域名必须都有有效 DNS 记录。过期或删除的子域名会导致整个证书续期失败及时从证书中剔除。旧版 Certbot 不支持reconfigure。用certonly --nginx重新签发同样能达到修改验证方式的目的。Cannot extract OCSP URI警告可以忽略是 Let’s Encrypt 淘汰 OCSP 后的正常现象。配置完成后一定要跑--dry-run模拟续期通过才算真正配好自动续期。附常用排查命令速查# 查看所有证书及状态sudocertbot certificates# 查看 80 端口占用sudoss-tlnp|grep:80# 查看某张证书的续期配置sudogrepauthenticator /etc/letsencrypt/renewal/证书名.conf# 模拟续期测试sudocertbot renew --dry-run --cert-name证书名# 查看 Certbot 定时器systemctl list-timers|grepcertbot
延伸阅读

更多相关文章

2026/10/22 2:22:23

锁具五金喷涂升级案例:从传统手工到自动化产线的转型之路

摘要锁具属于五金行业里对表面涂层要求较高的品类,国内大量中小型锁具制造企业过去长期依赖手工喷涂,普遍面临效率低下、品质波动、环保压力、招工困难等现实痛点。本文结合五金锁具行业典型的产线改造实例,分析传统手工喷涂的各类问题&#…

2026/10/22 2:22:23

转岗 Agent 开发|分享一套经过面试验证的个人学习路线

从 Java 开发转型深耕 Agent 赛道已经一年,一路上踩过不少坑,也走了很多弯路。结合本人真实面试经历与项目落地经验,整理出一套贴合企业用人需求的学习路线。分享给打算转 AI Agent 方向的同行,帮大家避开坑点,高效准备…

2026/10/22 2:22:23

明明拿到了正确的 CSRF Token,为什么 SAP OData V4 仍然报 042

做 SAP OData 开发很多年以后,CSRF 很容易变成一种近似肌肉记忆的操作。 发送一个 GET,带上 X-CSRF-Token = Fetch。 服务器返回一个 Token。 把这个 Token 塞进后面的 POST、PATCH 或 DELETE。 请求成功。 因此,当系统明明已经拿到了 Token,修改请求里也明明存在 X-C…

2026/10/22 3:32:32

手写极简Agent:大模型如何通过工具调用实现自主任务

你是不是也遇到过这种情况:看了很多讲Agent的文章,收藏了一大堆,等到自己想动手的时候还是不知道从哪儿开始。别急着自责,这太正常了。Agent这个东西,光看概念很容易被绕晕——又是规划、又是记忆、又是工具调用&#…

2026/10/22 3:32:32

Qt Android 连接 MySQL:用 HTTP API 替代直连的完整实践

简介:面向需要在 Qt 5.12.1 Android 应用中接入 MySQL 数据库的开发者,这份资源围绕 MySQL 驱动的交叉编译、插件封装与 APK 打包提供完整参考方案。内容基于 Ubuntu/Windows 双平台环境,覆盖 NDK 工具链配置、qsql_mysql 插件修改、QSqlData…

2026/10/22 3:32:32

基于YOLO的水下鱼类多目标检测系统实战:从数据到部署

我前段时间帮一个海洋牧场项目做了套鱼群监测系统,核心目标就一件事:对着水下视频画面,把游来游去的鱼实时框出来、数清楚、分好类。前后折腾了三个多月,踩了不少坑,也总结出一套相对完整的流程。今天这篇就把整个“基…

2026/10/22 3:32:32

Qt Android直连MySQL:驱动交叉编译与六大避坑实践

简介:面向基于 Qt 5.12.1 的 Android 与 MySQL 集成开发场景,这份资源包集中提供编译 QMYSQL 驱动所需的源码、配置与构建辅助文件,帮助开发者在 Windows/Ubuntu 环境下完成 NDK 交叉编译,解决 Android 端默认缺少 MySQL 驱动的常…

2026/10/22 3:32:32

LangChain Agent 不稳定?试试 Harness Engineering 这套外壳

很多人在 LangChain 里写 Agent,写完第一版感觉特别顺,模型一调、工具一接,好像什么都能干。但一旦丢到真实业务里,问题就全冒出来了:任务稍微绕一点就跑偏,同样的输入有时候对有时候错,Token 消…

2026/10/22 3:27:32

Kubernetes集群参数调优实战:解决Pod反复重启与驱逐问题

不少维护自建集群的同行都有过这种体验:集群规模不算大,资源水位看着也正常,可一到流量高峰期,Pod就开始以一种十分“随机”的姿态反复重建、Pending、ContainerCreating。这种时候,K8s参数优化往往才是真正要做的功课…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/22 0:01:49

电商智能运营体系从0到1:架构设计、落地步骤与避坑指南

前两年我们团队接了一个电商平台的运营中台项目,目标很直白:把过去靠运营拍脑袋做的选品、定价、发券、推活动这些事,逐步用数据算法和自动化流程代替。项目名字内部就叫“电商智能运营体系”。最近有不少朋友问我当时是怎么设计的、踩过哪些…

2026/10/22 0:01:49

若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定

最近一段时间,我一直想把后台管理系统里那些机械重复的增删改查代码交给AI去写。框架用的是若依,按理说这类业务代码模式非常固定,应该是AI最擅长的事情。可真试下来却不是那么回事——你让AI生成一个用户管理模块,它给出的Contro…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑