Let's Encrypt で DNS 認証を使って証明書を発行する

Let's Encrypt で証明書を取得する際は DNS に TXT レコードを書いて認証させることも可能です。 アプリケーションを Node.js でホストしており、certbot に DocumentRoot に書き込みさせ、Let's Encrypt で認証させるのが難しい… と言ったケースでは DNS 認証が便利です。 今回は DNS 認証のやり方をメモしておきます。

まず、certbot-auto をインストールします。

1
2
curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
chmod 700 /usr/bin/certbot-auto

certbot-auto を実行します。 email には証明書の有効期限が近づいてきたときにリマインドするメールアドレス、domain には証明したい FQDN を指定します。 HTTP 認証の場合は SAN(※ 複数の CommonName を証明する方式)が利用出来、domain を複数指定出来るのですが、DNS 認証の場合は 1 ドメインごとに certbot-auto を実行する必要があるようです。 尚、Let's Encrypt は Amazon Linux を正式にサポートしていませんが、debug オプションを指定すれば実行することは可能です。

1
2
3
4
5
6
7
8
certbot-auto certonly \
  --debug \
  --manual \
  --email mail@example.com \
  --agree-tos \
  --manual-public-ip-logging-ok \
  --preferred-challenges dns \
  --domain FQDN

上記コマンドを実行すると DNS 認証を行う際に登録する TXT レコードと値が表示され、certbot-auto が一時停止します。 DNS の該当ゾーン上に指定されたレコードを作成します。 レコードの作成が完了したら、Linux の CLI に戻り、certbot-auto を継続します。 Let's Encrypt 側で該当の TXT レコードを上手く読み取れたら /etc/letsencrypt 配下に証明書や鍵が発行されているはずです。