【VMware】vCenterの証明書が切れたので修正してみた

Virtualization
スポンサーリンク

今回は、vCenterに配置されている証明書の期限が切れたので、新しく証明書を発行しvCenterに適用してみました。
なお、本事象については可能であればVMwareのSRに問い合わせた上で実施したほうが確実です。
vCenterの証明書については、バージョンにより証明書の期限が変更されているらしく、気づいたら証明書の期限切れでvCenterにアクセスできず、vCenterと連動しているシステムに支障をきたす場合があるため、可能であればvCenterの証明書期限を監視設定しておいたほうが良いと思います。

今回、マシン証明書とWCP証明書だけを更新しようとしましたが、失敗したので結局殆どの証明書を更新しました。

期待する目標

本手順で期待する目標は以下の通りです。

  • vCenter Serverの証明書の種類が理解できる
  • vCenter Serverの証明書更新の手順が理解できる
  • vCenter Serverのマシン証明書、WCP証明書が更新できる

前提条件

今回証明書更新を行う環境は以下の通りです。

vCenter Server

  • デプロイサイズ : 極小 (2vCPU、12GB RAM)
  • vCenter Version : 7.0.0

各証明書の状況

証明書名有効期限説明備考
MACHINE_SSL_CERT2022/08/21マシンSSL証明書期限切れ
TRUSTED_ROOTS2030/08/15Root証明書?
machine2030/08/15ソリューションユーザ証明書
vsphere-webclient2030/08/15ソリューションユーザ証明書
vpxd2030/08/15ソリューションユーザ証明書
vpxd-extension2030/08/15ソリューションユーザ証明書
hvc2030/08/15不明
data-encipherment2030/08/15不明
SMS2030/08/20不明
wcp2022/08/20ソリューションユーザ証明書期限切れ
vCenter 証明書一覧

vCenter Serverの証明書は、構築したバージョンによりますが、2年または10年に設定されています。
今回は、[MACHINE_SSL_CERT]と[wcp]の証明書を更新したいと思います。

vCenter Serverの証明書が切れた状態

vCenter 証明書エラー
vCenter 証明書エラー

vCenter のvSphere Webコンソールにアクセスすると、[no healty upstream]と表示され、vCenterにアクセスできませんでした。
ただ、仮想マシンはESXi上で動作しているので、仮想マシンの管理機能が使えない状態となります。
vCenterを管理系サーバの仮想化目的で使用しているシチュエーションであれば、管理機能が失われただけなので、ミッションクリティカルな状態に陥らないことが多いですが、VDIなど仮想マシンの再生成などを繰り返すようなシチュエーションであれば、仮想マシンの再生成ができず、アクセス不可な状態に陥るため、かなり障害範囲が大きくなるでしょう。
そのため、vCenterの証明書有効期限は監視するようにしましょう。

vCenter 証明書
vCenter 証明書

vCenter証明書は、期限が切れていてもChromeなどのブラウザから期限を確認することができます。

vCener 証明書更新

vCenterの証明書を更新する方法は主に2つ考えられます。
1つ目が、vCenter Serverの再デプロイです。
これについては、再デプロイが可能であれば再デプロイを実施したほうがクリーンな環境になるため、良いと思います。
ただ、vCenter Serverと連携している各アプライアンスの再設定を行う必要があるのと、vCenterの設定が飛んでしまうので、設定ミスや設定忘れ等のインシデントが発生しやすくなります。

2つ目はSSL証明書を更新する方法です。
vCenterのSSL証明書を更新することで、現状の設定を維持したまま、vCenterを復活させることができます。
ただ、こちらもリスクが無いわけではなく、vCenterと連携するようなアプライアンスがあれば、証明書の再受け入れが必要となります。

今回はvCenterのSSL証明書更新を行う方法で、vCenterを修正していきたいと思います。

vCenterのSSL証明書を更新する前に、vCenterのスナップショットを取得します。

vCenterスナップショット取得
vCenterスナップショット取得

vCneterが乗っているESXiホストにアクセスし、vCenterの仮想マシンから、[アクション]-[スナップショット]-[スナップショットの作成]を選択します。
今回は、vCenterが起動している状態でスナップショットを取得しましたが、vCenterをシャットダウンしてからスナップショットを取得したほうが、安全だと思います。(静止点が取得できるという点において)

とはいえ、SSL証明書が切れた状態でスナップショットを取得したとしても、現時点でvCenterにアクセスできないので、取る意味はないと思いますが、保険のために取得しておきましょう。

スナップショットの取得完了後、vCenter ServerにSSH接続します。
今回は、アクセス元がWindows端末なので、Teratermを起動して、vCenter ServerのIPアドレスに対してSSH接続を行います。
ユーザ名は、[root]で、パスワードはvCenterをデプロイした際に設定したrootに対応するパスワードです。

vCenter にSSH接続ができたら、以下のコマンドを実行してshellモードに移行します。

Connected to service                                                                                                                                                                                                                         
                                                                                                                                                                                                                                             
    * List APIs: "help api list"                                                                                                                                                                                                             
    * List Plugins: "help pi list"                                                                                                                                                                                                           
    * Launch BASH: "shell"                                                                                                                                                                                                                   
                                                                                                                                                                                                                                             
Command> shell

Shell access is granted to root
root@xxxxx [ ~ ]# 

Shellアクセスを有効にすると、Linuxのようなシェルが表示されます。

証明書更新でvCenterの情報が必要になるため、以下のコマンドを使用してvCenterの情報を取得しておきます。

root@xxxxx [ ~ ]# cat /usr/lib/vmware-vmca/share/config/certool.cfg
#
# Template file for a CSR request
#

# Country is needed and has to be 2 characters
Country = US
Name	= CA
Organization = VMware
OrgUnit = VMware Engineering
State = California
Locality = Palo Alto
IPAddress = 127.0.0.1
Email = email@acme.com
Hostname = server.acme.com

root@xxxxx [ ~ ]# /usr/lib/vmware-vmafd/bin/vmafd-cli get-pnid --server-name localhost
<vCenterのFQDN>

1つ目のコマンドは、vCenterのSSL証明書に記載されている情報となります。
SSL証明書を更新する際には、Default値として入力されているので、直接入力する機会はありませんが、デフォルト値がこの情報となっていることを確認してから証明書の再生成を行っていきます。
2つ目のコマンドは、vCenterのサーバ名を出力しています。
これは、SSL証明書を再生成するために必要なため、メモしておきます。

以下のコマンドを実行して、vCenterのSSL証明書の有効期限を確認しておきます。

root@xxxxx [ ~ ]#  for store in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list | grep -v TRUSTED_ROOT_CRLS); do echo "[*] Store :" $store; /usr/lib/vmware-vmafd/bin/vecs-cli entry list --store $store --text | grep -ie "Alias" -ie "Not Aftter";done;

[*] Store : MACHINE_SSL_CERT
Alias :	__MACHINE_CERT
            Not After : Aug 21 09:41:02 2022 GMT
[*] Store : TRUSTED_ROOTS
Alias :	96a98a39e4ebfc1252e5daeab67d50e1c6358fcf
            Not After : Aug 15 21:41:02 2030 GMT
[*] Store : machine
Alias :	machine
            Not After : Aug 15 21:41:02 2030 GMT
[*] Store : vsphere-webclient
Alias :	vsphere-webclient
            Not After : Aug 15 21:41:02 2030 GMT
[*] Store : vpxd
Alias :	vpxd
            Not After : Aug 15 21:41:02 2030 GMT
[*] Store : vpxd-extension
Alias :	vpxd-extension
            Not After : Aug 15 21:41:02 2030 GMT
[*] Store : hvc
Alias :	hvc
            Not After : Aug 15 21:41:02 2030 GMT
[*] Store : data-encipherment
Alias :	data-encipherment
            Not After : Aug 15 21:41:02 2030 GMT
[*] Store : APPLMGMT_PASSWORD
[*] Store : SMS
Alias :	sms_self_signed
            Not After : Aug 20 21:47:46 2030 GMT
[*] Store : wcp
Alias :	wcp
            Not After : Aug 20 21:40:05 2022 GMT

コマンドを実行すると、vCenterが保有しているSSL証明書一覧が表示されるため更新するSSL証明書を確認します。

以下のコマンドを実行して、vSphere Certificate Managerを起動します。

root@xxxxx [ ~ ]# /usr/lib/vmware-vmca/bin/certificate-manager

		 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
		|                                                                     |
		|      *** Welcome to the vSphere 6.8 Certificate Manager  ***        |
		|                                                                     |
		|                   -- Select Operation --                            |
		|                                                                     |
		|      1. Replace Machine SSL certificate with Custom Certificate     |
		|                                                                     |
		|      2. Replace VMCA Root certificate with Custom Signing           |
		|         Certificate and replace all Certificates                    |
		|                                                                     |
		|      3. Replace Machine SSL certificate with VMCA Certificate       |
		|                                                                     |
		|      4. Regenerate a new VMCA Root Certificate and                  |
		|         replace all certificates                                    |
		|                                                                     |
		|      5. Replace Solution user certificates with                     |
		|         Custom Certificate                                          |
		|         NOTE: Solution user certs will be deprecated in a future    |
		|         release of vCenter. Refer to release notes for more details.|
		|                                                                     |
		|      6. Replace Solution user certificates with VMCA certificates   |
		|                                                                     |
		|      7. Revert last performed operation by re-publishing old        |
		|         certificates                                                |
		|                                                                     |
		|      8. Reset all Certificates                                      |
		|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|

Certificate Managerを起動するとメニューが表示されます。
基本的な動作については、VMWareのKBに実行内容が解説されています。
KB2097936

今回は期限が切れた証明書だけを更新しようとしたのですが、更新に失敗したので結果的にすべての証明書を変更しました。
すべての証明書を更新するため、以下の対話を完了させます。

Note : Use Ctrl-D to exit.
Option[1 to 8]: 8
Do you wish to generate all certificates using configuration file : Option[Y/N] ? : Y

Please provide valid SSO and VC privileged user credential to perform certificate operations.
Enter username [Administrator@vsphere.local]:administrator@vsphere.local
Enter password:
certool.cfg file exists, Do you wish to reconfigure : Option[Y/N] ? : Y

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

Enter proper value for 'Country' [Previous value : US] : <空白Enter>

Enter proper value for 'Name' [Previous value : CA] : <空白Enter>

Enter proper value for 'Organization' [Previous value : VMware] : <空白Enter>

Enter proper value for 'OrgUnit' [Previous value : VMware Engineering] : <空白Enter>

Enter proper value for 'State' [Previous value : Calfornia] : <空白Enter>

Enter proper value for 'Locality' [Previous value : Palo Alto] : <空白Enter>

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

Enter proper value for 'Email' [Previous value : email@acme.com] : <空白Enter>

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] : <vCenterのFQDN>

Enter proper value for VMCA 'Name' :<vCenterのFQDN>
Continue operation : Option[Y/N] ? : Y

基本的には空白で問題ありませんが、vCenterのFQDNを入力する箇所があるため、コマンドで出力させたvCenterのサーバ名を入力します。

Status : 0% Completed [Reset Root Cert...]
Status : 30% Completed [Reset Machine SSL Cert...]
Get site name
default-site
Lookup all services
Updated 0 service(s)
Status : 45% Completed [Reset machine Cert...] 
Status : 50% Completed [Reset vsphere-webclient Cert...]
Status : 55% Completed [Reset vpxd Cert...]
Status : 60% Completed [Reset vpxd-extension Cert...]
2022-08-24T02:27:52.277Z  Updating certificate for "com.vmware.vim.eam" extension
2022-08-24T02:27:52.555Z  Updating certificate for "com.vmware.rbd" extension
2022-08-24T02:27:52.824Z  Updating certificate for "com.vmware.imagebuilder" extension
Status : 65% Completed [Reset hvc Cert...] 
Status : 70% Completed [Reset wcp Cert...]
Reset status : 70% Completed [stopping services...]
Reset status : 85% Completed [starting services...]
Error while starting services, please see service-control log for more details
Status : 0% Completed [Reset operation failed]
please see /var/log/vmware/vmcad/certificate-manager.log for more information.

vCenterのSSL証明書更新プロセスのプログレスが表示されるため、待機します。
最後にvCenterのサービスが再起動されますが、サービス再起動のプロセス中に起動が遅くタイムアウトしたような感じでコマンドが失敗しました。
しかし、vCenterのサービスは上がっており問題なくvCenterにアクセスができるようになったので、念の為、vCenterを手動で再起動しました。

再起動後、以下のコマンドを実行しvCenterのSSL証明書の期限を確認します。

root@xxxxx [ ~ ]# 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
STORE MACHINE_SSL_CERT
Alias :	__MACHINE_CERT
            Not After : Aug 23 02:16:48 2024 GMT
STORE TRUSTED_ROOTS
Alias :	96a98a39e4ebfc1252e5daeab67d50e1c6358fcf
            Not After : Aug 15 21:41:02 2030 GMT
Alias :	dce4faf169e9be4326defe7e7086048ce5ec377a
            Not After : Aug 18 02:17:01 2032 GMT
Alias :	1332c3d4282d3f93c6cd1f87e2b93e2b072dd199
            Not After : Aug 18 02:26:48 2032 GMT

STORE machine
Alias :	machine
            Not After : Aug 23 02:17:51 2024 GMT
STORE vsphere-webclient
Alias :	vsphere-webclient
            Not After : Aug 23 02:17:51 2024 GMT
STORE vpxd
Alias :	vpxd
            Not After : Aug 23 02:17:51 2024 GMT
STORE vpxd-extension
Alias :	vpxd-extension
            Not After : Aug 23 02:17:51 2024 GMT
STORE hvc
Alias :	hvc
            Not After : Aug 23 02:17:53 2024 GMT
STORE data-encipherment
Alias :	data-encipherment
            Not After : Aug 15 21:41:02 2030 GMT
STORE APPLMGMT_PASSWORD
STORE SMS
Alias :	sms_self_signed
            Not After : Aug 20 21:47:46 2030 GMT
STORE wcp
Alias :	wcp
            Not After : Aug 23 02:17:53 2024 GMT

各SSL証明書の有効期限が実行日から2年となっていれば証明書の更新が完了です。

vCenter 証明書確認

vCenterのSSL証明書更新が確認できたら、vCenterの正常性確認を行います。

vCenter ログイン画面
vCenter ログイン

ブラウザより、vCenterにアクセスし、正常にログインできることを確認します。

vCenter証明書の管理
証明書の管理

[管理]-[証明書]-[証明書の管理]より、[マシンSSL証明書]の有効期間の終了日を確認します。

以上で、vCenterの証明書再生成は完了です。
vCenterの証明書は更新しましたが、vCenterと連携するサービスなどは証明書の再受け入れが必要となるため、vCenterと連携するサービスについては、すべて確認したほうが良いと思います。

まとめ

今回は、vCenterの証明書が切れていたので、vCenterにある証明書をリセットして再生成しました。
証明書の再生成自体はオペレーションも簡単でした。
実際のところ、証明書更新期限前であればvCenterの機能を停止せずに更新ができそうなので、忘れないようにしたほうが良いと思います。
近年、セキュリティの観点から証明書の有効期限が短くなる傾向があるので、残念ながらデフォルトの証明書だと2年に1度SSL証明書を更新しないと大規模な障害になりかけます。
そのため、10年などの長い期間の証明書を発行してvCenterに適用するか、vCenterの証明書期限を監視するなどして、証明書切れを起こす前に更新するという運用が必要になります。

おまけ

本ブログではVMwareやWindows、Linuxのインストール手順等も公開しております。
インフラエンジニアとして有益な記事や無益なコンテンツも作成しておりますので、通勤時間や休憩時間、休日のスキマ時間等に合わせて読んでいただけると幸いです。
また、Youtubeで解説動画も鋭意作成中です。本ブログで記事にしているものも動画にしようと思っておりますので、よろしくお願いいたします。

コメント

タイトルとURLをコピーしました