Certbot(SSL 证书)

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-nginx

2. 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

交互步骤(一路按提示操作,默认选择即可):

  1. 输入邮箱:用于接收证书过期提醒(重要,避免证书失效);
  2. 同意 Let’s Encrypt 条款:输入 A 并回车;
  3. 是否共享邮箱:输入 N 并回车(不共享);
  4. 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.timer

2. 手动测试续期(必做)

模拟续期操作,不实际更新证书,用于验证续期配置是否正常。

sudo certbot renew --dry-run

成功标志:提示“Congratulations, all simulated renewals succeeded”。

3. 手动续期(如需立即更新)

sudo certbot renew

4. 续期后重载 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 查看证书有效期。