Menu

Let’s Encryptのワイルドカード証明書発行

無料SSL証明書のLet’s EncryptがACMEv2プロトコルでワイルドカード証明書発行に対応しました。

ACMEv1でも、サブドメインを羅列することで1枚の証明書に複数ドメインの証明を混載できましたが、具体的なサブドメインは発行時点で決まっている必要があります。

ワイルドカード発行にはDNS認証が必要

certbotクライアントの公式ドキュメントのDNS pluginsに”Doing domain validation in this way is the only way to obtain wildcard certificates from Let’s Encrypt.” と記載されているとおり、ワイルドカード証明書を発行するには、DNS上で認証する必要があります。

Let’s Encrypt証明書の有効期限は3ヶ月に限定されており、更新の自動化を考慮に入れると、certbotのDNSプラグインが対応しているネームサーバーの利用が前提となります。

Google Cloud DNSやAmazon Route53などが対象となっており、今回はCloud DNSで検証しました。(Cloud DNSへの移行手順は別記事参照)

certbotはv0.22以降を利用

ワイルドカード証明書取得には、DNSプラグインを利用できるcertbotが必要です。

CertbotのDockerhubリポジトリで各種dockerイメージが提供されています。
たとえばGoogle Cloud DNS用の場合、certbot/dns-googleを利用します。

certbotコマンド例は以下のようなものになります。

certbot certonly --dns-google --dns-google-credentials /path/to/service-account.json --non-interactive --force-renewal --agree-tos -m mail@example.com --server https://acme-v02.api.letsencrypt.org/directory -d example.com -d *.example.com

dns-googleプラグインにより–dns-googleオプションが利用可能になっています。
オプションの設定値は、プラグイン別リファレンスに掲載されています。

ACME認証の過程でDNSのtxtレコードを書き換える動作となるため、APIクレデンシャルの指定が必要になります。(Google Cloudのクレデンシャルについては、別記事参照)

証明書取得対象のドメインは-dオプションで指定でき、ベースドメインと*サブドメインの2種類指定しました。

また、certbot v0.22はACMEv1サーバーにアクセスするため、–serverオプションでACMEv2サーバーを指定しています。

certbot v0.23でACMEv2サーバーがデフォルト設定される予定となっており、いずれ–serverオプションは不要化します。

ワイルドカード証明書のメリット

ワイルドカード証明書を取得しておくことで、新規ドメイン追加の際の手間が1つ減ります。

また、Javascriptのアプリケーション開発では、有効な証明書を前提とする機能が増えてきており、実在するドメインと干渉しないサブドメインの証明書を取得できるのは便利です。