2021年5月18日火曜日

vCenter Server ApplianceのSSLサーバ証明書を入れ替える

vCenter Server Appliance (vCSA) のvSphere Clientでは、インストール時に自己署名証明書が生成されてSSLによる通信ができるようになっているが、通常では以下のように「保護されていない通信」という警告がブラウザのアドレスバーに表示がされてしまう。

本記事では、vCSAにてCSR (証明書署名要求) を作成し、オレオレ認証局にて署名を行い、SSLサーバ証明書入れ替える手順を記載する。

なお、検証が目的であるため、今回はオレオレ認証局によるオレオレ証明書にてSSLサーバ証明書を作成し、入れ替えを実施した。オレオレ認証局及びオレオレ証明書の作成手順は、以下記事を参照いただきたい。また、ESXiの証明書入れ替え手順も記載している。

環境

本記事で使用したvCSAのバージョンは以下の通り。

  • vCetnre Server : vCenter Server Appliance 6.7 Update 3
  • アクセス確認用ブラウザ : Google Chrome

SSLサーバ証明書作成の一覧の流れを以下に図示する。

手順

1. vCSAにSSHでログイン

vCSAのサーバ証明書の入れ替えは、CLIにて実施する。Tera Termなどを使用してvCSAにSSHログインする。

ログインすると、特殊なコマンドのみ受け付けるモードになるので、shellを入力しBashモードにする。

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@t1160vcsa [ ~ ]#

2. CSR作成

証明書入れ替えは、専用のcertificate-managerと呼ばれるツールを用いて対話式にて行う。certificate-managerを実行するとメニューが表示されるが、Tera Termのウィンドウサイズがデフォルトの場合は表示が崩れるので、ウィンドウサイズを大きめにして実行すること。

メニューでは以下の通り、「1. Replace Machine SSL certificate with Custom Certificate」を選択したのち、対話式でCSRの作成を行う。

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

~(中略)~

Note : Use Ctrl-D to exit.
Option[1 to 8]: 1 ←★1を選択

Please provide valid SSO and VC privileged user credential to perform certificate operations.
Enter username [Administrator@vsphere.local]:
Enter password:
         1. Generate Certificate Signing Request(s) and Key(s) for Machine SSL certificate

         2. Import custom certificate(s) and key(s) to replace existing Machine SSL certificate

Option [1 or 2]: 1 ←★1を選択

Please provide a directory location to write the CSR(s) and PrivateKey(s) to:
Output directory path: /tmp ←★/tmpを入力

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] : JP
 ↑★「JP」を入力
Enter proper value for 'Name' [Default value : CA] : t1160vcsa.intrat.local
 ↑★「vCSAのFQDN」を入力
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] : Tokyo
 ↑★「Tokyo」等を入力
Enter proper value for 'Locality' [Default value : Palo Alto] : Minato-ku
 ↑★「Minato-ku」等を入力
Enter proper value for 'IPAddress' (Provide comma separated values for multiple IP addresses) [optional] :
 ↑★任意。そのままEnterでOK
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] : t1160vcsa.intrat.local
 ↑★「vCSAのFQDN」を入力
Enter proper value for VMCA 'Name' :t1160vcsa.intrat.local
 ↑★「vCSAのFQDN」を入力
2021-04-30T06:59:49.025Z  Running command: ['/usr/lib/vmware-vmca/bin/certool', '--genkey', '--privkey', '/tmp/vmca_issued_key.key', '--pubkey', '/tmp/pubkey.pub']
2021-04-30T06:59:49.068Z  Done running command
2021-04-30T06:59:49.069Z  Running command: ['/usr/lib/vmware-vmca/bin/certool', '--gencsr', '--privkey', '/tmp/vmca_issued_key.key', '--pubkey', '/tmp/pubkey.pub', '--config', '/var/tmp/vmware/certool.cfg', '--csrfile', '/tmp/vmca_issued_csr.csr']
2021-04-30T06:59:49.134Z  Done running command

CSR generated at: /tmp/vmca_issued_csr.csr
         1. Continue to importing Custom certificate(s) and key(s) for Machine SSL certificate

         2. Exit certificate-manager

Option [1 or 2]: 2 ←★2を選択
root@t1160vcsa [ ~ ]#

上記を実行すると、/tmp配下に以下ファイルが生成される。

ファイル名 説明
vmca_issued_csr.csr CSR (証明書署名要求) のファイル。
vmca_issued_key.key CSR作成時に生成されたサーバの秘密鍵。

上記のCSR (vmca_issued_csr.csr) を認証機関で署名してもらうことでSSLサーバ証明書を作成することができる。ただし、vCSAはSFTPやSCPによる接続が少々面倒なので、catなどで直接テキスト情報として取得してしまうのが手っ取り早い。

root@t1160vcsa [ ~ ]# cat /tmp/vmca_issued_csr.csr
-----BEGIN CERTIFICATE REQUEST-----
MIIDKTCCAhECAQAwgYAxHzAdBgNVBAMMFnQxMTYwdmNzYS5pbnRyYXQubG9jYWwx

~(中略)~

MoqKIu7L005PVeSuATdL5AZenovKHNrKGy+uKBKnK786U+d6ZKqH/2xoHLg4
-----END CERTIFICATE REQUEST-----

3. オレオレ認証局でCSRに署名

以降の作業は、Linuxにて事前にオレオレ認証局を構築していることを前提とする。オレオレ認証局の構築手順は、以下URLを参照すること。

先ほど取得したCSR情報を/etc/pki/tls/misc/newreq.pemに貼り付ける。

# cd /etc/pki/tls/misc/
# cat newreq.pem
-----BEGIN CERTIFICATE REQUEST-----
MIIDKTCCAhECAQAwgYAxHzAdBgNVBAMMFnQxMTYwdmNzYS5pbnRyYXQubG9jYWwx

~(中略)~

MoqKIu7L005PVeSuATdL5AZenovKHNrKGy+uKBKnK786U+d6ZKqH/2xoHLg4
-----END CERTIFICATE REQUEST-----

次に、SAN (Subject Alternative Name) の設定をsan.txtに以下の通り記載する。SANに埋め込むFQDNは必ずvCSAのFQDNと一致させること (ワイルドカードの利用不可)。これが一致していない場合、後続の証明書のインポート時に失敗する。

# cat san.txt
subjectAltName = DNS:t1160vcsa.intrat.local, IP:192.168.11.160

準備が整ったので、CAスクリプトを使ってCSRに署名を行う。

# ./CA -sign
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem: ←★CA作成時に設定したパスワードを入力
Check that the request matches the signature
Signature ok

~(中略)~

Sign the certificate? [y/n]:y ←★yを入力


1 out of 1 certificate requests certified, commit? [y/n]y
 ↑★yを入力

Write out database with 1 new entries
Data Base Updated

~(中略)~

-----BEGIN CERTIFICATE-----
MIIDtzCCAp+gAwIBAgIUTeRKOvluYWQQIfSA0z6d5dj8Ug0wDQYJKoZIhvcNAQEL

~(中略)~

4JJOGgG6dI198y/CSdlt+OKn8spijKR3YktVtYBA1Wcq9kH2vMjqnEzTCQ==
-----END CERTIFICATE-----
Signed certificate is in newcert.pem

署名されたSSLサーバ証明書は、以下コマンドで出力させることができるので、テキストをコピーなどして保存しておく。

# cat newcert.pem | grep -A 100 BEGIN
-----BEGIN CERTIFICATE-----
MIIDtzCCAp+gAwIBAgIUTeRKOvluYWQQIfSA0z6d5dj8Ug0wDQYJKoZIhvcNAQEL

~(中略)~

4JJOGgG6dI198y/CSdlt+OKn8spijKR3YktVtYBA1Wcq9kH2vMjqnEzTCQ==
-----END CERTIFICATE-----

なお、もしSANの設定が適切ではない場合などの理由で証明書のインポートに失敗した場合は、以下のように「Performing rollback of Machine SSL Cert...」といったメッセージが表示され、証明書のロールバックが開始される。ロールバックの際もサービスの停止・起動は発生するので10分くらい時間を要するので、注意すること。

Previous MACHINE_SSL_CERT Subject Alternative Name does not match new MACHINE_SSL_CERTIFICATE Subject Alternative Name

Performing rollback of Machine SSL Cert...
Get site nameus : 0% Completed [Rollback Machine SSL Cert...]

4. SSLサーバ証明書をインポート

vCSAに証明書をインポートする際には、事前に以下ファイルに各種証明書情報を保存する必要がある。

フルパス 説明
/tmp/machine_name_ssl.cer 署名されたSSLサーバ証明書を新規ファイルで作成する。
/tmp/vmca_issued_key.key CSR作成時に生成された秘密鍵 (新規に作成は不要)。
/tmp/Root64.cer 署名した認証局 (CA) の公開鍵を新規ファイルで作成する。

上記の通り、machine_name_ssl.cerRoot64.cerは新規作成を行う。viを使って直接テキスト貼り付けで作成してしまうのが手っ取り早い。

root@t1160vcsa [ ~ ]# cat /tmp/machine_name_ssl.cer
-----BEGIN CERTIFICATE-----
MIIDtzCCAp+gAwIBAgIUTeRKOvluYWQQIfSA0z6d5dj8Ug0wDQYJKoZIhvcNAQEL

~(中略)~

4JJOGgG6dI198y/CSdlt+OKn8spijKR3YktVtYBA1Wcq9kH2vMjqnEzTCQ==
-----END CERTIFICATE-----

root@t1160vcsa [ ~ ]# cat /tmp/Root64.cer
-----BEGIN CERTIFICATE-----
MIID2zCCAsOgAwIBAgIUTeRKOvluYWQQIfSA0z6d5dj8UgIwDQYJKoZIhvcNAQEL

~(中略)~

h5ibLwLq+FBIM8UixMoK/CpWpfBevfmqLNEz7PVpwA==
-----END CERTIFICATE-----

必要なファイルを作成したのち、再度certificate-managerを実行し、以下の通り対話入力を行いSSLサーバ証明書をインポートする。なお、SSLサーバ証明書インポート時に各種サービスの停止・起動が発生するため、完了まで10分程時間を要する。

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

~(中略)~

Note : Use Ctrl-D to exit.
Option[1 to 8]: 1 ←★1を選択

Please provide valid SSO and VC privileged user credential to perform certificate operations.
Enter username [Administrator@vsphere.local]:
Enter password:
         1. Generate Certificate Signing Request(s) and Key(s) for Machine SSL certificate

         2. Import custom certificate(s) and key(s) to replace existing Machine SSL certificate

Option [1 or 2]: 2 ←★2を選択

Please provide valid custom certificate for Machine SSL.
File : /tmp/machine_name_ssl.cer ←★/tmp/machine_name_ssl.cerを入力

Please provide valid custom key for Machine SSL.
File : /tmp/vmca_issued_key.key ←★/tmp/vmca_issued_key.keyを入力

Please provide the signing certificate of the Machine SSL certificate
File : /tmp/Root64.cer ←★/tmp/Root64.cerを入力

You are going to replace Machine SSL cert using custom cert
Continue operation : Option[Y/N] ? : y ←★yを入力
Command Output: /tmp/machine_name_ssl.cer: OK

Get site nameCompleted [Replacing Machine SSL Cert...]
default-first-site
Lookup all services
Get service default-first-site:9923b037-5d1d-4afe-93de-6462b43535ad
Update service default-first-site:9923b037-5d1d-4afe-93de-6462b43535ad; spec: /tmp/svcspec_qd17bss4

~(中略)~

Get service c34642a3-eac1-401c-b629-d3af2bbde2b4_kv
Don't update service c34642a3-eac1-401c-b629-d3af2bbde2b4_kv
Updated 34 service(s)
Status : 70% Completed [stopping services...]
Status : 85% Completed [starting services...]
Status : 100% Completed [All tasks completed successfully]

5. 確認

実際に、vSphere ClientのWeb画面にアクセスし、ブラウザで証明書の警告が発生しないことを確認する。前提として、オレオレ認証局の公開鍵をWindowクライアントの「信頼されたルート証明機関」としてインストール済みであるとこととする。

まず、vCSAのIPアドレスに対してアクセスしてみる。SANにはホスト名だけでなくIPアドレスも記載しているため、証明書の警告は表示されなくなる。

同様にFQDNでアクセスしても証明書の警告が表示されなくなっており、問題なくSSLサーバ証明書の入れ替えができていることが確認できた。

参考

0 件のコメント:

コメントを投稿

人気の投稿