どうも、Tです。
vSphere7を運用にするにあたって、マシンSSL証明書だけ更新し続ければ大丈夫なのか?と情報がどこにもなく気になったので試してみました。まぁおそらくマシンSSL証明書だけ更新してもダメですが、確認のため・・・・備忘録です。
目次
ここでの結論
- マシンSSL証明書だけ更新してもwcp証明書が有効期限を過ぎるので問題が残る
- ホストのメンテナスモード操作が行えなくなる
- vCLSがEAMとwcpで管理されているため、wcp証明書が切れいている状態で正常動作しているのかわからない
- 証明書ステータスエラーが表示され続ける
結局のところ、マシンSSL証明書とソリューションユーザー証明書(wcp証明書)の両方とも更新しないといけないわけですが、困りものです・・・・。
2021年10月21日追記
vCenter7.0Update3でマシンSSL証明書以外の証明書有効期限が10年になりました。
そのため、マシンSSL証明書だけ更新していけば問題ないとの結論にいきつきました。
やりたいこと
マシンSSL証明書だけ更新し続けてvSphere基盤は動き続けてくれるのか確認していきます。
以下の手順で確認していきます。
- 現在(2021年8月11日)時点の証明書の有効期限を確認する
- マシン証明書有効期限前に更新する
- 元のマシン証明書有効期限経過を確認する
なぜ、こんな確認を?
前回の確認かもわかるようにマシンSSL証明が切れるとvCenterサービスが使えなくなります。
そして、ソリューションユーザー証明書のwcpも有効期限が2年です。
それじゃ、マシンSSL証明書とソリューションユーザー証明書が切れる前に下記のような手順を実施すればいいのかというと、ソリューションユーザー証明書は、関連するコンポーネント(VDI、バックアップ、NSXなどなど)が多いので、基盤全体を考えながら2年おきに証明書の入れ替えなんてやってられるかとなります。
それじゃ、どうするかと考えると下記の2通りにが思い浮かびます。
- マシンSSL証明書だけ2年おきに更新する(簡単)
- すべての証明書を基盤のリプレースが発生するであろう5年以上(できれば10年など)のVMCA以外のカスタム証明書に置き換える。
で、悩ましいのが2の方法の場合VMwareの推奨から外れます。
VMwareの推奨としては、下記の2つになっています。
- VMCAのデフォルト証明書で管理する
- マシンSSL証明書だけカスタム証明書、ソリューションユーザー証明書はVMCAのデフォルト証明書で管理する(ハイブリッドモード)
ハイブリッドモードの利用は、比較的昔(2017年ごろ)から提唱されています。
vSphere7でも明確に推奨されています。
vSphere7からは、vSphere Cleintの画面からソリューションユーザー証明書関連を操作できなくなったことからも更にユーザー側には触らせない意気込みを感じます。
しかしここで、ふと疑問が浮かびます。
ハイブリッドモードでも、wcpの証明書は2年だよね?
wcpは、vSphere with Tanzuしか使ってないって言ってたのに、vCLSも関与してるよね?
STS証明書の10年がいきなり2年になるなど告知なしの変更で、ここ数年バタバタしてましたが、vSphere7からSTS署名証明書も10年になり一旦これからどうすべきか確認したいと考えました。
環境
下記の記事で利用した検証環境と同じ構成です。
- 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を参照してください。
for i in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do echo STORE $i; /usr/lib/vmware-vm
マシン証明書有効期限前に更新する
証明書期限の30日前から証明書のアラートが発行されるようになります。
検証環境を証明書期限の約30日前の2023年7月11日にしてvSphere環境を起動します。
証明書のステータスがトリガーされました。(マシンSSL証明書の有効期限が30日以内のため)
マシンSSL証明書を更新します。マシンSSL証明書はvSphere Clientから
ホームメニューから「管理」をクリックします。
「証明書」->「証明書の管理」->「マシン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環境を起動します。
「証明書のステータス」エラーが表示されますが、起動はしました。
さて、ここから問題が勃発しまくったので、記録として残しておきます。
ホストのメンテナスモード操作が失敗する
メンテナスモードを解除すると「操作に失敗しました。」が表示されメンテナンスモードを解除できません。
今回は、大きな未来時間に移動する必要があるので、検証環境をすべて停止→未来時間に設定して起動という方法で行っています。
タスクの状況を見ると、下記の内容で失敗していました。
ノードで名前空間のメンテナンス モードの終了に失敗したため、ホストのメンテナンス モードを終了できません
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の不具合情報にヒントがありました。
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の証明書が消えれている状態では本当に正常な状態か判断できません。
電源状態を含む vCLS 仮想マシンの健全性は、EAM および WCP サービスによって管理されます。
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証明書がひっかかりエラーがでています。
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:
ホストがメンテナンスモードではないため仮想マシンのパワーオンもでき、仮想コンソールも表示できました。やはり時刻がずれているので、これは検証で未来時間にする際などに何かしら影響を受けているのではないかと思います・・・・。
まとめ
最適解の見つからぬまま・・・はて、どうすればよいのか模索中です。