【vSphere7.0u2】マシンSSL証明書だけ更新していけば問題ないのか?

どうも、Tです。

vSphere7を運用にするにあたって、マシンSSL証明書だけ更新し続ければ大丈夫なのか?と情報がどこにもなく気になったので試してみました。まぁおそらくマシンSSL証明書だけ更新してもダメですが、確認のため・・・・備忘録です。

ここでの結論

  • マシンSSL証明書だけ更新してもwcp証明書が有効期限を過ぎるので問題が残る
  • ホストのメンテナスモード操作が行えなくなる
  • vCLSがEAMとwcpで管理されているため、wcp証明書が切れいている状態で正常動作しているのかわからない
  • 証明書ステータスエラーが表示され続ける

結局のところ、マシンSSL証明書とソリューションユーザー証明書(wcp証明書)の両方とも更新しないといけないわけですが、困りものです・・・・。

2021年10月21日追記

vSphere vCenter 7.0.3のデプロイ直後の証明書期限
どうも、Tです。 「vcsa:7.0 Update3 18700403」をインストールした直後のデフォルトの証明書期限を失念し...

vCenter7.0Update3でマシンSSL証明書以外の証明書有効期限が10年になりました。

そのため、マシンSSL証明書だけ更新していけば問題ないとの結論にいきつきました。

やりたいこと

マシンSSL証明書だけ更新し続けてvSphere基盤は動き続けてくれるのか確認していきます。

以下の手順で確認していきます。

  • 現在(2021年8月11日)時点の証明書の有効期限を確認する
  • マシン証明書有効期限前に更新する
  • 元のマシン証明書有効期限経過を確認する

なぜ、こんな確認を?

前回の確認かもわかるようにマシンSSL証明が切れるとvCenterサービスが使えなくなります。

【vSphere7.0u2】証明書の有効期限はどうなったのか。マシンSSL証明書が切れるとどうなるか。
どうも、Tです。 過去にvSphereの証明書問題で有効期限を調べてまとめました。vSphere7はどうなるのか気になったので...

そして、ソリューションユーザー証明書のwcpも有効期限が2年です。

それじゃ、マシンSSL証明書とソリューションユーザー証明書が切れる前に下記のような手順を実施すればいいのかというと、ソリューションユーザー証明書は、関連するコンポーネント(VDI、バックアップ、NSXなどなど)が多いので、基盤全体を考えながら2年おきに証明書の入れ替えなんてやってられるかとなります。

【vSphere7.0u2】マシンSSL証明書が切れた後にvCenterを直す方法(すべての証明書の再生成:オプション8)
どうも、Tです。 vSphere7の証明書周りを調べてみて、マシンSSL証明書が切れるとvCenter関連のサービスが起動しな...

それじゃ、どうするかと考えると下記の2通りにが思い浮かびます。

  1. マシンSSL証明書だけ2年おきに更新する(簡単)
  2. すべての証明書を基盤のリプレースが発生するであろう5年以上(できれば10年など)のVMCA以外のカスタム証明書に置き換える。

で、悩ましいのが2の方法の場合VMwareの推奨から外れます。

VMwareの推奨としては、下記の2つになっています。

  1. VMCAのデフォルト証明書で管理する
  2. マシンSSL証明書だけカスタム証明書、ソリューションユーザー証明書はVMCAのデフォルト証明書で管理する(ハイブリッドモード)
https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.authentication.doc/GUID-779A011D-B2DD-49BE-B0B9-6D73ECF99864.html#GUID-779A011D-B2DD-49BE-B0B9-6D73ECF99864

ハイブリッドモードの利用は、比較的昔(2017年ごろ)から提唱されています。

https://blogs.vmware.com/vsphere/2017/01/walkthrough-hybrid-ssl-certificate-replacement.html

vSphere7でも明確に推奨されています。

vSphere 7 - Certificate Management
vSphere 7 makes evolutionary improvements to the way certificates are managed, and vSphere Admins who use hybrid mode continue to be the big winners.

vSphere7からは、vSphere Cleintの画面からソリューションユーザー証明書関連を操作できなくなったことからも更にユーザー側には触らせない意気込みを感じます。

しかしここで、ふと疑問が浮かびます。

ハイブリッドモードでも、wcpの証明書は2年だよね?

wcpは、vSphere with Tanzuしか使ってないって言ってたのに、vCLSも関与してるよね?

STS証明書の10年がいきなり2年になるなど告知なしの変更で、ここ数年バタバタしてましたが、vSphere7からSTS署名証明書も10年になり一旦これからどうすべきか確認したいと考えました。

環境

下記の記事で利用した検証環境と同じ構成です。

【vSphere7.0u2】証明書の有効期限はどうなったのか。マシンSSL証明書が切れるとどうなるか。
どうも、Tです。 過去にvSphereの証明書問題で有効期限を調べてまとめました。vSphere7はどうなるのか気になったので...
  • vCenterServer:7.0.2 17958471
  • vSphere ESXi: 7.0.2 17867351

現在(2021年8月11日)時点の証明書の有効期限を確認する

証明書期限はおおむね下記のようになっています。

  • マシンSSL証明書:2023年8月
  • wcp:2023年8月
  • その他の証明書:2031年8月

「証明書」->「証明書の管理」をクリックします。

vcsaへログインして、shellモードで下記コマンドを実行します。

下記コマンドの詳細は、下記KBを参照してください。

https://kb.vmware.com/s/article/2015600
for i in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do echo STORE $i; /usr/lib/vmware-vm

マシン証明書有効期限前に更新する

証明書期限の30日前から証明書のアラートが発行されるようになります。

Set the Threshold for vCenter Certificate Expiration Warnings
vCenter Server monitors all certificates in the VMware Endpoint Certificate Store (VECS) and issues an alarm when a certificate is 30 days or less from its expi...

検証環境を証明書期限の約30日前の2023年7月11日にしてvSphere環境を起動します。

証明書のステータスがトリガーされました。(マシンSSL証明書の有効期限が30日以内のため)

マシンSSL証明書を更新します。マシンSSL証明書はvSphere Clientから

https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.authentication.doc/GUID-B37C5887-04AD-4AC7-91C3-178935852719.html

ホームメニューから「管理」をクリックします。

「証明書」->「証明書の管理」->「マシンSSL証明書」->「アクセション」->「更新」をクリックします。

更新画面で最大の「730日」を入力して「更新」をクリックします。

vCenterサービスの再起動が自動的に開始されます。時間をおいて再度ログインします。

有効期限が2025年7月まで伸びました。(更新した日から730日)

コマンドからも確認します。マシンSSL証明書が伸びていることが確認できます。wcpについては元の2023年8月のままです。

for i in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do echo STORE $i; /usr/lib/vmware-vmafd/bin/vecs-cli entry list --store $i --text | egrep "Alias|Not After"; done

元のマシン証明書有効期限経過を確認する(メンテナスモードで起動)

元々の有効期限以降の2023年8月17日(元の有効期限:2023年8月10日)にしてvSphere環境を起動します。

「証明書のステータス」エラーが表示されますが、起動はしました。

さて、ここから問題が勃発しまくったので、記録として残しておきます。

ホストのメンテナスモード操作が失敗する

メンテナスモードを解除すると「操作に失敗しました。」が表示されメンテナンスモードを解除できません。

今回は、大きな未来時間に移動する必要があるので、検証環境をすべて停止→未来時間に設定して起動という方法で行っています。

vcsaが所属するホストは、vcsaを停止後にメンテナスモードにしていますが、他のホストはvcsaを停止する前にメンテナスモードにしているので、起動時はメンテナスモードを解除する必要がありました。

タスクの状況を見ると、下記の内容で失敗していました。

ノードで名前空間のメンテナンス モードの終了に失敗したため、ホストのメンテナンス モードを終了できません

The operation is not allowed in the current state. Host cannot exit maintenance mode because it failed to exit Namespaces maintenance mode on the node.

メンテナスモード解除時の「/var/log/vmware/wcp/wcpsvc.log」を見ると下記のエラーがでています。内容からwcp証明書が関連してそうなのは間違いなさそうです。

2023-08-17T13:11:31.375Z info wcp [auth/session.go:219] Session not found
2023-08-17T13:11:31.376Z error wcp [auth/handlers.go:161] Session not found.
2023-08-17T13:11:31.628Z debug wcp [ssolib/sts.go:87] [opID=hok-auth-handler] Getting HOK signer; store: wcp, alias: wcp
2023-08-17T13:11:31.759Z error wcp [ssolib/sts.go:122] [opID=hok-auth-handler] STS Issue HOK request failed; err: ns0:FailedAuthentication: Invalid credentials
2023-08-17T13:11:31.759Z error wcp [tes/client.go:78] [opID=hok-auth-handler] Request to TES failed; token: '<saml2:Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ~長いので割愛~

証明書とは関係ありませんでしたが、vCenter Server 7.0.0cの不具合情報にヒントがありました。

vCenter Server 7.0.0c で CPU 使用率が高騰する | kurokobo.com
VMware vCenter 7.0.0c high CPU usage
Update: After an upgrade to vCenter Server 7.0.0c, you see high CPU usage. Patch for VMware vCenter Server Appliance 7.0.0d After you upgrade your vCenter Serve...

wcp(Workload Control Panel)のサービスを停止しているとメンテナスモードの操作が行えないとのことです。

vcsaの管理画面を見るとwcpは正常に起動しているように見えます。

「vmon-cli -s wcp」でステータスをみても「HEALTHY」と正常です。

ここからは推測ですが、wcpサービスは正常に起動しているものの何かしらの処理が実施された際の内部通信に証明書が使われているが、証明書期限が切れてしまっているためにエラーとなる。と解釈しました。

ここで手詰まりです。未解決です。

ホストからメンテナスモードを解除すればよいのでは?

vcsaから解除できないから、ホストから直接解除すればいいのでは?と思いHost Clientからメンテナスモードを解除してみます。

メンテナンスモードは解除できました。

しかしvcsaを見るとやはりエラーがでます。ここで、ホストから見るとメンテナスモードは解除されているのに、vcsaからはメンテナンスモードであるというチグハグな環境になります。

Host Clientから仮想マシンを起動しています。

仮想マシンが起動したものの仮想マシンの時刻とホストの時刻が多きずれました。仮想マシンは想定する2年後の時刻が取得されており「お前、その情報どっから持ってきた?」となります。

仮想マシンはIP設定なしのスタンドアローンで動いているので、BIOS時刻(ホストの時刻)で起動すると思ったのですが、そもそも未来時刻という本来ありえない環境で検証しているのでとりあえず無視します。

vcsaから見ると、ホストはメンテナスモードなのに仮想マシンは起動しているおかしな状況になります。仮想コンソールは接続しようとするとエラーになります。

この状態でも、vcsaから仮想マシンのシャットダウン命令は発行できました。

と、仮想マシンを起動することはできるものの正常に動いているのか?となると信頼を置ける状態ではなくりました。

vCLSは正常に起動しているように見える・・・が。

Retreatモードを有効化して、vCLSをデプロイすると起動しているホスト上では正常にデプロイが行えました。

一見正常に動いているようにも見えますが、下記の情報からvCLSはEAMとwcp両方で管理されています。なので、wcpの証明書が消えれている状態では本当に正常な状態か判断できません。

https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.vcenterhost.doc/GUID-F589C01D-8FF5-4D44-A28C-7326C63BBCC1.html

電源状態を含む vCLS 仮想マシンの健全性は、EAM および WCP サービスによって管理されます。

vSphere Cluster Services VMs are powered off/on every day due to authentication failure

This issue occurs because of a race between different services(WCP and EAM) trying to power on the vCLS VMs and interfering with the password reconfiguration of these VMs.

証明書ステータスエラーは出力され続ける

BACKUP_STOREに更新前のマシンSSL証明書が残っているので、削除します。

/usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store BACKUP_STORE --alias <Alias Name> -y

これで残っているのはwcp証明書のみですが、これは現在も有効なストアにあるので削除できません。

/usr/lib/vmware-vmafd/bin/vecs-cli entry list --store $i --text | egrep "Alias|Not After"; done

この状態でvcsaを再起動してみると証明書のステータスエラーは表示され続けます。

下記にあるようにVECSのすべての証明書を監視しているため、今回は残っているwcp証明書がひっかかりエラーがでています。

Set the Threshold for vCenter Certificate Expiration Warnings
vCenter Server monitors all certificates in the VMware Endpoint Certificate Store (VECS) and issues an alarm when a certificate is 30 days or less from its expi...

vCenter Server monitors all certificates in the VMware Endpoint Certificate Store (VECS) and issues an alarm when a certificate is 30 days or less from its expiration.

サービスに影響がないとしても、エラーが出続けるのでwcpの有効期限を放置することは得策ではないですね。

元のマシン証明書有効期限経過を確認する(メンテナスモードなしで起動)

先ほどは、ホストをメンテナスモード状態で起動しました。今回は未来時間にする前に、ホストをメンテナスモードにせずにシャットダウンして起動してみます。

元々の有効期限以降の2023年8月17日(元の有効期限:2023年8月10日)にしてvSphere環境を起動します。

証明書のステータスエラーはできますが、起動はしました。メンテナスモードを解除状態で起動できています。

メンテナスモードにしてみます。ステータスが2%程度に下記のメッセージが表示されて失敗扱いです。ステータス自体は2%からずっとこのままなので手動でキャンセルしました。

Error: com.vmware.vapi.std.errors.unauthenticated Messages: vapi.security.authentication.invalid<Unable to authenticate user> のため、名前空間メンテナンス モードへの切り替えに失敗しました。2 を再試行してください

なお。「再試行」の数が時間経過とともにインクリメントされていきます。
Error: com.vmware.vapi.std.errors.unauthenticated Messages: vapi.security.authentication.invalid<Unable to authenticate user> のため、名前空間メンテナンス モードへの切り替えに失敗しました。4 を再試行してください/var/log/vmware/wcp/wcpsvc.logを眺めているとインクリメントされるたびに下記のエラーが出力されるので内部的にメンテナスモードを試行しようとしているようです。
2023-08-17T03:04:24.916Z error wcp [auth/handlers.go:161] Session not found.
2023-08-17T03:04:25.089Z debug wcp [ssolib/sts.go:87] [opID=hok-auth-handler] Getting HOK signer; store: wcp, alias: wcp
2023-08-17T03:04:25.321Z error wcp [ssolib/sts.go:122] [opID=hok-auth-handler] STS Issue HOK request failed; err: ns0:FailedAuthentication: Invalid credentials
2023-08-17T03:04:25.321Z error wcp [tes/client.go:78] [opID=hok-auth-handler] Request to TES failed; token:
Retreatモードを有効化して、vCLSをデプロイすると起動している3台のホスト上で正常にデプロイが行えました。しかし、これも前述の通りwcp証明書が切れている状態なので正常に動作しているかどうかの保証はありません。

ホストがメンテナンスモードではないため仮想マシンのパワーオンもでき、仮想コンソールも表示できました。やはり時刻がずれているので、これは検証で未来時間にする際などに何かしら影響を受けているのではないかと思います・・・・。

まとめ

最適解の見つからぬまま・・・はて、どうすればよいのか模索中です。