如果你运营网站或 Web 应用,那么 HTTPS 是必选项。没有它,访客会看到警告,信任会迅速消失。HTTPS 的核心是一张 SSL/TLS 证书,它证明你的站点安全、人们可以放心与之交互。多年前,配置证书是个痛苦的过程,但今天已容易得多。得益于 ACME 协议以及 Certbot 等工具,你可以在几分钟内拿到证书并让它自动续期。

本指南将准确演示如何做到这一点。我们将覆盖基于 Debian 和基于 Red Hat 的系统,以及 Snap 包的安装方式。你会看到所需的命令,以及如何处理通配符证书与设置自动续期。

先决条件

在深入安装 Certbot 并获取 SSL 证书之前,有几件事你应该先准备好。检查它们花不了多少时间,但跳过它们正是人们日后遇到错误最常见的原因。

  • Sudo 或 Root 权限
    Certbot 需要配置你的 Web 服务器并将证书写入系统目录。这意味着你需要管理员权限。如果你使用 VPS 或独立服务器,请确保能以 sudo 运行命令。
  • 已注册且 DNS 记录正确的域名
    你的域名应已注册并指向你的服务器。在 DNS 中创建一条 A 记录,将 example.com 这样的域名解析到其公网 IP。如果你计划使用子域名,请确保那些 DNS 记录也已设置。
  • 开放 80 和 443 端口
    ACME 证书验证需要 80/HTTP 与 443/HTTPS 的入站访问。如果你启用了 UFW、Firewalld 或云安全组等防火墙,请确认这两个端口都已开放。没有它,Certbot 无法完成域名验证挑战。

第 1 步——安装 Certbot

用 ACME SSL 保护 Apache 或 Nginx 服务器的第一步是安装 Certbot。这个工具负责证书的申请与续期,可根据你的 Linux 发行版与包管理器以多种方式安装。

  • 使用 APT 在 Debian/Ubuntu 上安装 Certbot
    如果你运行基于 Debian 的发行版(如 Ubuntu),可直接从 APT 仓库安装。先更新包索引:
    sudo apt update
    根据 Web 服务器安装正确的 Certbot 插件:
    sudo apt install certbot python3-certbot-apache
    (针对 Apache)
    sudo apt install certbot python3-certbot-nginx
    (针对 Nginx)
  • 使用 DNF 或 YUM 在 CentOS、RHEL、Fedora 上安装
    在基于 Red Hat 的发行版上,你需先启用 EPEL 仓库(Extra Packages for Enterprise Linux),它包含 Certbot 等许多附加工具:
    sudo dnf install epel-release
    (或较旧系统用)
    sudo yum install epel-release
    然后刷新仓库:
    sudo dnf clean all && sudo dnf update
    (或)
    sudo yum clean all && sudo yum update
    安装对应插件的 Certbot:
    sudo dnf install certbot python3-certbot-apache
    (或较旧 Yum 系统用)
    sudo yum install certbot python-certbot-apache
    (针对 Apache)
    sudo dnf install certbot python3-certbot-nginx
    (或)
    sudo yum install certbot python-certbot-nginx
    (针对 Nginx)
  • 使用 Snap 安装 Certbot
    Snap 是另一种通用的 Certbot 安装方式,通常提供最新版本。如果你的系统支持 Snap,这是个好选择。首先安装 Snap(若尚未安装):
    sudo apt install snapd
    (基于 Debian)
    sudo dnf install snapd
    (基于 Red Hat)然后经由 Snap 安装 Certbot:
    sudo snap install core
    sudo snap refresh core
    sudo snap install --classic certbot
    创建软链接使 Certbot 全局可用:
    sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbot 安装完成后,便可真正申请并安装 SSL 证书。一旦 Certbot 配置好,安装方式并不重要,证书签发的命令看起来都一样。

第 2 步——申请并安装你的 ACME 证书

下一步是真正申请并安装你的 ACME SSL 证书。这个过程因你是为单域名、多域名还是通配符域名签发而略有不同。

  • 单域名或多域名的标准证书
    大多数网站只需一张标准 SSL 证书,它同时覆盖主域名和几个子域名,例如 ssl2buy.com、www.ssl2buy.com 以及可能的 api.ssl2buy.com。Certbot 让这变得简单。常见结构如下:
    sudo certbot --nginx \
    --non-interactive \
    --agree-tos \
    --server <ACME_endpoint> \
    --email <your-email> \
    --eab-kid <EAB_ID> \
    --eab-hmac-key <EAB_Key> \
    --domain <DOMAINNAME> \
    --cert-name <friendlyname>
    若你运行的是 Apache,将 --nginx 替换为 --apache。下面拆解这个命令的重要参数:
    • nginx / apache 告诉 Certbot 要配置哪个 Web 服务器。
    • non-interactive 在无用户提示下运行(适合自动化)。
    • agree-tos 自动同意 CA 的服务条款。
    • email 提供用于续期通知的邮箱地址。
    • server 是 CA 的 ACME 端点,通常可在你的证书订单详情中找到。
    • eab-kid 与 eab-hmac-key 是你的 CA 提供的 ACME 认证凭据。
    • domain 是证书要覆盖的域名。你可以多次重复此参数以覆盖更多域名。
    • cert-name 是一个可选的友好名称,便于日后识别该证书。
    命令成功完成后,Certbot 会自动配置你的 Apache 或 Nginx 服务器使用新证书。
  • 使用 DNS 验证的通配符证书
    像 *.securedomain.com 这样的通配符证书稍复杂一些。ACME 对它们要求 DNS-01 验证,意味着 Certbot 必须在验证过程中创建特殊的 DNS TXT 记录。与标准证书不同,经由 80 端口的 HTTP 验证在此不起作用。
    • 使用受支持的 DNS 提供商插件
      Certbot 为许多流行 DNS 提供商提供了插件:
      • AWS Route53 → certbot-dns-route53
      • Google Cloud DNS → certbot-dns-google
      • DigitalOcean → certbot-dns-digitalocean
      • GoDaddy 社区插件 → certbot-dns-godaddy
      • Cloudflare 经由 Lexicon 或插件
      例如,在 Ubuntu/Debian 配合 DigitalOcean:
      sudo apt install python3-certbot-dns-digitalocean
      然后创建凭据文件:
      ~/.secrets/certbot/digitalocean.ini
      dns_digitalocean_token = YOUR_DO_API_TOKEN
      chmod 600 ~/.secrets/certbot/digitalocean.ini
      用插件运行 Certbot:
      sudo certbot certonly \
      --dns-digitalocean \
      --dns-digitalocean-credentials ~/.secrets/certbot/digitalocean.ini \
      --server <ACME_endpoint> \
      --domain *.example.com \
      --eab-kid <EAB_ID> \
      --eab-hmac-key <EAB_Key> \
      --email <your-email> \
      --agree-tos \
      --cert-name example-wildcard
    • 如果没有插件
      若你的 DNS 提供商没有插件,可使用带 hook 的手动模式:
      certbot certonly \
      --manual \
      --preferred-challenges dns \
      --manual-auth-hook /path/to/auth.sh \
      --manual-cleanup-hook /path/to/cleanup.sh \
      --server <ACME_endpoint> \
      --domain *.example.com \
      --eab-kid <EAB_ID> \
      --eab-hmac-key <EAB_Key> \
      --email <your-email> \
      --agree-tos \
      --cert-name example-wildcard
      • manual-auth-hook 是创建 DNS TXT 记录的脚本。
      • manual-cleanup-hook 是在验证后移除 TXT 记录的脚本。
      你可以自己编写这些脚本,或使用 Lexicon 等工具通过 API 管理 DNS 记录。
    DNS 挑战验证通过后,Certbot 会签发通配符证书。你随后需手动配置 Apache 或 Nginx 指向新的证书文件,它们通常存放在 /etc/letsencrypt/live/ 路径下。

第 3 步——验证安装

一旦申请并安装好证书,就该确认一切确实正常工作。很容易想当然认为 Certbot 已完成工作,但快速验证能确保你的站点正确地通过 HTTPS 提供流量。

  • 检查 Web 服务器状态
    确保 Web 服务器无错误运行:
    sudo systemctl status apache2
    (Debian 系 Apache)
    sudo systemctl status httpd
    (Red Hat 系 Apache)
    sudo systemctl status nginx
    (任意发行版 Nginx)若服务显示 "active (running)",说明服务器已用新证书启动运行。
  • 用 OpenSSL 验证证书
    你可直接用 openssl 检查 SSL 握手以做更深入的核查:
    openssl s_client -connect yourdomain.com:443
    此命令可看到 Common Name 与主题备用名称(SAN)。这是确认预期证书确在被提供的一种快捷方式。
  • 浏览器测试
    在浏览器中用 https:// 打开你的域名。若配置正确,应看到熟悉的信任图标。点击它,证书会显示颁发 CA 与过期日期。如果看起来不对(例如站点仍在提供 HTTP、显示错误证书或浏览器报 SSL 错误),通常指向以下三个问题之一:
    • DNS 未指向正确的服务器。
    • 安装证书后 Web 服务器配置未重新加载。
    • 防火墙或反向代理干扰。
    修复这些问题,重新加载服务,再次检查。

第 4 步——自动化证书续期

如果你使用带 Certbot 的 ACME 证书,就无需手动跟踪过期日期。这是相比其他类似方案最大的优势之一。组织管理员通常被困在续期证书上,因为它们通常只持续几天到一年。借助 certbot,这件事被自动化,你的站点在零停机的情况下保持安全。

  • 先做一次续期测试
    在设置自动化之前,先跑一次干跑续期是个好主意。它在不真正替换证书的情况下检查一切是否配置正确:
    sudo certbot renew --dry-run
    若运行无错,你便可开始自动化。
  • 现代 Linux 发行版用 systemd 自动续期
    Ubuntu 18.04+、CentOS 8+ 与 RHEL 8+ 使用 systemd 定时器自动处理续期。你可用以下命令检查是否启用:
    systemctl list-timers | grep certbot
    你应看到类似这样的条目:"Mon 2025-08-25 10:00:00 UTC 12h left n/a n/a certbot.timer certbot.service"。这意味着 Certbot 被安排每天运行两次。若证书在 30 天内到期,它将被自动续期。
  • 较旧系统用 Cron 自动续期
    若你的 Linux 发行版不支持 systemd 定时器,可使用 cron 任务。用以下命令编辑 crontab:
    sudo crontab -e
    然后添加此条目以每天运行两次续期:
    0 */12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
    • quiet 抑制输出,除非有错误。
    • post-hook 仅当证书被续期时重新加载 Web 服务器。
    对 Apache,将 post-hook 替换为:
    --post-hook "systemctl reload apache2"
  • 续期 Hook(可选)
    有时你需要的不仅仅是重新加载服务器。也许是更新负载均衡器、重启反向代理或在多个节点间同步证书。Certbot 为这些情况提供支持 hook:
    • /etc/letsencrypt/renewal-hooks/pre/ → 在续期前运行
    • /etc/letsencrypt/renewal-hooks/deploy/ → 在成功续期后运行
    • /etc/letsencrypt/renewal-hooks/post/ → 在每次尝试后运行
    示例 deploy hook(/etc/letsencrypt/renewal-hooks/deploy/reload.sh):
    #!/bin/bash
    systemctl reload nginx
    别忘了使其可执行:
    chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload.sh

结语

用 Certbot 让 SSL 运行起来,关乎让你的站点对使用者而言值得信任。一旦你在浏览器中看到那个安全标识,并知道续期已被妥善处理,整件事就成了背景的一部分。这正是良好基础设施的意义——它在你专注于构建、写作或发布最重要事物时,安静地持续工作。

用 ACME 方案自动化 SSL 安装与续期

借助来自立海世纪的 ACME SSL 证书,让证书续期变得简单。为你的 Apache 或 Nginx 服务器获取可信、易安装且经济的安全保护。

获取 ACME SSL 证书

相关文章:

  • 什么是 ACME 协议及其工作原理:完整指南
  • ACME 如何变革现代企业的 SSL 自动化
  • 如何使用 Certbot 在 cPanel/WHM 上安装 Sectigo ACME SSL 证书
  • 如何使用 Win-ACME 与 EAB 凭据在 IIS 上安装 SSL 证书
  • 什么是 8080 端口以及它与 80 和 443 端口的区别