使用 certbot-cloudflare 申请通配符证书

certbot 能自动申请 SSL 证书并且自动在证书快到期时更新证书。一般来说,将域名的 A 记录指向对应的 IP 地址,并在此地址的机器上使用 certbot 申请即可。但有一些特殊情况,比如需要通配符证书,或在其他不方便将 A 记录指向某个 IP 的场景下,如果你的域名托管在 cloudflare,那么就可以用 api token 的方式申请证书。

1、创建令牌

首先需要去 cloudflare 创建一个 API 令牌( >去创建)。点击「创建令牌」,使用「编辑区域 DNS」模版。在详情界面选择域名。创建完成后,「复制令牌」到某个地方。

2、安装 certbot 及 certbot-cloudflare 插件

certbot 需要通过 snap 安装。如果你是 Ubuntu 系统,应该已经预装了 snapd。如果是没有预装 snapd 的系统(比如 Debian),则需要手动安装。可以参考 Snap 官方安装文档,涵盖了各种系统。本文以 Debian 为例。

安装 snapd:

apt update && apt install -y snapd
snap install snapd core && snap refresh core

移除系统可能预装的 certbot:

sudo apt-get remove certbot

安装 certbot 和 certbot-cloudflare 插件:

snap install --classic certbot && ln -s /snap/bin/certbot /usr/bin/certbot
snap set certbot trust-plugin-with-root=ok
snap install certbot-dns-cloudflare

3、使用 certbot 获取证书

创建配置文件:

mkdir -p .secrets/certbot

使用编辑器,创建 cloudlfare.ini 配置文件,以 VIM 为例:

vi .secrets/certbot/cloudflare.ini

添加配置内容:

dns_cloudflare_api_token = cloudflare_api_token_you_have_copied

cloudflare_api_token_you_have_copied 替换为创建令牌时复制的令牌值。

将配置文件的权限设置为 600:

chmod 600 .secrets/certbot/cloudflare.ini

使用 certbot 获取证书:

certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
  -d example.com

将 example.com 替换为你的域名即可。

  • 这里可以使用通配符域名来获取通配符证书。例如: -d *.example.com
  • 也可以追加多个 -d 参数来获取多个子域名的证书。例如: -d example.com -d www.example.com

不出什么问题的话,证书就申请成功并自动下载了,可以观察命令的输出中一般有类似的提示:

Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/example.com/privkey.pem

这里的路径就可以在 nginx 配置文件中用上。

除了 Cloudflare 外,域名托管在 DigitalOcean、dnsimple、OVH 等平台的也有对应的 certbot 插件可以获取通配符证书,插件的使用方式基本一致,可参考 certbot 官方文档

发表回复

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