vCenter Server Appliance 版のSTS 証明書有効期限切れで、vSphere Web Client にログオンできなくなった時の対処
追記
STS証明書の有効期限が切れる前も実質同じ作業となります。記事を追加しましたので参考にしていただけると幸いです。
環境
vCenter Server Appliance 版(バージョン:6.5.0)
ESXi(バージョン:6.5.0)
事象
ある日突然、管理者アカウントでvSphere Web Client へ認証すると「ユーザー名とパスワードが必要です」と返され、ログオンできなくなりました。
原因
vCenter Server Appliance(※以下、VCSA)が内部的に保持している証明書の期限が切れていることが原因でした。
対処
以下KBをもとに対応しました。一例に過ぎないのでこの方法でも復旧しない可能性はありますのでご了承ください。
https://kb.vmware.com/s/article/76719?lang=ja
Resolution 項を実施します。
まず、「このナレッジベース記事KBに添付された fixsts.sh スクリプトをダウンロード・・・」とありますが残念ながら日本語記事にスクリプトが公開されていません。次の原文に「Attachments」という項目がありますのでそこのクリップマークからダウンロードします。
https://kb.vmware.com/s/article/76719
VCSAへコマンドベースでログオンします。
VMware vCenter Server Appliance 6.5.0.21000
Type: vCenter Server with an embedded Platform Services Controller
Connected to service
* List APIs: "help api list"
* List Plugins: "help pi list"
* Launch BASH: "shell"
Command>
「shell」を入力し、 Bash シェルへアクセスします。
Command> shell
Shell access is granted to root
root@photon [ ~ ]#
cd コマンドで任意のディレクトリに移動します。
今回は、KBに従い /tmp へ移動します。
fixsts.sh をVCSAへアップロードします。
当方の環境ではSSHでファイル転送ができないので
/tmp 配下へ直接 fixsts.sh を作成し、内容をコピー、貼り付けしました。
作成した fixsts.sh へ実行権限を付与するため、次のコマンドを実行します。
chmod +x fixsts.sh
fixsts.sh を実行します。
./fixsts.sh
★実際の経過を貼る
(一部結果を加工しています)
root@photon [ /tmp ]# ./fixsts.sh
NOTE: This works on external and embedded PSCs
This script will do the following
1: Regenerate STS certificate
What is needed?
1: Offline snapshots of VCs/PSCs
2: SSO Admin Password
IMPORTANT: This script should only be run on a single PSC per SSO domain
==================================
Resetting STS certificate for photon started on Mon Jun 29 07:13:45 UTC 2020
Detected DN: cn=172.***.***.***,ou=Domain Controllers,dc=vsphere,dc=local
Detected PNID: 172.***.***.***
Detected PSC: 172.***.***.***
Detected SSO domain name: vsphere.local
Detected Machine ID: ********-****-****-****-************
Detected IP Address: 172.***.***.***
Domain CN: dc=vsphere,dc=local
==================================
==================================
Detected Root's certificate expiration date: 2028 Jun 20
Detected today's date: 2020 Jun 29
==================================
Exporting and generating STS certificate
Status : Success
Using config file : /tmp/vmware-fixsts/certool.cfg
Status : Success
Enter password for administrator@vsphere.local:
Amount of tenant credentials: 1
Exporting tenant and trustedcertchain 1 to /tmp/vmware-fixsts
Deleting tenant and trustedcertchain 1
Applying newly generated STS certificate to SSO domain
adding new entry "cn=ATenantCredential-1,cn=vsphere.local,cn=ATenants,cn=IdentityManager,cn=Services,dc=vsphere,dc=local"
adding new entry "cn=TrustedCertChain-1,cn=TrustedCertificateChains,cn=vsphere.local,cn=ATenants,cn=IdentityManager,cn=Services,dc=vsphere,dc=local"
Replacement finished - Please restart services on all vCenters and PSCs in your SSO domain
==================================
IMPORTANT: In case you're using HLM (Hybrid Linked Mode) without a gateway, you would need to re-sync the certs from Cloud to On-Prem after following this procedure
==================================
==================================
root@photon [ /tmp ]#
SSOドメイン内すべての vCenter Server または PSC でサービスを再起動します、とありますのでVCSA自体を再起動します。
※PSCとは、Vmware Platform Services Controller の略称で
vSphere でID管理、証明書管理、ライセンス管理などのサービスをサポートします。
VCSAに同梱されているのか別で存在するのか理解できておりません。
当方の環境では同梱されているような状態でしたのでVCSA自体の再起動のみ実施しています。
VCSA再起動後、管理者アカウントでvSphere Web Client へアクセスするとログオン画面が表示されず「A server error occurred」と以下のエラーが表示されました。
まだ復旧していません・・・
KBの続き 項番6 に Certificate Manager を使用し、有効期限が切れているその他の証明書を How to use vSphere Certificate Manager to Replace SSL Certificates の記事に従って置き換えますとあります。
まずは、その他の証明書の有効期限が切れていないか KBにある for文 を実行します。
for文をコピー、貼り付け、Enter で結果が返ります。結果を見るとほとんど有効期限が切れていました・・・
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
★実際の結果(一部結果を加工しています)
root@photon [ ~ ]# 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 : Jun 22 22:08:55 2020 GMT
STORE TRUSTED_ROOTS
Alias : ************cac8714617a9ed67********07bb
Not After : Jun 20 10:08:54 2028 GMT
STORE TRUSTED_ROOT_CRLS
Alias : ************d44e31d38f1419ca********0776
STORE machine
Alias : machine
Not After : Jun 22 09:59:50 2020 GMT
STORE vsphere-webclient
Alias : vsphere-webclient
Not After : Jun 22 09:59:51 2020 GMT
STORE vpxd
Alias : vpxd
Not After : Jun 22 09:59:51 2020 GMT
STORE vpxd-extension
Alias : vpxd-extension
Not After : Jun 22 09:59:52 2020 GMT
STORE SMS
Alias : sms_self_signed
Not After : Jun 26 10:16:55 2028 GMT
root@photon [ ~ ]#
その他の証明書の有効期限が切れていることが確認できました。
次は、KBの 項番6 にあるリンクの記事からその他の証明書の有効期限を更新します。
How to use vSphere Certificate Manager to Replace SSL Certificates の記事
https://kb.vmware.com/s/article/2097936?lang=ja
VCSAへコマンドベースでログオンします。
VMware vCenter Server Appliance 6.5.0.21000
Type: vCenter Server with an embedded Platform Services Controller
Connected to service
* List APIs: "help api list"
* List Plugins: "help pi list"
* Launch BASH: "shell"
Command>
「shell」を入力し、 Bash シェルへアクセスします。
Command> shell
Shell access is granted to root
root@photon [ ~ ]#
今回は、certificate-manager を起動してオプション 4 で対応します。
※はじめて実行するので他のオプションの使い方はわかっておりません・・・
以下実行履歴です。
実際に入力した値を★印で記載しています。それぞれの環境に合わせて入力してください。
root@photon [ ~ ]# /usr/lib/vmware-vmca/bin/certificate-manager
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
| |
| *** Welcome to the vSphere 6.5 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 |
| |
| 6. Replace Solution user certificates with VMCA certificates |
| |
| 7. Revert last performed operation by re-publishing old |
| certificates |
| |
| 8. Reset all Certificates |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
Note : Use Ctrl-D to exit.
Option[1 to 8]: 4 ★4 を入力し、Enter
Do you wish to generate all certificates using configuration file : Option[Y/N] ? : Y ★Yを入力し、Enter
Please provide valid SSO and VC priviledged user credential to perform certificate operations.
Enter username [Administrator@vsphere.local]: ★何も入力せずEnter
Enter password:★ Administrator@vsphere.localのパスワードを入力し、Enter
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
Enter proper value for 'Name' [Default value : CA] : ★何も入力せずEnter
Enter proper value for 'Organization' [Default value : VMware] : ★何も入力せずEnter
Enter proper value for 'OrgUnit' [Default value : VMware Engineering] : ★何も入力せずEnter
Enter proper value for 'State' [Default value : California] : ★何も入力せずEnter
Enter proper value for 'Locality' [Default value : Palo Alto] : ★何も入力せずEnter
Enter proper value for 'IPAddress' (Provide comma separated values for multiple IP addresses) [optional] : 172.***.***.*** ★VCSAのIPアドレスを入力し、Enter
Enter proper value for 'Email' [Default 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] : 172.***.***.*** ★値が空はNG(FQDNかIPアドレスを入力する)
Enter proper value for VMCA 'Name' :photon ★hostnameコマンド実行結果を入力してEnter
You are going to regenerate Root Certificate and all other certificates using VMCA
Continue operation : Option[Y/N] ? : Y ★Yを入力しEnter
Get site nameCompleted [Replacing Machine SSL Cert...]
nutanix
Lookup all services
Get service nutanix:********-****-****-ae03-e55a5df47950
Update service nutanix:********-****-****-ae03-e55a5df47950; spec: /tmp/svcspec_dlg7XP
Get service nutanix:********-****-****-8a01-e80ce8dadf54
Update service nutanix:********-****-****-8a01-e80ce8dadf54; spec: /tmp/svcspec_kzUwz8
Get service nutanix:********-****-****-bad0-08e364fcf60b
Update service nutanix:********-****-****-bad0-08e364fcf60b; spec: /tmp/svcspec_Brb00w
Get service ********-****-****-5ccb2e4e9134
Update service ********-****-****-5ccb2e4e9134; spec: /tmp/svcspec_CW9jZq
Get service ********-****-****-bd24-0580abddc545
Update service ********-****-****-bd24-0580abddc545; spec: /tmp/svcspec_tEGbpU
~ 省略 ~
Get service ********-****-****-a664-965876a97efe_com.nutanix.********-****-****-3cc4-ac1f6b628ee3
Don't update service ********-****-****-a664-965876a97efe_com.nutanix.********-****-****-3cc4-ac1f6b628ee3
Updated 30 service(s)
Status : 60% Completed [Replace vpxd-extension Cert...]
2020-06-30T04:20:53.896Z Updating certificate for "com.vmware.vim.eam" extension
2020-06-30T04:20:54.111Z Updating certificate for "com.vmware.rbd" extension
Status : 100% Completed [All tasks completed successfully]
root@photon [ ~ ]#
信頼されたルート CA 証明書をインストールします。Windowsパソコンであれば、以下リンクを参考にしてください。
※環境によっては必要ないかもしれませんが4回実施しましたが4回とも作業は必要でした
ブラウザのキャッシュをクリアし、ブラウザを再起動します。
復旧
証明書の期間が延長され、証明書エラーが出てなければ成功です。
Vmware Remote Console を利用している方は、初回起動時に証明書更新メッセージが出ると思います。
まとめ
まだ調査中ですがどうも特定バージョンを利用している場合のみ2年の証明書有効期限のようです。
そのため、利用を続ける場合は、2年ごとに作業してあげないといけないです。