Certbot 是 Let’s Encrypt 官方推荐的免费 SSL 证书管理工具,核心功能的是一键申请、自动配置、自动续期,支持 Nginx、Apache 等主流 Web 服务器,证书有效期为 90 天,操作简单且无需手动管理续期,适合个人和小型站点使用。本笔记记录其核心应用流程、常用命令及常见问题,方便后续查阅使用。
一、前期准备
- 环境要求:主流 Linux 系统(以 Ubuntu/Debian 为例,CentOS 操作类似,替换 apt 为 yum 即可)。
- 核心前提:
- 域名已正确解析到目标服务器(公网 IP);
- 服务器放行 80 端口(HTTP,用于 Let’s Encrypt 域名验证)和 443 端口(HTTPS,证书生效后使用);
- Web 服务器(Nginx/Apache)已安装并正常运行,且有监听 80 端口的站点配置。
二、Certbot 安装
根据 Web 服务器类型,安装对应插件(插件用于自动配置 SSL 到服务器,无需手动修改配置文件)。
1. Nginx 服务器
# 1. 更新系统软件源
sudo apt update
# 2. 安装 Certbot 及 Nginx 插件
sudo apt install -y certbot python3-certbot-nginx2. Apache 服务器
sudo apt update
sudo apt install -y certbot python3-certbot-apache三、核心应用:SSL 证书申请与配置
Certbot 提供多种申请模式,优先推荐“自动配置模式”,无需手动修改服务器配置,适合新手;其他模式适用于特殊场景(如无 Web 服务器、不想重启服务)。
模式1:自动申请 + 自动配置(最常用)
该模式会自动完成证书申请、服务器配置修改(添加 SSL 监听、重定向 HTTP 到 HTTPS),并重启 Web 服务器,全程交互简单。
# 单域名申请(例:example.com)
sudo certbot --nginx -d example.com
# 多域名申请(主域 + www 子域,例:example.com + www.example.com)
sudo certbot --nginx -d example.com -d www.example.com交互步骤(一路按提示操作,默认选择即可):
- 输入邮箱:用于接收证书过期提醒(重要,避免证书失效);
- 同意 Let’s Encrypt 条款:输入 A 并回车;
- 是否共享邮箱:输入 N 并回车(不共享);
- HTTP 重定向选择:输入 2(推荐,强制将 HTTP 请求重定向到 HTTPS,提升安全性)。
成功标志:提示“Congratulations!”,证书文件默认存放路径:/etc/letsencrypt/live/你的域名/。
模式2:仅申请证书(不自动配置)
适用于已有自定义 SSL 配置,仅需获取证书文件的场景,分为两种方式。
(1)Webroot 模式(推荐,不重启 Web 服务器)
sudo certbot certonly --webroot \
-w /var/www/html \ # 网站根目录(需替换为自己的站点根目录)
-d example.com -d www.example.com说明:通过在网站根目录创建临时验证文件,完成域名验证,不影响现有站点运行。
(2)Standalone 模式(无 Web 服务器 / 80 端口空闲)
# 临时占用 80 端口完成验证,验证结束后释放
sudo certbot certonly --standalone -d example.com注意:若 80 端口已被其他服务占用,需先停止该服务,否则会失败。
四、关键操作:证书续期
Let’s Encrypt 证书有效期为 90 天,Certbot 默认已配置自动续期(到期前 30 天自动触发),但建议手动测试续期,确保配置正常。
1. 查看自动续期任务
# 查看 Certbot 自动续期定时器状态
sudo systemctl status certbot.timer
# 若未启用,手动开启(开机自启)
sudo systemctl enable --now certbot.timer2. 手动测试续期(必做)
模拟续期操作,不实际更新证书,用于验证续期配置是否正常。
sudo certbot renew --dry-run成功标志:提示“Congratulations, all simulated renewals succeeded”。
3. 手动续期(如需立即更新)
sudo certbot renew4. 续期后重载 Web 服务器(推荐)
部分场景下,续期后证书不会立即生效,需手动重载 Web 服务器,可通过定时任务自动完成。
certbot renew 只会在证书剩余有效期不足 30 天时才执行续签;
# 编辑定时任务
sudo crontab -e
# 添加以下内容(每月凌晨 检查续期,续期成功后重载 Nginx)
0 0 1 * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"
# 若为 Apache,替换为
0 0 1 * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload apache2"五、常用命令汇总(高频查阅)
# 1. 查看已申请的所有证书
certbot certificates
# 2. 删除指定证书(例:删除 example.com 的证书)
sudo certbot delete --cert-name example.com
# 3. 查看 Nginx SSL 配置(验证证书路径是否正确)
nginx -T | grep ssl_certificate
# 4. 重新配置证书(如修改重定向规则)
sudo certbot --nginx -d example.com --redirect
# 5. 查看 Certbot 帮助信息
certbot --help六、常见问题及解决方法
- 问题1:80 端口被占用,申请失败。 解决:停止占用 80 端口的服务(如 Apache、Nginx),或改用 Webroot 模式申请。
- 问题2:防火墙拦截,域名验证失败。 解决:放行 80 和 443 端口,Ubuntu 可执行:sudo ufw allow 'Nginx Full'。
- 问题3:证书申请成功,但网站仍无法通过 HTTPS 访问。 解决:重载 Web 服务器,执行:sudo systemctl reload nginx(或 apache2)。
- 问题4:自动续期失败。 解决:检查 80 端口是否空闲、域名解析是否正常,重新执行手动测试续期,排查错误提示。
七、补充说明
- 证书文件路径:/etc/letsencrypt/live/域名/,核心文件为 fullchain.pem(证书链)和 privkey.pem(私钥),手动配置 SSL 时需用到这两个文件。
- CentOS 系统:将 apt 替换为 yum,安装命令为 sudo yum install certbot python3-certbot-nginx(Nginx)。
- 证书过期提醒:除了邮箱提醒,也可定期执行 certbot certificates 查看证书有效期。