Web

Let’s Encrypt: ホスト名毎に証明書を分けて発行する

投稿日:2020年6月30日 更新日:

1. はじめに

Let’s Encrypt を用いて複数のホスト名に対して証明書を発行する場合、1つの証明書にまとめてしまうこともできますが、ホスト名毎に証明書を分けて発行しておくと便利に運用できます。

例えば、複数のホスト名を1つの証明書で発行すると、証明書を見られたときに別のホスト名が分かってしまいます。また、証明書ファイルが漏えいした場合も、影響範囲を最小限に抑えることができます。

2. Let’s Encrypt でホスト名別に証明書を発行する

証明書の発行

Let’s Encrypt でホスト名別に証明書を発行・更新する場合の手順は以下になります。

  1. ホスト名毎に certbot コマンドを実行して証明書を発行する
  2. 期限を延長するために証明書を更新するには、--cert-name オプションに証明書を1つ指定して certbot renew コマンドを実行します。つまり、ホスト名毎に別にこのコマンドを実行することになります。

証明書毎に certbot コマンドを実行して発行を行う際には、ホスト名によって(つまりコマンド別に)異なるオプション(例えば、チャレンジが異なるなど)を指定していても問題ありません。

証明書の更新

証明書を更新するには certbot renew コマンドが使えますが、ホスト名毎に別に実行する必要があります。その際には --cert-name オプションで証明書の名前を指定します。

証明書の名前は以下のコマンドを実行すると表示されます。

sudo certbot certificates

このコマンドの実行結果の例を示します。

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"

3. 参考

📂-Web

執筆者:labo


comment

メールアドレスが公開されることはありません。

関連記事

Web

【HTML】picture 要素について

目次1. <picture> 要素とは?2. 仕様3. <source> 要素4. 利用例5. 実際に使用された画像がどれかを JavaScript で取得する6. 注意点7. …

Web

Webページを検証する各種サービス

Webページを検証する各種サービスを紹介します。

Chrome

ブックマークレットで画面上の色を取得する(Eye Dropper APIを利用)

画面上の色を取得するブックマークレットを紹介します。

Web

CSP と CORS の違い

CSP と CORS の違いをざっと確認するためのページです。

Web Security

SSLで使用する証明書運用の不便さ

上のどちらも、SSLの証明書が期限を過ぎてしまったことが原因で起きた問題のようです。 前者は詳しく見ていないので分かりませんが、後者はサーバー証明書ではなくデバイス側に保存されているクライアント証明書 …