【vSphere7.0u2】マシンSSL証明書が切れた後にvCenterを直す方法(すべての証明書の再生成:オプション8)

どうも、Tです。

vSphere7の証明書周りを調べてみて、マシンSSL証明書が切れるとvCenter関連のサービスが起動しなくなることを確認しました。その状態から回復させる方法を試したので備忘録です。

前回vSphere Certificate ManagerのOption4でを使って確認しましたので、今回はOption8を使用してどうなるか確認します。

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

ここでの結論

  • 証明期限切れから即時復旧であれば、この手順で復旧できる
  • 復旧後にvCLSの公式情報が2021年8月時点ではないためVMwareサポートへ確認が必要
  • ソリューションユーザー証明書が置き換わるため、周辺コンポーネント(VDI、バックアップ、NSXなどなど)別途対応が必要
  • ソリューションユーザー証明書が10年期限から2年期限に置き換わるのはいただけない

–2021年8月13日追記 ここから–

ちなみに、Option3.Replace Machine SSL certificate with VMCA CertificateでマシンSSL証明書のみを更新するとソリューションユーザー証明書は10年保持されますが、ソリューションユーザー証明書の1つであるwcp証明書が2年のままになります。

wcp証明書が切れいている場合も問題ができることを確認できているので、即時復旧を望む場合、Option8を利用するのがよいと思います。

【vSphere7.0u2】マシンSSL証明書だけ更新していけば問題ないのか?
どうも、Tです。 vSphere7を運用にするにあたって、マシンSSL証明書だけ更新し続ければ大丈夫なのか?と情報がどこにもなく気にな...

–2021年8月13日追記 ここまで–

やりたいこと

「【vSphere7.0u2】証明書の有効期限はどうなったのか。マシンSSL証明書が切れるとどうなるか。」でマシンSSL証明書が切れた状態で、正常に使えるようにするリカバリできるのか?を試します。

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

VMware認証局(VMCA)の証明書を使用して、マシンSSL証明書とソリューションユーザー証明書を再作成して置き換える方法です。

新しい自己署名 VMware 認証局の証明書を使用して vSphere 6.x/7.x の証明書を再生成する (2112283)

VMware Knowledge Base

この記事では、VMware Certificate Authority (VMCA) で新しい自己署名証明書を使用して vSphere 6.x/7.x の証明書を再生成する手順を説明します。

:このプロセスは、証明書の期限が切れたシナリオを迅速にリカバリするのに役立ちます。

なお、上記のKBを実行するにあたりSTS証明書の有効期限内である必要があります。

注: STS 証明書の有効期限が失効している場合、以下の手順での証明書の置き換えは失敗しロールバックされます。STS 証明書の有効期限を確認する KB を参照し、必要な場合は失効した STS 証明書を置換します。

下記のドキュメントを見つけたのでOption8を確認します。

https://kb.vmware.com/s/article/2097936?lang=ja

マシン SSL 証明書とソリューションユーザ証明書が期限切れの場合、証明書の置き換えにはオプション 8 (証明書のリセット)を使用してください。

環境

検証環境は、先ほど紹介した記事の続きになります。

  • vCenterServer:7.0.2 17958471
  • vSphere ESXi: 7.0.2 17867351

VMware 認証局(VMCA)の証明書から再作成(オプション8)

vcsaにSSH接続し、shellモードで下記コマンドを実行します。certificate-managerコマンドは、証明書周りを操作するためのツールになります。

/usr/lib/vmware-vmca/bin/certificate-manager

今回は、「8. Reset all Certificates 」を使用するため、画像に沿ってOptionに8を指定しSSOアカウントとパスワードを入力します。

この作業を始めて行うときはVMCAから発行される証明書定義に必要な項目を入力していきます。

Please configure certool.cfg with proper values before proceeding to next step.

Press Enter key to skip optional parameters or use Default value.

Enter proper value for 'Country' [Default value : US] :

Enter proper value for 'Name' [Default value : CA] :

Enter proper value for 'Organization' [Default value : VMware] :

Enter proper value for 'OrgUnit' [Default value : VMware Engineering] :

Enter proper value for 'State' [Default value : California] :

Enter proper value for 'Locality' [Default value : Palo Alto] :

Enter proper value for 'IPAddress' (Provide comma separated values for multiple IP addresses) [optional] :

Enter proper value for 'Email' [Default value : email@acme.com] :

Enter proper value for 'Hostname' (Provide comma separated values for multiple Hostname entries) [Enter valid Fully Qualified Domain Name(FQDN), For Example : example.domain.com] : testvcsa.testdev.lab

Enter proper value for VMCA 'Name' :testvcsa.testdev.lab

You are going to regenerate Root Certificate and all other certificates using VMCA
Continue operation : Option[Y/N] ? : Y

わかりにくいので下記に記載しました。注意点としては、「Hostname」と「VMCA ‘Name’」には、vcsaのFQDNを入力してください。ショートネームやIPアドレスは不可です。

「Continue operation : Option[Y/N] ? : Y」の実行後、下記のように処理が実施されるので待ちます。

「Status : 100% Completed [All tasks completed successfully]」で処理が完了します。サービスの再起動も行ってくれました。(vcsaの再起動がかかってるっぽい)

検証環境では30分弱ほどかかりました。非力な環境でしていますが、本番環境でも10分以上はかかりそうですので気長に待ちましょう。

先ほどFQNDで記載した「Hostname」と「VMCA ‘Name’」は、PNIDとマッチする必要があるものです。PNIDは、下記のコマンドで確認できました。

PNIDとホスト名があっていることを確認しておきましょう。

/usr/lib/vmware-vmafd/bin/vmafd-cli get-pnid --server-name localhost

証明書再作成後の確認

ログイン確認

ログインが行えるようになりました。証明書のステータスについては後述。

証明書確認(vSphere Clientから)

再生成で置き換えられたことがわかります。検証のため現在は未来時間2023年8月16日となっていますので、マシンSSL証明書は2年後の2025年8月になっています。

比較までに下記が検証している2021年8月10日時点の証明書の状態です。

証明書確認(vcsaコマンドラインから)

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

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月16日となっていますので、マシンSSL証明書とwcpは2年後の2025年8月になっています。

ここで誤算なのがもともと2031年まで有効なvpxdなどが再作成により2年の短い証明書で置き換えられています。これはよろしくない・・・・。

比較までに下記が検証している2021年8月10日時点の証明書の状態です。

その他問題

証明書エラーが消えないときの解決方法

証明書エラーが消えません。「緑にリセット」で手動で消してもvCenterを再起動すると表示されます。

証明書の置き換えの際に、VECS(VMware Endpoint 証明書ストア)にBACKUP_STOREが作成されバックアップ用の領域に期限切れの証明書があるためです。下記のコマンドを実行して、BACKUP_STOREから期限切れの証明書を削除しました。

有効期限の監視先ストアとコマンドの詳細は下記KBをご確認ください。

https://kb.vmware.com/s/article/68171
/usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store BACKUP_STORE --alias <Alias Name> -y

削除後に、vcsaを再起動すると表示されなくなりました。

vCLSが動かないときの解決方法

Retreatモードを有効にしてもvCLSがデプロイされませんでした。

クラスタで下記のエラーが表示されます。詳細をクリックすると下記KBが表示されます。

https://kb.vmware.com/s/article/79892

ここからは、vCLSに関連した公式情報がなかったため個人の見解になります。

/var/log/vmware/wcp/wcpsvc.logログを見ると下記のようなエラーが定期的に出力されています。

2023-08-16T06:11:20.985Z error wcp [clustersvc/monitor.go:215] [opID=vCLS] Failed to get EAM agencies: ServerFaultCode: EAM is still loading from database. Please try again later.
2023-08-16T06:11:20.985Z error wcp [clustersvc/monitor.go:113] [opID=vCLS] Unable to collect information for cluster agencies: ServerFaultCode: EAM is still loading from database. Please try again later.
2023-08-16T06:11:20.985Z error wcp [clustersvc/monitor.go:94] [opID=vCLS] EAM monitor encountered error: ServerFaultCode: EAM is still loading from database. Please try again later.
2023-08-16T06:11:21.002Z error wcp [eamlib/lister.go:86] [opID=EAMAgent] Failed to get EAM agencies. Err ServerFaultCode: EAM is still loading from database. Please try again later.
2023-08-16T06:11:21.002Z error wcp [informer/informer.go:129] [opID=EAMAgent] Failed to list EAMAgent. Err ServerFaultCode: EAM is still loading from database. Please try again later.

/var/log/vmware/eam/eam.logログを見ると下記のようなエラーが定期的に出力されています。

2023-08-16T06:13:33.225Z | ERROR | vlsi | DispatcherImpl.java | 450 | Internal server error during dispatch
com.vmware.vim.binding.eam.fault.EamServiceNotInitialized: EAM is still loading from database. Please try again later.
at

上記のエラーとvCLSと直接関連する公式情報は2021年8月時点ではありませんが、vCLSはwcpとeamで管理されているので問題が起こっていそうだなと調べると・・・

下記のナレッジがありました。ソリューションユーザー証明書が更新されたときにEAMの証明書が自動的に更新できないことが原因とのことです。

https://kb.vmware.com/s/article/80588

This issue is due to the certificate manager utility being unable to automatically update the EAM certificate when solution user certificates are updated. WCP requires EAM to be functional in order to start.

ということで、手順に従ってEAMの証明書を更新してきます。

ユーザー証明書とキーを取得します。

root@testvcsa [ / ]# mkdir /certificate
root@testvcsa [ / ]# /usr/lib/vmware-vmafd/bin/vecs-cli entry getcert --store vpxd-extension --alias vpxd-extension --output /certificate/vpxd-extension.crt
root@testvcsa [ / ]# /usr/lib/vmware-vmafd/bin/vecs-cli entry getkey --store vpxd-extension --alias vpxd-extension --output /certificate/vpxd-extension.key

EAMの証明書を更新します。vcsaのホスト名とSSOアカウントのドメイン名は適時読み替えてください。KBではvcsaホスト名をlocalhostですが、確実に失敗するのでFQDNを入れてください。

root@testvcsa [ / ]# python /usr/lib/vmware-vpx/scripts/updateExtensionCertInVC.py -e com.vmware.vim.eam -c /certificate/vpxd-extension.crt -k /certificate/vpxd-extension.key -s testvcsa.testdev.lab -u Administrator@vsphere.local

下記のような出力が得られます。

Password to connect to VC server for user="Administrator@vsphere.local":
2023-08-16T06:23:43.824Z Updating certificate for "com.vmware.vim.eam" extension
2023-08-16T06:23:44.581Z Successfully updated certificate for "com.vmware.vim.eam" extension
Traceback (most recent call last):
File "/usr/lib/vmware-vpx/scripts/updateExtensionCertInVC.py", line 175, in <module>
update_extension_cert_in_VC()
File "/usr/lib/vmware-vpx/scripts/updateExtensionCertInVC.py", line 163, in update_extension_cert_in_VC
sessionMgr = si.content.sessionManager
File "/usr/lib/vmware/site-packages/pyVmomi/VmomiSupport.py", line 577, in __call__
return self.f(*args, **kwargs)
File "/usr/lib/vmware/site-packages/pyVmomi/VmomiSupport.py", line 382, in _InvokeAccessor
return self._stub.InvokeAccessor(self, info)
File "/usr/lib/vmware/site-packages/pyVmomi/StubAdapterAccessorImpl.py", line 42, in InvokeAccessor
return self.InvokeMethod(mo, info, (prop, ))
File "/usr/lib/vmware/site-packages/pyVmomi/SoapAdapter.py", line 1525, in InvokeMethod
conn.request('POST', self.path, req, headers)
File "/usr/lib/python3.7/http/client.py", line 1277, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/lib/python3.7/http/client.py", line 1323, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/lib/python3.7/http/client.py", line 1272, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib/python3.7/http/client.py", line 1032, in _send_output
self.send(msg)
File "/usr/lib/python3.7/http/client.py", line 972, in send
self.connect()
File "/usr/lib/python3.7/http/client.py", line 1447, in connect
server_hostname=server_hostname)
File "/usr/lib/python3.7/ssl.py", line 423, in wrap_socket
session=session
File "/usr/lib/python3.7/ssl.py", line 870, in _create
self.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 1139, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'sdkTunnel'. (_ssl.c:1076)

サービスの停止と起動を行います。サービス再起動する前にvCLSのデプロイが始まったのでこれが必要なのか半信半疑ですが、一応KBにのっとるということで・・・。

root@testvcsa [ / ]# service-control --stop vmware-eam
Operation not cancellable. Please wait for it to finish...
Performing stop operation on service eam...
Successfully stopped service eam
root@testvcsa [ / ]# service-control --start --all
Operation not cancellable. Please wait for it to finish...
Performing start operation on service lwsmd...
Successfully started service lwsmd
Performing start operation on service vmafdd...
Successfully started service vmafdd
Performing start operation on service vmdird...
Successfully started service vmdird
Performing start operation on service vmcad...
Successfully started service vmcad
Performing start operation on profile: ALL...
Successfully started profile: ALL.
Performing start operation on service observability...
Successfully started service observability
Performing start operation on service vmware-vdtc...
Successfully started service vmware-vdtc
Performing start operation on service vmware-pod...
Successfully started service vmware-pod

EAMの証明書更新をした際に下記のようなエラーっぽいメッセージが表示されます。

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for ‘sdkTunnel’. (_ssl.c:1076)

下記のナレッジによると「Successfully updated certificate for “com.vmware.vim.eam” extension」が出力されているなら無視してよいということです。

https://kb.vmware.com/s/article/2112577

In certain situations, you might receive the error “certificate verify failed: Hostname mismatch, certificate is not valid for ‘sdkTunnel'”. This error can be safely ignored if you are getting the error after the message “Successfully updated certificate for “com.vmware.vim.eam” extension” as this message confirms that Extension certificate updated successfully with vCenter Server.

ちなみに、上記のナレッジには下記のようにEAMの証明書の自動更新は6.0U1b以降で解決してるけど、手順自体はは6.xと7.xでも使えるよという煮え切らない説明がされています・・・・。

Certificate Manager automatically updates the certificate for extensions like com.vmware.vim.eam (EAM), com.vmware.rbd (Autodeploy) from vCenter Server 6.0 U1b onwards. However, below steps can be tried on any vCenter Server 6.x or 7.x versions if you are seeing the error messages mentioned in Symptoms section

ともあれ、正常にvCLSが動くようになりました。

参考

VMware Knowledge Base
VMware Knowledge Base

まとめ

STS署名証明書以外はすべて置き換える形になるため、vSphereと連携するコンポーネント(バックアップ、VDI関連など)すべてで何かしら対処が必要になるので、結構シビアな手法になりそうです。

スポンサーリンク
アドセンス1
アドセンス1
ブログランキング・にほんブログ村へ

シェアする

フォローする