Let’s Encryptでサブドメインのワイルドカード証明書の取得方法

ALL
スポンサーリンク
スポンサーリンク

はじめに

Let’s Encrypt で1枚の証明書で、*.test.example.com と *.subtest.test.example.com といった、ワイルドカード・サブドメインのワイルドカードを取得する方法です。

*.test.example.com のみといった、単体のワイルドカードでいい場合は、次の記事を参照してください。

Let’s Encryptでワイルドカード証明書の取得方法 – パソコン鳥のブログ

なお、前提条件として、ドメインの所有者としてDNSサーバを管理していることが必要です。
ワイルドカード証明書を自動で取得する仕組み(ACME)として、DNS-01 チャレンジを利用しますが、これには、ドメイン名の TXT レコードに特定の値を設定できることが必要だからです。

また、この設定を、certbot実行の際に自動的にできるように、Dynamic Update 機能を利用します。(このためのDNSサーバの設定方法は、本記事で説明しています)

本記事では例として、CentOS+bindで、ドメイン test.example.com の所有者の場合に、ワイルドカード証明書(*.test.example.com)と、サブドメインのワイルドカード証明書(*.subtest.test.example.com)を1枚で取得する方法を説明します。

以下の説明では、test.example.com 、subtest.test.example.com の箇所を、適宜みなさんのドメイン名に置きかえてください。

certbot インストール

Let’s Encryptでワイルドカード証明書の取得方法 の次の箇所の作業を実施してください。

・certbot インストール

Dynamic Update用の認証情報ファイルの用意

Let’s Encryptでワイルドカード証明書の取得方法 の次の箇所の作業を実施してください。

・Dynamic Update用の認証情報ファイルの用意

bindの設定

Let’s Encryptでワイルドカード証明書の取得方法 の次の箇所の作業を実施してください

・bindの設定

ここまでで、ワイルドカード(*.test.example.com)用の設定ができました。

続けて、サブドメインのワイルドカード(*.subtest.test.example.com)用の作業を実施します。

以降の説明では、subtest.test.example.comと ns.test.example.com の箇所を、適宜みなさんのドメイン名・ネームサーバに置きかえてください。

次の内容で、ファイル /var/named/chroot/var/named/dynamic/_acme-challenge.subtest.test.example.com.zone を作成します。

$TTL 600
@ IN SOA subtest.test.example.com. root.subtest.test.example.com. (
        2023051501      ; Serial
        1h              ; Reflesh
        15m             ; Retry
        30d             ; Expire
        1h              ; Neg. cache TTL
        )
        IN      NS      ns.test.example.com.

このファイルは、bindからも書き込みできるように、権限を設定しておきます。
(CentOS では bind のユーザは named なので、下記では named に書き込み権限を与えています)

chown root:named /var/named/chroot/var/named/dynamic/_acme-challenge.subtest.test.example.com.zone
chmod 775 /var/named/chroot/var/named/dynamic/_acme-challenge.subtest.test.example.com.zone

test.example.com の zoneファイルの末尾に次の内容を追加します。

_acme-challenge.subtest            IN      NS      ns.test.example.com.

named.conf内の test.example.com の zone設定箇所に続けて、次を追加してください。

zone "_acme-challenge.subtest.test.example.com" {
        type master;
        file "/var/named/dynamic/_acme-challenge.subtest.test.example.com.zone";
        check-names ignore;
        update-policy {
                grant certbot-key. name _acme-challenge.subtest.test.example.com. TXT;
        };
};

設定を反映させます。

systemctl restart named-chroot

テスト

ここまでの設定で問題ないかのテストを行います。

次を実行してください。

certbot certonly --dry-run --dns-rfc2136 --dns-rfc2136-credentials /var/named/chroot/etc/certbot/dns-rfc2136.ini -d '*.test.example.com' -d '*.subtest.test.example.com' 

問題無い場合は、出力の最後に
The dry run was successful.
と表示されます。

certbot実行

ACOEアカウントの作成

Let’s Encryptでワイルドカード証明書の取得方法 の次の箇所の作業を実施してください

・ACOEアカウントの作成

certbot実行でSSL証明書取得

以上で必要な設定は完了しました。

次を実行すると、証明書を取得できます。
/etc/letsencrypt/live/test.example.com/ 下に証明書が作られます。

-d でドメインを複数指定します。ここでは、*.test.example.com と *.subtest.test.example.com を指定しています。なお、一番最初のものがSSL証明書の CN フィールドにセットされます。

certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /var/named/chroot/etc/certbot/dns-rfc2136.ini -d '*.test.example.com' -d '*.subtest.test.example.com'

運用

Let’s Encrypt の証明書の有効期間は90日間なので、その期間が来る前に更新してください。
更新は次のコマンドを実行してください。

/usr/bin/certbot renew

コメント