スズハドットコム

IT関連や3Dプリンタの記事、たまに生活のメモを書いていきます。

Raspberry Pi + nginx + certbot でSSL その3(ワイルドカード証明書編)

前の記事ではサブドメインまで決め打ちの証明書を作りました。 suzu-ha.com

これをワイルドカード証明書にしてみます。
*.<ドメイン> と <ドメイン> に対して有効な証明書を作ります。
(ドメインがexample.comなら、「*.example.com」「example.com」に対して有効な証明書です。)

証明書発行コマンドです。
sudo certbot から --agree-tos までで1つのコマンドです。
長いので \ で折り返しています。

myuser@myhost:~ $ sudo certbot certonly --manual \
--preferred-challenges dns \
-d *.<証明書発行対象のドメイン> -d <証明書発行対象のドメイン> \
-m <メールアドレス> --agree-tos

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Requesting a certificate for *.example.com and example.com
Performing the following challenges:
dns-01 challenge for example.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

XXXX...................................XXXX

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

ここまで来たら、指示どおりDNSサーバにTXTレコードを作ります。

ホスト名 TYPE VALUE
_acme-challenge.<証明書発行対象のドメイン> TXT XXXX...................................XXXX

設定後反映されるまでタイムラグがあるので、別ウインドウあるいは別PCから確認しましょう。
digコマンドを使う場合は以下のとおり。設定したVALUEが表示されたらOKです。

myuser@myhost:~ $ dig -t txt _acme-challenge.<証明書発行対象のドメイン>

(中略)
;; ANSWER SECTION:
_acme-challenge.example.com. 3600 IN TXT   "XXXX...................................XXXX"

certbotコマンドを実行しているウインドウが「Press Enter to Continue」で止まっているはずですので、Enterキーを押して先に進めます。

Press Enter to Continue
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your certificate will expire on 2023-04-14. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

nginxのサイト設定ファイルを編集、nginxを再起動します。前の記事と同様なので省略します。

証明書の更新ですが、ワイルドカード証明書の場合はDNS認証(TXTレコードを仕込む)が必要なため自動更新は難しいです。
certbotコマンドのDNSプラグインが提供されていれば自動更新できるかもしれません。
User Guide — Certbot 2.9.0 documentation

うちの場合は、自動更新はあきらめて3か月に1回手動更新することにしました。
手動更新の場合は、証明書発行と同じコマンドでOKです。