2021年10月2日土曜日

vCenter ServerのSTS証明書を更新する

vCenter ServerにはSecurity Token Service (STS)と呼ばれる、vCenter Single Sign-Onによる認証を行う際に、セキュリティ トークンの発行、検証、更新を行う サービスとなる。

このサービスは「STS証明書」と呼ばれる証明書を持っているが、vSphere 7.0以降では有効期限が2年間と短くなっている (以前のバージョンのSTS証明書の有効期限は10年)。これはセキュリティの観点から意図的に短くされており、有効期限切れの前に、手動による更新作業が必要となる。なお、更新した場合のSTS証明書の有効期限は同じく2年となる。

本記事では、vCenter ServerのSTS証明書を手動で更新する手順を記載する。

環境

今回はvSphere 7.0 Update 1の環境で確認を行った。vSphere 7.0となるため、vCenter Server Applianceに関する手順となる。もし、vSphere 6.7以前のWindows版のvCenter Serverの場合は本記事の手順では対応できないため注意すること。

  • vCenter Server 7.0 Update 1d
  • ESXi 7.0 Update 1

STS証明書更新手順

1. STS証明書の確認・更新用スクリプトの入手

STS証明書の更新はvCenter ServerにSSHでログインし、CLIによる更新作業を行う。

ある程度簡略化できるよう、証明書の更新期限の確認と更新をするためのスクリプトがVMwareから入手できるため、それを利用する。

checksts.py

証明書の確認用スクリプトであるchecksts.pyは、以下KBの「Attachments」から入手する。

fixsts.sh

証明書の更新用スクリプトであるfixsts.shは、以下KBの「Attachments」から入手する。

2. 入手したスクリプトをvCenter Serverに配置

入手したスクリプトをvCSAに対して配置する。

vCenter ServerにSSHログインすると、以下のようなプロンプトが表示される。通常のLinuxと同様のコマンド実行が必要となるため、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@vcsa [ ~ ]#

vCenter ServerはSSHによる接続はできるものの、scpsftpによる接続が簡単にはできないようなので、viを開きターミナルソフトから、スクリプトのテキストをすべてコピー&ペーストしてしまう方法が手っ取り早い。

今回は/tmpにスクリプトを配置する。

3. STS証明書の期限を確認

checksts.pyを実行し、証明書の期限を確認する。構築後1週間ほど経過しているため、722 days (2 years)と、2年 (730日) より少し少なくなっている。

# cd /tmp/
# ./checksts.py

2 VALID CERTS
================

        LEAF CERTS:

        [] Certificate AD:5B:3A:72:4A:AB:75:E5:57:64:47:04:A2:FC:91:5D:E5:D9:76:44 will expire in 722 days (2 years).

        ROOT CERTS:

        [] Certificate B3:07:5B:30:81:0A:C1:85:AD:1B:E9:F1:88:8D:34:3C:00:B1:C0:C7 will expire in 3638 days (10 years).

0 EXPIRED CERTS
================

        LEAF CERTS:

        None

        ROOT CERTS:

        None

4. STS証明書を更新

./fixsts.shを実行し、STS証明書を更新する。途中、administrator@vsphere.localのパスワードが求められるが、処理自体はすぐに完了する。

# cd /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 vcsa.intrat.local started on Fri Aug  6 22:29:13 UTC 2021


Detected DN: cn=vcsa.intrat.local,ou=Domain Controllers,dc=vsphere,dc=local
Detected PNID: vcsa.intrat.local
Detected PSC: vcsa.intrat.local
Detected SSO domain name: vsphere.local
Detected Machine ID: a5fa8cc6-bbe5-4a00-8ac2-71a4c56097d8
Detected IP Address: 192.168.11.160
Domain CN: dc=vsphere,dc=local
==================================
==================================

Detected Root's certificate expiration date: 2031 Jul 23
Detected today's date: 2021 Aug 6
==================================

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 1 to /tmp/vmware-fixsts

Deleting tenant 1

Amount of trustedcertchains: 1
Exporting trustedcertchain 1 to /tmp/vmware-fixsts

Deleting trustedcertchain 1


Applying newly generated STS certificate to SSO domain
adding new entry "cn=TenantCredential-1,cn=vsphere.local,cn=Tenants,cn=IdentityManager,cn=Services,dc=vsphere,dc=local"

adding new entry "cn=TrustedCertChain-1,cn=TrustedCertificateChains,cn=vsphere.local,cn=Tenants,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
==================================
==================================

5. STS証明書の期限が更新されていることを確認

再度、checksts.pyを使って証明書の期限を確認する。730 days (2 years)となっており期限が更新されていることがわかる。

# cd /tmp/
# ./checksts.py

2 VALID CERTS
================

        LEAF CERTS:

        [] Certificate 4C:CE:BF:F2:CC:17:2E:71:5B:0C:74:E1:AB:88:EC:88:11:66:9C:79 will expire in 730 days (2 years).

        ROOT CERTS:

        [] Certificate B3:07:5B:30:81:0A:C1:85:AD:1B:E9:F1:88:8D:34:3C:00:B1:C0:C7 will expire in 3638 days (10 years).

0 EXPIRED CERTS
================

        LEAF CERTS:

        None

        ROOT CERTS:

        None

6. vCenter Serverのサービスを再起動

証明書反映のため、vCenter Serverのサービス再起動を行う。再起動はservice-controlコマンドを利用する。環境にもよるが、10~15分程要するので気長に待とう。

# service-control --stop --all && service-control --start --all
Operation not cancellable. Please wait for it to finish...
Performing stop operation on service observability...
Successfully stopped service observability
Performing stop operation on service vmware-pod...
Successfully stopped service vmware-pod

~(中略)~

Performing start operation on service vmware-pod...
Successfully started service vmware-pod

vCenter Server連携製品との再連携の実施

証明書が更新されたことにより、vCenter Server連携製品に対して、登録情報を更新及び再登録が必要となる。

vCenter Server連携製品とは、例えばVASAを利用するストレージ製品や、vROpsやSRMなどのVMware関連製品となる。今回はSRMを例に更新手順を記載する。

1. SRMのアプライアンス管理画面にログイン

vSphere Clientにログインし、SRMの接続状況を確認すると以下のように「Site Recovery Manager - ユーザー インターフェイス エラー: PSC サービスに接続できません」のエラーとなっている。

同じ画面の「構成」を選択し、SRMアプライアンスの管理画面にadminユーザでログインする。通常、SRMは保護サイトとリカバリサイトで2つ存在するので、移行は両方に対して処理が必要となる。

2. vCenter Serverの登録情報を更新

「再構成」を選択すると、vCenter Serverの登録ウィザードが表示される。最初にadministrator@vsphere.localとパスワードを入力した後はひたすら「次へ」を選択するだけで、vCenter Serverの再登録が実行される。

再登録後、再度vCenter ServerにてSRMの接続状況を確認すると以下のようにエラーが解消されているはずだ。

以上で、vCenter ServerのSTS証明書の更新作業は完了となる。

0 件のコメント:

コメントを投稿

人気の投稿