タイトルがやたらと長いですが、Tanzu Application Service(旧PCF)の前提となるBOSHをインストールする際に、NSX-Tの証明書を直す方法
実際のエラー
どこでおきたエラーかというと
の以下の箇所
NSX CA Cert: A CA certificate in PEM format that establishes a secure connection to the NSX server before the BOSH Director authenticates to the NSX Manager. If the NSX Manager generated a self-signed certificate, use the following command to retrieve the CA certificate using OpenSSL:
といわれた通りOpenSSLコマンドで証明書をゲットしても
openssl s_client -showcerts -connect NSX-MANAGER-ADDRESS:443 < /dev/null 2> /dev/null | openssl x509
以下のエラーが表示される。
でなぜ、エラーになっているかというと、みると証明書に登録されているIP AddressやSAN(Subject Alternative Name)がnsx01
となっていて私のNSXのIPアドレスではなかったこと。
どうしてnsx01
になったかはすっかり忘れましたが、多分インストールの際に間違って登録したのだと思います。
さて、こまった、直したい。色々サイトをみたがはっきりした直し方がなかったので、動いた方法を記載します。
注意
この手順はLab向けの手順でかつ正式な手順ではございません。APIの証明書を変えるので、APIを利用しているもの影響を及ぼす可能性がございます。
自己責任でお願いします。
環境
OpsManager 2.9
NSX-T 3.0
直し方
まず、Linuxマシンを用意して以下のファイルを作成します。
$ vi nsx-cert.cnf
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[ req_distinguished_name ]
countryName = US
stateOrProvinceName = California
localityName = CA
organizationName = NSX
commonName = 10.197.35.14
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = IP-ADDRESS
commonName
のところを正しいIPアドレスに書き換えてください。あとはそのままにしてください。Californiaじゃないし、USでもないのですが、今回は自己証明書なのでこのままにします。
次に環境変数をExportします。IPアドレスは実際の環境に書き換えてください。
% export NSX_MANAGER_IP_ADDRESS=10.197.35.14
% export NSX_MANAGER_COMMONNAME=10.197.35.14
ここから証明書を生成します。
openssl req -newkey rsa:2048 -x509 -nodes -keyout nsx.key -new -out nsx.crt -subj /CN=$NSX_MANAGER_COMMONNAME -reqexts SAN -extensions SAN -config <(cat ./nsx-cert.cnf <(printf "[SAN]\nsubjectAltName=DNS:$NSX_MANAGER_COMMONNAME,IP:$NSX_MANAGER_IP_ADDRESS")) -sha256 -days 365
nsx.keyとnsx.crtが作成されるので後の手順のため保管します。
つぎにNSX-Tにログインします。
System > Certificate > Import > Import Certificate
- Name : 適当な重複しない名前
- Certificate Contents: nsx.keyの内容をコピーペースト
- Private Key : nsx.crtの内容をコピーペースト
- Service Certificate : NO にすること
作成後、新しい証明書にIDをハイライトさせ、それも保管します。

再びLinuxにもどり
export NSX_MANAGER_IP_ADDRESS=10.197.35.14
export CERTIFICATE_ID=607e9b9a-1907-4248-8a0a-b85aa336d6ac
Manager IPとCertificate IDは実際の環境のに合わせてください。
そして、以下のコマンドで証明書の差し替えが発生します。念のため申し上げますが、この段階で古い証明書をつかっている通信はきれますので、Lab以外では推奨しないです。
curl --insecure -u admin:'PASS' -X POST https://$NSX_MANAGER_IP_ADDRESS/api/v1/cluster/api-certificate?action=set_cluster_certificate&certificate_id=$CERTIFICATE_ID
curl --insecure -u admin:'PASS' -X POST https://$NSX_MANAGER_IP_ADDRESS/api/v1/node/services/http?action=apply_certificate&certificate_id=$CERTIFICATE_ID
PASS
は環境にあわせてかえてください。
さて、このタイミングでもしNSXのブラウザがあがっていたら、挙動がおかしくなると思います。
その場合、ブラウザを再起動して、NSXに再接続してください。
証明書を確認すると新しく登録したIPアドレスになっているはずです。

NSX-T側は完了です。
OpsManagerにはnsx.crt
の内容でもう一度接続をこころみてください。これでなおるはずです。