同様にプライベートCAからESXi8.0のWebコンソール用のSSL証明書を出力しました。
1. サーバ証明書の作成
プライベートCAのコンソールでサーバ証明書を発行します。
# ./easyrsa --subject-alt-name="IP:192.168.0.240,DNS:esxi.oz.exiv.net" build-server-full esxi.oz.exiv.net nopass
作成した証明書ファイルは、認証局ディレクトリ配下 pkiディレクトリに出力されます。
私の環境では/root/certが認証局のルートです。
/root/cert/pki/private/esxi.oz.exiv.net.key # プライベートキー(秘密鍵)
/root/cert/pki/issued/esxi.oz.exiv.net.crt # サーバ証明書
/root/cert/pki/ca.crt # プライベートCA証明書
作成したサーバ証明書を表示します。
# cat /root/cert/pki/issued/esxi.oz.exiv.net.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
[途中省略]
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=oz.exiv.net
Validity
Not Before: Jun 8 12:05:35 2024 GMT
Not After : Sep 11 12:05:35 2026 GMT
Subject: CN=esxi.oz.exiv.net
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
[途中省略]
85:29
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
[途中省略]
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Key Usage:
Digital Signature, Key Encipherment
X509v3 Subject Alternative Name:
IP Address:192.168.0.240, DNS:esxi.oz.exiv.net
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
[途中省略]
89:9a:e4:63
-----BEGIN CERTIFICATE-----
M11DzzCCAregAw1BAg1RA1z1Dyp9rggaZaFclQJzurOwDQYJKoZIhvcNAQELBQAw
Base64エンコードされたサーバ証明書データ
[途中省略]
OBnkJW8gV9xVHEvWYOIURD4Wig==
-----END CERTIFICATE-----
ESXi用のSSL証明書は証明書チェーン形式に整える必要があります。具体的には「Base64エンコードされたサーバ証明書データ」と「Base64エンコードされたCA証明書データ」をひとつのファイルにまとめて記述します。
このうち、必要な箇所「—–BEGIN CERTIFICATE—–」から「—–END CERTIFICATE—–」までのデータ(これは、Base64エンコードされたサーバ証明書です)をクリップボードへコピーしておきます。
続けてesxiに転送するファイルを準備します。
# mkdir /root/esxi
# cp /root/cert/pki/private/esxi.oz.exiv.net.key /root/esxi/rui.key # プライベートキーのコピー
証明書チェーンファイルを作成します。
# cd /root/esxi
# vi rui.crt # 証明書チェーンの作成
クリップボードからサーバ証明書のデータをペーストします。
-----BEGIN CERTIFICATE-----
M11DzzCCAregAw1BAg1RA1z1Dyp9rggaZaFclQJzurOwDQYJKoZIhvcNAQELBQAw
Base64エンコードされたサーバ証明書データ
[途中省略]
OBnkJW8gV9xVHEvWYOIURD4Wig==
-----END CERTIFICATE-----
いったん、保存します。
次にプライベートCA証明書の内容をコンソールに表示します。
# cat /root/cert/pki/ca.crt
-----BEGIN CERTIFICATE-----
MIIDSzCCAj0gAw1BAg1Uf5Bky9T+XNHshecWcsayUjoIwzowDQYJKoZ1hvcNAQEL
Base64エンコードされたCA証明書データ
[途中省略]
/ApNs19v8eMHJiBSkghKsfhgHIIEZpQ2/q/4Lr7C0g==
-----END CERTIFICATE-----
同様に「—–BEGIN CERTIFICATE—–」から「—–END CERTIFICATE—–」までのデータ(これは、Base64エンコードされたプライベートCA証明書です)をクリップボードへコピーします。
さきほど、保存したファイルに追記します。
# # vi rui.crt # 証明書チェーン 再編集
ファイルの最終行へカーソルを移動、クリップボードからプライベートCA証明書のデータをペーストします。
-----BEGIN CERTIFICATE-----
M11DzzCCAregAw1BAg1RA1z1Dyp9rggaZaFclQJzurOwDQYJKoZIhvcNAQELBQAw
Base64エンコードされたサーバ証明書データ
[途中省略]
OBnkJW8gV9xVHEvWYOIURD4Wig==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDSzCCAj0gAw1BAg1Uf5Bky9T+XNHshecWcsayUjoIwzowDQYJKoZ1hvcNAQEL
Base64エンコードされたCA証明書データ
[途中省略]
/ApNs19v8eMHJiBSkghKsfhgHIIEZpQ2/q/4Lr7C0g==
-----END CERTIFICATE-----
ファイルを保存します。準備した2つのファイル(rui.keyとrui.crt)は、esxiサーバへ転送します。
scpやWinscp等のツールを使っても構いません。
私はクリップボード経由でesxiサーバのコンソールへ貼り付けました。
2. esxiへの証明書インストール
esxiサーバにsshログイン、証明書ディレクトリへ移動します。
[root@esxi:~] cd /etc/vmware/ssl
[root@esxi:/etc/vmware/ssl]
現在の証明書、プライベートキーファイルを別名保管します。
[root@esxi:/etc/vmware/ssl] mv rui.key rui.key.001
[root@esxi:/etc/vmware/ssl] mv rui.crt rui.crt.001
esxiサーバへ転送した2つのファイルをsslディレクトリへ配置します。
ファイルのパーミッションを適宜変更します。私はrootユーザのみ読み書き可能に変更しました。
[root@esxi:/etc/vmware/ssl] cp /tmp/rui.* /etc/vmware/ssl/
[root@esxi:/etc/vmware/ssl] chmod 600 rui.key
[root@esxi:/etc/vmware/ssl] chmod 600 rui.crt
hostdとvpxaを再起動します。
[root@esxi:/etc/vmware/ssl] /etc/init.d/hostd restart && /etc/init.d/vpxa restart
サービスの再起動が完了したら、クライアントPCのWebブラウザからESXi管理コンソールにアクセスします。
IPアドレスでブラウザアクセスしても警告表示されないため快適です。

※プライベート認証局のCA証明書は、予めクライアントPCにもインストールしておく必要があります。
3. 失敗した場合の復旧方法
もし、証明書の入れ替えが失敗してしまった場合の復旧方法です。次のコマンドを実行して自己署名証明書を再生成、hostdとvpxaを再起動します。
[root@esxi:/etc/vmware/ssl] /sbin/generate-certificates
[root@esxi:/etc/vmware/ssl] /etc/init.d/hostd restart && /etc/init.d/vpxa restart
4. 最後に
ESXiサーバ無償版の提供が終了しており、今後、新規でESXiサーバを構築する機会は激減することでしょう。
個人的に慣れ親しんだ仮想化プラットフォームだけに大変寂しく感じています。


コメント