Proxmox で Let’s Encrypt から証明書を取得する方法としては HTTP-01 チャレンジが簡単かと思う。でも何らかの事情で外部から PVE の 80 番ポートに到達できないときは、DNS-01 チャレンジも可能。MyDNS.jp はそのための API を提供しているから、テスト環境の PVE クラスタで試してみた。
SSL 証明書を PVE(ホスト)に置くから当然だけど、前提条件として、リバースプロキシで SNI(Server Name Indication)を運用、外部のクライアントから LAN 内の PVE まで SSL 通信できる必要がある。

多くのサブドメイン用にワイルドカード証明書を取得する話とは別です。
MyDNS 登録情報の確認
PVE で challenge プラグイン の追加に必要な次の MyDNS の情報を確認しておく。
- MYDNSJP_MasterID=mydns999999
- MYDNSJP_Password=AaAaAaAa123
challenge プラグインの追加
管理画面のデータセンターの「ACME」から「追加」をクリックして、必要な情報を入力する。
DNS API はあらかじめ用意されているものから選択する。
API データはMyDNS 登録情報で確認したものを入力する。



各ノードで ACME を設定する
管理画面の対象ノードの「証明書」で設定する。画像は HTTP-01 チャレンジで設定、証明書取得済みの状態。
ドメインに取得済みの pve1.jisaba.life があるから編集をクリック。

ドメインの登録画面が表示されるから、challenge タイプは DNS に変更、プラグインは作成済みのプラグイン(Test-MyDNS)を選択、ドメインは表示されているホスト名(pve1)+ドメインのままでOK。

ドメインは新しくなったものの、まだ古い証明書のままなので見た目は何も変わってない。

「order certificates NOW」をクリックして、証明書を更新する。ダイアログ画面の最後が TASK OK なら問題なく、新しい証明書の取得に成功している。

無事、有効開始日が今日(2022-05-22)になっている。
それぞれのノードで同じように設定、新しい証明書を取得する。

nginx 設定変更
リバースプロキシの HTTP-01 チャレンジ用の設定ファイルは不要になったから、/etc/nginx/sites-enabled/ と /etc/nginx/sites-available/ にある関係の conf ファイルを削除して nginx を再起動する。
終わりに
今回は DNS-01 チャレンジによる証明書の取得・更新の設定方法を確認することが目的なので、ホスト(pve1.jisaba.life)と CT(jisaba.life)を一つのワイルドカード証明書で何とかしようという訳じゃない。

PVE(ホスト)と各サーバー(VM、CT)をすべて DNS-01 チャレンジにすれば nginx の設定を省略できる(80 番ポートを閉じることができる)のはメリット。
例えば沢山の Web Server があってサブドメインも多数でワイルドカード証明書を使用する必要がある場合、PVE と各サーバーを別のドメインで運用することにして、各サーバー用のワイルドカード証明書を取得するのが現実的かな。
参考

コメント