Ubuntu 20.04でCertbot + Cloudflare DNSを使ったワイルドカード証明書の取得方法について記載していきます。

CloudflareのAPI Keyを取得

Cloudflareにログイン後、 https://dash.cloudflare.com/profile/api-tokens を開きます。

画面内の「Global API Key」の所の「表示」ボタンから、API Keyを取得できます。

パッケージのインストール

1
2
sudo apt-get update
sudo apt-get install python3-certbot-dns-cloudflare

認証情報ファイルの作成

設定ファイルのディレクトリを作成し、Cloudflareのemailとapi keyを記述します。

証明書の更新時にもこのファイルは利用される為、letsencryptの設定ファイルディレクトリと同じ場所に保存しておきます。

dns_cloudflare_email dns_cloudflare_api_key は適宜変更してください。

1
2
3
4
5
6
sudo mkdir -pv /etc/letsencrypt
{
  echo dns_cloudflare_email = example@example.com
  echo dns_cloudflare_api_key = 1234567890abcdef1234567890abcdef12345
} | sudo tee /etc/letsencrypt/cloudflare_secret.ini
sudo chmod 600 /etc/letsencrypt/cloudflare_secret.ini

証明書の取得

まずはdry-runを実行します。

メールアドレスとドメインは適宜変更してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo certbot certonly \
--dry-run \
-n \
--agree-tos \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare_secret.ini \
--dns-cloudflare-propagation-seconds 20 \
--email example@example.com \ # Cloudflareのメールアドレスを指定
-d *.example.com \
-d example.com

--dry-runオプションを外し、実際に証明書を取得します。

メールアドレスとドメインは適宜変更してください。

1
2
3
4
5
6
7
8
9
sudo certbot certonly \
-n \
--agree-tos \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare_secret.ini \
--dns-cloudflare-propagation-seconds 20 \
--email example@example.com \ # Cloudflareのメールアドレスを指定
-d *.example.com \
-d example.com

証明書は
公開鍵: /etc/letsencrypt/live/example.com/fullchain.pem
秘密鍵: /etc/letsencrypt/live/example.com/privkey.pem
といったパスに作成されます。

証明書の更新

証明書の更新はrenewコマンドで行います。

1
sudo certbot renew

crontabで下記のような定義を入れておけば、毎週月曜日に更新、ということが可能です。

1
0 5 * * mon sudo certbot renew

参考サイト

https://certbot.eff.org/docs/
https://certbot-dns-cloudflare.readthedocs.io/