Let's Encrypt 免费证书:Certbot 自动化续签

FreeGuideOnline 最新 2026-06-18

Let's Encrypt 免费证书完全指南:使用 Certbot 自动化部署与续签

为什么你需要 Let's Encrypt

网站从 HTTP 迁移到 HTTPS 早已不是可选项,而是必选项。浏览器会将未加密的站点标记为“不安全”,搜索引擎也会对 HTTPS 站点给予更好的排名。然而,传统 SSL/TLS 证书通常价格不菲且需要手动续期。Let's Encrypt 彻底改变了这一点——它提供完全免费、被所有主流浏览器信任的域名验证证书,并且鼓励自动化。

本教程将带你从零开始,使用官方推荐工具 Certbot 申请 Let's Encrypt 证书,并配置全自动续签,让你的 HTTPS 网站一劳永逸。

准备工作

在开始之前,请确保你已经具备以下条件:

  • 一台拥有公网 IP 的服务器(本教程以 Ubuntu/Debian 为例,其他系统类似)。
  • 一个已正确解析到该服务器的域名(例如 example.com)。
  • 服务器开放了 80 (HTTP) 和 443 (HTTPS) 端口。
  • 具有 sudo 权限的 SSH 登录账号。

注意:Let's Encrypt 证书的有效期仅为 90 天,因此自动化续签是整个流程中最关键的环节。

安装 Certbot

Certbot 是 Let's Encrypt 官方推荐的客户端,它能够自动完成证书申请、安装和续签。我们将通过官方维护的 snap 包安装,以获得最新版本和自动更新。

1. 安装 snapd

如果你的系统尚未安装 snapd,请先执行以下命令:

sudo apt update
sudo apt install snapd -y

确保 snapd 是最新版本:

sudo snap install core
sudo snap refresh core

2. 安装 Certbot

使用 snap 安装 Certbot:

sudo snap install --classic certbot

安装完成后,创建软链接以便在命令行直接使用 certbot

sudo ln -s /snap/bin/certbot /usr/bin/certbot

验证安装是否成功:

certbot --version

申请并安装证书

Certbot 会根据你的服务器环境自动选择最佳验证方式。最常用的是 webroot 方式(适用于已运行 Web 服务)和 standalone 方式(临时启动 Web 服务器)。这里我们以 nginx 插件为例,如果你的服务器使用 Apache,可以相应替换为 --apache

1. 使用 Certbot Nginx 插件

Certbot 的 Nginx 插件可以自动修改 Nginx 配置文件,帮你完成证书安装和 HTTPS 跳转。

运行以下命令,将 example.comwww.example.com 替换为你的实际域名:

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

交互式步骤说明:

  • 输入你的电子邮箱,用于紧急通知和密钥丢失恢复(建议填写真实邮箱)。
  • 同意服务条款。
  • 选择是否将邮箱共享给 EFF(可选)。
  • Certbot 会自动获取证书并修改 Nginx 配置,实现 HTTP 到 HTTPS 的重定向。

操作成功后,访问你的域名,你将看到 HTTPS 已生效,且浏览器地址栏会显示安全锁图标。

2. 手动验证方式(Webroot)

如果不想让 Certbot 修改服务器配置,或使用了其他 Web 服务器,可以使用 webroot 方式:

sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com

-w 参数指定网站的根目录,Certbot 会在该目录下创建一个临时验证文件,Let's Encrypt 服务器通过访问这个文件来验证域名控制权。

申请成功后,证书通常存放在 /etc/letsencrypt/live/你的域名/ 目录下,你需要手动配置 Web 服务器使用这些证书。

验证证书与配置

无论采用哪种方式申请,让我们检查一下证书链是否正确生成。

sudo certbot certificates

输出示例:

Found the following certs:
  Certificate Name: example.com
    Serial Number: 3b2e1d3a4a4d5b6c7d8e9f0a1b2c3d4e5f6
    Key Type: RSA
    Domains: example.com www.example.com
    Expiry Date: 2025-06-15 13:33:09+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem

重点关注 Expiry Date,剩余天数应接近 90 天。

Nginx 手动配置示例

如果你没有使用插件自动配置,以下是 Nginx HTTPS 最小配置参考(适用于 443 端口监听):

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        # 你的网站配置
    }
}

# HTTP 跳转 HTTPS
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

执行 sudo nginx -t && sudo systemctl reload nginx 使其生效。

自动化续签:CentOS 的心脏

Let's Encrypt 证书只有 90 天有效期,手动续签是绝对不可接受的。Certbot 安装时就已在系统中设置了自动续签任务,我们只需验证它是否正常工作。

1. 检查自动续签定时器

Certbot 使用 systemd 定时器(或 cron)来管理续签。执行以下命令查看定时器状态:

sudo systemctl status certbot.timer

输出中应包含 Active: active (running) 和下一次触发的时间(通常是每日两次随机时间)。如果没有启动,手动启用并启动:

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer

2. 模拟续签测试

为了确保续签流程无障碍,Certbot 提供了“干运行”模式,会模拟整个续签过程但不实际存储证书:

sudo certbot renew --dry-run

如果看到 Congratulations, all simulated renewals succeeded,说明一切配置正确,未来证书将静默自动更新

3. 续签后的钩子操作

证书更新后,Web 服务器并不会自动加载新证书,因此需要重启或重载服务。Certbot 的默认配置已经包含了重载 Nginx 或 Apache 的钩子,可以检查 Certbot 的配置文件(通常在 /etc/letsencrypt/cli.ini/etc/letsencrypt/renewal/ 目录下)。如果没有自动重载,你可以手动添加部署钩子。

例如,让 Certbot 在续签后重载 Nginx:

sudo certbot renew --deploy-hook "systemctl reload nginx"

该命令会将钩子持久化到当前 renewal 配置中。之后每次自动续签都会执行这个命令。

对于其他服务(如 HAProxy、Postfix 等),只需修改钩子中的服务重载命令即可。

4. 验证续签日志

自动续签的执行结果会写入日志文件,便于排查问题:

sudo tail -f /var/log/letsencrypt/letsencrypt.log

定期查看或配置监控报警(如证书到期时间小于 30 天时通知),可以让你的证书管理高枕无忧。

常见问题排查

问题:域名验证失败,提示连接超时

  • 确认域名解析已生效,可使用 nslookup example.com 验证。
  • 检查防火墙是否允许 80 端口流入。
  • 如果使用 CDN(如 Cloudflare),验证期间可能需要暂时暂停代理(开启 DNS Only 模式),验证完成后再开启。

问题:certbot 命令提示 “command not found”

  • 软链接未创建,请重新执行 sudo ln -s /snap/bin/certbot /usr/bin/certbot
  • 或者使用绝对路径 /snap/bin/certbot 执行。

问题:自动续签失败,邮件收到通知

  • 手动执行 sudo certbot renew 查看具体错误信息。
  • 确认 webroot 路径正确且可写。
  • 检查磁盘空间是否充足。
  • 查看 Certbot 社区帮助文档或将错误日志输出到搜索引擎,通常有现成解决方案。

进阶技巧

通配符证书

Let's Encrypt 同样支持免费通配符证书(*.example.com),这需要使用 DNS 验证方式。Certbot 支持多种 DNS 插件(如 Cloudflare、阿里云、Route53 等),可以实现域名所有权的自动化验证,从而获得通配符证书。

示例(Cloudflare 插件):

sudo snap install certbot-dns-cloudflare
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cloudflare.ini -d example.com -d '*.example.com'

需提前创建 API Token 并写入凭证文件。通配符证书同样支持自动续签。

证书更强大的安全配置

为了让 HTTPS 获得 A+ 评级,你可以在 Nginx 配置中加入 HSTS 头部和 OCSP Stapling:

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

结语

你已成功为站点配置了免费的 HTTPS 证书,并建立了坚不可摧的自动续签机制。Let's Encrypt 让网络安全变得触手可及,而 Certbot 则让整个流程丝滑顺畅。当你下一次想起证书即将到期时,它早已在后台悄悄更新完成——这就是自动化的魅力。

现在,享受你永久免费的 HTTPS 吧。