Certbot为Nginx申请证书与验证续期
本文使用Certbot的Nginx插件和HTTP-01验证,为已经可公网访问的HTTP站点部署证书。适合独立管理的Ubuntu 24.04环境;宝塔等面板已管理证书时,应继续使用原面板流程,不额外安装另一套续期工具。前置静态站点见Nginx静态网站教程。住宅云不支持建站、域名和证书,不适用。
验证域名与80端口条件
- 准备自己管理的真实域名,将下方example.com与www.example.com全部替换为实际名称;不需要www时不要将它加入申请。
- 确认每个名称的A/AAAA记录都指向本次正确服务器或接入服务。错误AAAA可能使一部分验证请求到达错误位置。
- 从服务器外访问每个名称的HTTP测试页,确认验证请求可经公网TCP 80到达Nginx;只在本机curl成功不够。
- 如所购产品要求域名过白,先按该产品购买须知完成域名提交并核对结果;流程有疑问或提交后出现异常,再通过工单说明情况。CDN、访问认证或反代不能阻断ACME验证路径;涉及多台Web服务器时,各验证入口都要正确。
HTTP-01必须通过80端口验证,不能把Web服务改到8080就认为验证条件相同。通配符证书应使用合适的DNS-01方案,不强行套本教程。HTTP阶段只测试无敏感页面,正式登录和凭据操作等待有效HTTPS。
检查已有证书管理方式再安装
command -v certbot
snap --version
sudo nginx -t
已有apt、pip或面板版本的Certbot时,先核对现有证书和续期任务,安排迁移方案,不直接并装或删除。新Ubuntu环境缺少snapd时,可用官方系统仓库安装snapd,并按Ubuntu官方指引确认服务可用。本文后续显式调用snap路径,避免命令解析到另一套Certbot。
sudo apt update
sudo apt install snapd
sudo snap install --classic certbot
sudo /snap/bin/certbot --version
安装或配置检查报错时停止后续步骤。记录Nginx目标站点配置和原证书位置,把恢复副本保存在网站目录及活跃include目录之外。
申请并安装到Nginx
sudo /snap/bin/certbot --nginx -d example.com -d www.example.com
按交互提示填写自己控制的联系邮箱,阅读并自行决定是否接受证书机构条款,核对申请名称及目标站点后继续;不要为了省步骤复制自动同意参数。插件可能修改Nginx配置,完成后重新检查实际server块及证书路径。申请失败时保留具体错误,不连续重复申请消耗机构速率额度。
sudo nginx -t
sudo /snap/bin/certbot certificates
curl -I https://example.com/
curl -I https://www.example.com/
确认访问结果和续期任务
用浏览器分别检查实际使用的每个名称:证书覆盖完整域名、有效期正确、页面及资源正常。多个名称加入同一申请,不代表所有名称都已命中同一Web配置。需要统一主域名时,先完成证书验证,再设计重定向,不同时叠加多套跳转。
systemctl list-timers --all | grep -i certbot
sudo /snap/bin/certbot renew --dry-run
dry-run用于模拟续期验证,必须看到本次测试成功的结果;仅看到定时器或“自动续期”字样不能证明任务会成功。还需持续检查真实任务日志和到期时间,保证验证端口、DNS及Nginx配置一直可用。不要把固定“90天”写死为所有证书永远不变的有效期。
失败分支与恢复
| 提示/现象 | 处理方向 |
|---|---|
| 连接超时或unauthorized | 核对每个申请域名的权威DNS、80端口及验证路径、CDN/代理拦截;不只测试首页。 |
| 证书申请成功但浏览器仍旧证书 | 检查真正处理TLS的CDN或反代,以及目标Nginx站点是否加载新证书。 |
| Nginx配置检测失败 | 恢复本次修改前配置,检测通过再加载,不带错误继续重启。 |
| dry-run失败 | 按错误定位验证依赖或任务权限,修复后再进行一次明确复测。 |
只需取得证书、不想让插件安装时可研究certonly模式及手工部署要求,但证书文件存在不等于Web服务已经使用它。私钥不放进工单、群聊或公开网站目录。