跳转至主要内容
晴雨技术笔记

Certbot签发通配符证书

杏川铭心 杏川铭心
发表于 2025年3月21日
  • 本文最后编辑于 445 天前,部分信息可能已严重过时,请注意甄别。
  • 本文将介绍如何使用 Certbot 在 Ubuntu 22.04 系统上自动签发通配符 SSL 证书并实现自动续期。

    什么是 Certbot ?

    Certbot 是一个命令行工具,可以从 Let’s Encrypt 获取 SSL 证书,也是 Let’s Encrypt 官方推荐使用的工具。支持 Windows、Linux 等多个平台。

    Certbot 还实现了与众多 Web 服务器(例如 Apache、nginx)的集成,可以自动在兼容的服务器上安装证书,可以说是非常的方便了。

    安装 Certbot

    以 Ubuntu 22.04 系统为例:

    最新的几个 Ubuntu 版本都开始使用 snap 来安装 Certbot 插件了,所以我们也需要用 snap 本体来安装 Certbot:

    sudo apt-get remove certbot
    sudo snap install certbot --classic
    

    然后启用 Certbot 的插件功能:

    sudo snap set certbot trust-plugin-with-root=ok
    

    安装 DNS 插件。由于我们要颁发的是通配符证书,因此只能选用 dns-01 也就是用 DNS 记录来验证的方式。为了确保能自动续期(而不是每次续期都去服务商那里该记录),我们需要插件。这里以 Cloudflare 为例:

    sudo snap install certbot-dns-cloudflare
    

    其他的 DNS 插件还有很多,在此不一一列举。(完整的列表在官方文档里面有。)

    配置 Certbot

    这里我们只需要创建一个文件,剩下的交给 Certbot 处理就好。

    继续以 Cloudflare 为例,文件中填入你的 Cloudflare API 令牌信息就行,像这样:

    dns_cloudflare_api_token = <你的令牌>

    然后保存,比如说保存到/etc/letsencrypt/cloudflare.ini

    接下来修改文件的权限,防止他人读取:

    sudo chown root:root /etc/letsencrypt/cloudflare.ini
    sudo chmod 400 /etc/letsencrypt/cloudflare.ini

    用 Certbot 签发证书

    修改完之后就可以签发证书了。

    sudo certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials \
    /etc/letsencrypt/cloudflare.ini \
    -d example.com \
    -d *.example.com

    这里解释一下各个参数的含义:

    • certonly:代表只签发证书,不进行安装。由于 Certbot 默认会把证书安装到服务器级别,因此容易被扫 IP 的发现 IP 和域名的对应关系;套了 CDN 或防护的尤其要注意。
    • --dns-cloudflare:代表使用 Cloudflare DNS 插件来进行 DNS 验证。
    • --dns-cloudflare-credentials:代表存储你 Cloudflare API 密钥文件的位置。
    • -d:代表要签发证书的域名。

    第一次运行会询问你的邮箱地址。这个地址本来是用于接收证书过期通知的,不过 Let’s Encrypt 最近已经决定暂停邮件通知,所以不用太在意。

    正常来讲证书 1 分钟左右就签发成功。签发完的证书会放在/etc/letsencrypt/live/<你的域名>/这个目录下。其中privkey.pem是私钥,fullchain.pem是带有完整证书链的证书;基本上我们都是使用这两个文件。

    配置 Certbot 自动续期

    接下来就需要配置自动续期了。自动续期的方式有两种,一种是全自动的,还有一种需要我们自己配置一下。

    全自动续期

    在某些兼容的系统上,Certbot 会自动创建一个certbot.timer的 systemd 对象,来实现自动续期。

    可以执行这个命令来检查全自动续期是否生效:

    sudo systemctl status certbot.timer

    如果命令有输出,那么恭喜你,自动续期是 OK 的。不过由于我们申请的时候没有附加--deploy-hook参数,可能需要编辑一下证书续期配置(certbot reconfigure)或者自动重启 Web 服务器也 OK。

    如果没有输出,则代表无法全自动续期,需要我们自己配置。

    手动配置续期

    并不是说有全自动续期就不能手动配置。如果你不放心,你也可以进行手动配置;Certbot 已经猜到有人会这么干,并且会自动决定最终的续期方式。

    手动配置的原理也很简单,就是 Linux 计划任务(cron)。

    先新建一个任务:

    sudo vim /etc/cron.d/letsencrypt

    然后填入以下配置:

    0 4 * * 0 root certbot renew --deploy-hook "/usr/local/bin/deploy.sh"

    这段配置的意思是,每周日的凌晨4点,尝试使用 root 账户执行续期命令。

    这里的/usr/local/bin/deploy.sh是我自己编写的一个脚本,里面是重启 Web 服务器的命令。需要根据实际情况进行修改。

    测试 Certbot 能否续期证书

    至此(假设你已经配置好 Web 服务器),你的网站已经有通配符 SSL 了。不过在这之前,最好检查一下续期功能是否正常。

    运行以下命令:

    sudo certbot renew --dry-run

    命令中的--dry-run参数代表使用 Let’s Encrypt 的测试服务器来模拟真实情况。

    如果没成功,可以等一会再试一次,或者检查一下配置是否有问题。

    如果成功了,那么恭喜你,Certbot 通配符证书配置成功!

    • 特别提醒:

      评论看到就会回,但是不保证速度,有的时候站长忘记看的话就会出现审核好几天也没有动静的情况……

      有垃圾评论检查,如果评论之后直接消失、没反应说明被识别为垃圾评论了。

      如果等不及的话,可以加群!

    杏川铭心
    杏川铭心

    群号:1101838302,欢迎友好交流 :P 曾用名Frank419(现在也是我在很多地方的用户名),网站站长。

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注