駄文。

プログラマーの日常でつまずいたこと・気づいたことなどの記録です

vCenterにLet's Encryptの証明書を適用する - その2

いいたいこと

  • Let's Encryptのルート証明書が2021年に切り替わった影響で、そのままの証明書はvCenterにうまく登録できない
  • Let's Encryptの証明書取得コマンドでオプションで追加されている--preferred-chainを指定することでvCenterで正しく認識できる証明書が取得できる
  • おそらく、ルート証明書も登録する必要がある
  • 2024年には、たぶんデフォルトで正しい証明書が作成されるかな

記事

vCenterにLet's Encryptの証明書を適用する - その1*1で、証明書の設定方法についてまとめてみた。

ただ、この手順で正しいと確認するためには紆余曲折があったのでちょっと書いていく。

Let's Encryptで取得した証明書のどのファイルをどのパラメタに設定したらいいのかすら最初は謎だったのだが、ネットで調べていくうちになんとなくわかってきた。 が、しかし、世の中そんなに甘くない。

どうやってみてもパラメタエラーになって登録できないのだ。

で、さらにサイトをあさってみると Replace Default vCenter Certificate with a Free Let’s Encrypt SSL*2に書いてあった。 証明書のルートにLet's Encryptの新しいルートISRG Root X1を設定しておくとうまくいくらしい。

どうもLet's Encryptのルート証明書が2021年に切り替わったのだが、その際のドタバタの影響でうまくいかないらしい。

Let's Encryptの証明書取得ツールのデフォルトでは以下のような証明書チェーンが発行されるのでうまくいかない。

  • サイトの証明書 - 中間証明書(Let's Encrypt R3) - 中間証明書(ISRG Root X1) - ルート証明書(DST Root CA X3)

でサイトの説明では、証明書チェーン以下に修正するとうまくいくと説明があった。

  • サイトの証明書 - 中間証明書(Let's Encrypt R3) - ルート証明書(ISRG Root X1)

具体的には、実際にfullchain.pem / chain.pemで指定されている中間証明書(ISRG Root X1)ルート証明書(ISRG Root X1)に変更して書き換えたものを登録すればよいらしい。

試してみると確かにうまくいく。

深掘り

ただ、これだと毎回証明書を更新するときに手作業が入るので好ましくないぞと思ってよく調べると、Let's Encryptの証明書取得ツール( Certbot, Legoなど)にはこの証明書チェーンを制御するオプションが 追加されていることがわかった。

具体的には、--preferred-chain "ISRG Root X1"コマンドのオプションに追加することでサイトの証明書 - 中間証明書(Let's Encrypt R3) - ルート証明書(ISRG Root X1)のチェーンの証明書が発行される。 ただ、先に説明した通り、コマンドが発行する証明書は中間証明書までなので、fullchain.pemはサイトの証明書 - 中間証明書(Let's Encrypt R3)、chain.pemは中間証明書(Let's Encrypt R3)の構成のものに なる。

となるとルート証明書(ISRG Root X1)がないので困るが、これはvCenter側の証明書管理で信頼されたルート証明書を登録する手続きで事前に登録することで解決できるはず

(というのも、さきにルート証明書ルート証明書(ISRG Root X1)を つけた証明書で登録作業をしてしまったので、そもそもvCenterの信頼されたルート証明書ルート証明書(ISRG Root X1)が入っていなかったどうかを検証することができない状態になってしまったので 推測になっています。)

まとめ

で、最後に整理するとこんな感じ手順でやればよい。

1. Let's Encrypt証明書取得ツールで オプション --preferred-chain "ISRG Root X1"を追加して証明書の取得・更新を行う
2. vCenterに ルート証明書(ISRG Root X1)を信頼されたルート証明書として登録
  1. vCenter - 管理 - 証明書の管理 - 信頼できる証明書

    追加を選択

  2. ルート証明書(ISRG Root X1)をファイルに保存し、追加するルート証明書として保存したファイルのパスを指定する。

    1. https://letsencrypt.org/certs/isrgrootx1.pem.txt:urlをダウンロードしてファイルに保存
    2. ダイアログの参照するファイルに保存したパスを指定
    3. vCenter Server ホストへのルート証明書のプッシュの開始もチェックしておく(多分したほうが良い気がするが効果がよくわかっていない)
  3. 追加を選択すると登録される

3. vCenterにLet's Encryptの証明書を適用する その1で示した3つのいずれかでサイト証明書を登録する

今後

さて、手順は確認できたいのであとは継続的に更新できるツールを作ればおしまい。

とか書いているが、こんなツール*3もあるらしい。

まぁ、欲しいものは大抵別の人が作っているが、あえて車輪の再開発上等ってことでやっていく。

参考情報