1. はじめに
Let’s Encrypt を用いて複数のホスト名に対して証明書を発行する場合、1つの証明書にまとめてしまうこともできますが、ホスト名毎に証明書を分けて発行しておくと便利に運用できます。
例えば、複数のホスト名を1つの証明書で発行すると、証明書を見られたときに別のホスト名が分かってしまいます。また、証明書ファイルが漏えいした場合も、影響範囲を最小限に抑えることができます。
2. Let’s Encrypt でホスト名別に証明書を発行する
証明書の発行
Let’s Encrypt でホスト名別に証明書を発行・更新する場合の手順は以下になります。
- ホスト名毎に
certbot
コマンドを実行して証明書を発行する - 期限を延長するために証明書を更新するには、
--cert-name
オプションに証明書を1つ指定してcertbot renew
コマンドを実行します。つまり、ホスト名毎に別にこのコマンドを実行することになります。
証明書毎に certbot
コマンドを実行して発行を行う際には、ホスト名によって(つまりコマンド別に)異なるオプション(例えば、チャレンジが異なるなど)を指定していても問題ありません。
証明書の更新
証明書を更新するには certbot renew
コマンドが使えますが、ホスト名毎に別に実行する必要があります。その際には --cert-name
オプションで証明書の名前を指定します。
証明書の名前は以下のコマンドを実行すると表示されます。
sudo certbot certificates
このコマンドの実行結果の例を示します。
赤枠で囲った部分に、証明書の名前が表示されています。
Linux サーバーの cron を使って毎月更新するのであれば、例えば /etc/crond.d/letsencrypt
ファイルを生成し、以下を記述します。
# 毎月1日の1時に実行する
0 1 1 * * root /usr/bin/certbot renew \
--cert-name foo.example.jp \
--pre-hook "systemctl stop httpd.service" \
--post-hook "systemctl start httpd.service"
# 毎月2日の1時に実行する
0 1 2 * * root /usr/bin/certbot renew \
--cert-name bar.example.jp \
--pre-hook "systemctl stop httpd.service" \
--post-hook "systemctl start httpd.service"
# 毎月3日の1時に実行する
0 1 3 * * root /usr/bin/certbot renew \
--cert-name baz.example.jp \
--pre-hook "systemctl stop httpd.service" \
--post-hook "systemctl start httpd.service"