Let's Encryptのワイルドカード証明書自動更新

2018-12-05
Let's Encrypt
Cloudflare

何番煎じの話なのかという気もするけど、certbotをサーバーにインストールして更新を行う方法ばかりなので、直接dockerコマンドで実行する方法をまとめてみた。

CertbotのCloudflareプラグイン

利用するのは、Certbotが提供する公式イメージ
certbot/dns-cloudflare - Docker Hub

dockerコマンドさえ使えればインストールもしないで使えます。下記のコマンドで動作確認

1
2
docker pull certbot/dns-cloudflare
docker run -it --rm certbot/dns-cloudflare:latest --version

ワイルドカード証明書更新手順

Cloudflareのプラグインドキュメント。なんというかとても簡素…
certbot-dns-cloudflare 0 documentation

cloudflare.iniの作成

API KEYはCloudflareのアカウントページから取得する。下記の内容でiniファイルを作成

1
2
dns_cloudflare_email = xxxxx@example.com
dns_cloudflare_api_key = xxxxxxxxxxxxxxxxxxxxxxxxxx

今回の例では、このファイルを/etc/cloudflare/cloudflare.iniに保存します。ファイルパーミッションは600にしましょう。

更新コマンド

更新とはいうものの、ワイルドカード証明書は更新コマンドがないので、毎回新規で取り直します。コマンドを実行する側は特に意識することはないです。

1
2
3
4
5
6
7
8
9
10
docker run -it --rm \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
-v "/etc/cloudflare:/etc/cloudflare" \
--dns=8.8.8.8 \
certbot/dns-cloudflare:latest certonly \
--domains *.hanhans.net \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini \
--dns-cloudflare-propagation-seconds 50
コマンド解説
  • 2〜3行目
    ローカルに証明書を保存するためのディレクトリ共有
  • 4行目
    ローカルに配置したcloudflare.iniをcertbotに読み取らせるためのディレクトリ共有
  • 5行目
    certbotがDNS認証を行う際に使うDNSサーバーを指定
  • 6行目
    実行するイメージ名の指定と実行コマンド
  • 7行目
    証明書を取得するドメイン名
  • 8行目
    cloudflareプラグインを利用することをオプションで明示。
  • 9行目
    4行目で共有した設定ファイルを指定。
  • 10行目
    DNS設定後に反映待ちを行うタイムアウト時間設定。

まとめ

DNSにCloudflareを使っていることが条件にはなりますが、とてもお手軽で便利です。Let’s Encryptを使っているなら、このためだけにCloudflareに移籍してもいいぐらい楽ちん。