どうも、Tです。
VMwareさんの推奨しないvSphereの証明書管理アプローチのフルカスタムモードを試してみます。
目次
ここでの結論
- VMCA証明書では、有効期限が2年のマシンSSL証明書とwcp証明書を延ばすことができる
- 2021年8月現在、wcp証明書を延ばす方法はこれしか見つからない
- certificate-managerがあるとはいえ結構面倒な手順
- 将来的になくなるソリューションユーザー証明書をいじることへの不安感はぬぐえない
- 証明書関連置き換えに伴う不具合やトラブル情報が多いため当たらな問題が発生する可能性が高い
- なんのかんの非推奨なので使い枠はない
やりたいこと
vSphere7環境で証明書の管理構成としてフルカスタムモードを構成します。
調べた感じフルカスタムモードという言葉に明確な定義はなく、「マシンSSL証明書」「ソリューションユーザー証明書」「ESXiホスト証明書」をVMCAではなく、外部CAの証明書に置き換えることをフルカスタムモードと呼んでいるようです。
ESXiホスト証明書まで行うと手間なので、今回は、「マシンSSL証明書」「ソリューションユーザー証明書」を外部CAの証明書に置き換えます。(フルじゃないよねぇ・・・と突っ込みたいのはぐっとこらえて)
ちなみにVMwareさんが非推奨としていますが、ソリューションユーザー証明書は将来的に廃止されるそうです。
5. Replace Solution user certificates with Custom CertificateNOTE: Solution user certs will be deprecated in a future release of vCenter. Refer to release notes for more details.
環境
環境は、下記の記事で利用した環境を用います。
また、外部のカスタム認証局が必要です。今回は、WindowsServerで提供しているAD CSエンタープライズCAとWeb画面で証明書要求が行えるWeb登録機能を使います。
- vCenterServer:7.0.2 17958471
- vSphere ESXi: 7.0.2 17867351
- カスタム認証局:AD CS(エンタープライズCA&Web登録)
事前確認
現状の証明書の確認
インストール後のVMCAが管理している状態の証明書の状態です。
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
vSphere Cleintからみても同様ですね。
vcsaでSFTP利用を有効化
手順の中でvcsaとSFTPを利用してファイルのやり取りがあるので、KB2107727を参考にWinSCPを利用してSFTPを使えるようにしておきます。
AD CSの証明書テンプレート作成
この操作は、AD CSサーバーで行います。
vSphereで利用する証明書のテンプレートの作成方法のKB2112009があります。この手順に沿ってテンプレートを作成していきます。マシンSSL証明書、ソリューションユーザー証明書どちらにも利用することができます。
AD CSにログインして、サーバーマネージャーから「ツール」->「証明機関」をクリックします。
「証明書テンプレートを右クリック」->「管理」をクリックします。
「Webサーバーを右クリック」->「テンプレートの複製」をクリックします。
互換性タブ
互換性タブの中を設定していきます。
「証明機関」を「Windows Server 2012」にします。確認画面がでたら「OK」をクリックします。
「証明書の受信者」を「Windows7 / Server 2008 R2」にします。確認画面がでたら「OK」をクリックします。
証明機関と証明書の受信者設定は、KB2112009に則っています。この設定では、SSL通信に使用する際のアルゴリズム決定などに利用される情報を定義しているので、現存する(SSL通信を行う)OSバージョンが指定されていればよいと考えていました。しかし、KB以外の値、例えば証明機関をWindows Server2012にした後、証明書の受信者をWindows8 / Windowservser2012以降を選択すると、テンプレートのスキーマバージョンが4になりWeb登録画面に表示されない問題が発生しました。KBの通りのバージョンを指定してスキーマバージョン2で作成したところ、Web登録画面に表示されたのでKB通りに進めることにしました。
【参考】
※余力あれば調べる予定。
全般タブ
全般タブを設定します。
- テンプレート表示名:わかりやすい任意の名前を入力
- 有効期限:証明書の有効期限(任意で設定)
拡張機能タブ
拡張機能タブを設定します。
「アプリケーションポリシー」->「編集」をクリックします。
「サーバー認証」を選択して「削除」をクリックします。
「サーバー認証」が削除されたことを確認して「OK」をクリックします。
「基本制限」を選択して「編集」をクリックします。
「この拡張機能を有効にする」にチェックを入れて「OK」をクリックします。
「キー使用方法」を選択し「編集」をクリックします。
「署名は発行先の証明である(非否認)」にチェックを入れて「OK」をクリックします。
サブジェクト名タブ
サブジェクト名タブの「要求に含まれる」が選択されていることを確認し「OK」をクリックします。
テンプレート表示名に作成したテンプレートが表示されること、スキーマのバージョンが2であることを確認します。
AD CSの証明書テンプレートに追加
作成してテンプレートを使えるように証明書テンプレートに追加していきます。
「証明書テンプレートを右クリック」->「新規作成」->「発行する証明書テンプレート」をクリックします。
リストの中から作成した証明書テンプレートを選択し「OK」をクリックします。
証明書テンプレートの中に追加されたことを確認します。これで証明書テンプレートとして使えるようになりました。
マシンSSL証明書の置き換え
マシンSSL証明書のCSR(証明書署名要求)作成
この手順は、vSphere Clientから行います。
CSR( Certificate Signing Request )は、自分の証明書にCAによって署名をお願いするために行います。今回で言えばマシンSSL証明書対して、CA(AD CS)に署名してもらうために行います。
「証明書の管理」->「マシンSSL証明書のアクション」->「証明書署名要求(CSR)の生成」をクリックします。
CSRに必要となる情報を入力して「次へ」をクリックします。
SAN(Subject Alternative Name)がオプション扱いではありますが、FQDNの登録が必須です。SANは、コロンで区切ってショートネームやIPも指定できます。
SubjectAltName には DNS Name=<machine_FQDN> が含まれている必要があります。
「ダウンロード」をクリックして「完了」をクリックします。
ダウンロードしたcrsファイル(testvcsa.testdev.lab.csr)をこの後使います。
この状態でVECSを見ると__MACHINE_CSRというものが作成されていました。
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
AD CSからマシンSSL証明書(署名済み証明書)取得
証明書のダウンロード
この操作は、AD CSサーバーで行います。
先ほど作成したCSRファイルをもとに、署名された署名所を取得します。KB2112014を参考に進めます。
https://testadcs.testdev.lab/ などAD CSのWeb登録のURLにアクセスします。ショートネームでアクセスしていたので証明書エラーが表示されていますが、無視しておきます・・・。
「証明書を要求する」をクリックします。
「証明書の要求の詳細設定」をクリックします。
「Base 64 エンコード CMC または PKCS #10 ファイルを使用して証明書の要求を送信するか、または Base 64 エンコード PKCS #7 ファイルを使用して更新の要求を送信する。」をクリックします。
作成した「testvcsa.testdev.lab.csr」を中身をすべて選択してコピーします。
コメントのように見れる下記もコピーしてください。
—–BEGIN CERTIFICATE REQUEST—–
—–END CERTIFICATE REQUEST—–
コピーしたものを「保存された要求」に貼り付けます。
証明書テンプレートに作成したテンプレートを選択して「送信」をクリックします。
証明書テンプレートに作成したテンプレートが表示されない場合、スキーマバージョンが2ではない可能性があります。作成したテンプレートのスキーマバージョンを確認してください。
下記のような画面が出た場合は、「はい」をクリックします。この確認画面がでるのは、AD CSにショートホスト名のURLでアクセスしているためです。
「Base64エンコード」を選択し「証明書のダウンロード」をクリックします。
任意の名前.cerのファイル名を付けて「保存」をクリックします。
署名済みの証明書がダウンロードできました。
「ホーム」をクリックします。
改行コードの変更(CRFL→LF)
AD CSから出力されたcerファイルは、改行コードがCRLFで出力されます。このままvSphereへインポートするとKB80803の不具合になるそうです。※KBには記載がありませんが、CPU使用率も高くなるようです。テキストエディタなどでmachinessl.cerとadcsca.cerの改行コードを変更します。
ダウンロードした後のcerファイルです。改行コードがCRLFになっています。
高機能テキストエディタやviなどを使用して改行コードをLFに変換します。
この後は、改行コードをLFに変換したcerファイルを使用します。
マシンSSL証明書の置き換え
取得した証明書をvcsa(VMCA)へインポートしていきます。
「証明書の管理」->「マシンSSL証明書のアクション」->「証明書をインポートして置き換え」をクリックします。
「vCenter Server から CSR が生成される外部 CA 証明書に置き換え (プライベート キーは組み込み)」を選択して「次へ」をクリックします。
「ファイルの参照」ボタンから、それぞれの証明書選択します。
- マシンSSL証明書:machinessl.cer
- 信頼されたルート証明書チェーン:adcsca.cer
証明書が指定されたことを確認し「REPLACE」をクリックします。
vcsaのサービスの再起動が開始されます。再起動後にvSphere Clientへログインしなおします。
マシンSSL証明書の置き換え後の確認
マシンSSL証明書の有効期限が長くなり、信頼できるルート証明書が追加されました。
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
ソリューションユーザー証明書の置き換え
ソリューションユーザー証明書のCSR(証明書署名要求)作成
この操作は、vcsaにSSH接続して行います。
下記コマンドを実行してcertificate-managerを起動します。
/usr/lib/vmware-vmca/bin/certificate-manager
「 5. Replace Solution user certificates with Custom Certificate」を実行してきます。
「1. Generate Certificate Signing Request(s) and Key(s) for Solution User Certificates」を実行しCSRファイルと鍵ファイルを生成します。
ソリューションユーザー証明書は、役割に応じて分かれています。vSphere7u2では、「machine」「vsphere-webclient」「vpxd」「vpxd-extension」「hvc」「wcp」のCSRファイルと鍵ファイルを生成されます。
この画面は、署名付き証明書を取得した後使うので、このまま放置しておきます。
生成したCSRファイルをローカルにダウンロードします。
各ソリューション事に異なるSubjectとは?
ドキュメントを読んでいるとCSR生成時に各ソリューション事に異なるサブジェクトの指定が必要と記載がありました。
各ソリューション ユーザー証明書には異なるSubjectが指定されている必要があります。たとえば、ソリューション ユーザー名(例: vpxd)などの一意の識別子を含めることができます。
手順の中ではなかったのですが、作成されたcsrファイルを下記コマンドで確認すると異なったサブジェクトが指定されていますので特に何かする必要はありませんでした。昔のvSphere6あたりのときに問題があったようです。
openssl req -noout -text -in <csrファイル名>
AD CSからソリューションユーザー証明書(署名済み証明書)取得
証明書のダウンロード
この操作は、AD CSサーバーで行います。
先ほど作成したCSRファイルをもとに、署名された署名所を取得します。KB2112014を参考に進めます。
https://testadcs.testdev.lab/certsrv などAD CSのWeb登録のURLにアクセスします。
「証明書を要求する」をクリックします。
「証明書の要求の詳細設定」をクリックします。
「Base 64 エンコード CMC または PKCS #10 ファイルを使用して証明書の要求を送信するか、または Base 64 エンコード PKCS #7 ファイルを使用して更新の要求を送信する。」をクリックします。
ダウンロードした「ソリューションユーザーの役割名.csr」の中身をすべて選択してコピーしBase64~~に貼り付けます。
証明書テンプレートに作成したテンプレートを選択して「送信」をクリックします。
コメントのように見れる下記もコピーしてください。
—–BEGIN CERTIFICATE REQUEST—–
—–END CERTIFICATE REQUEST—–
証明書テンプレートに作成したテンプレートが表示されない場合、スキーマバージョンが2ではない可能性があります。作成したテンプレートのスキーマバージョンを確認してください。
「Base64エンコード」を選択し「証明書のダウンロード」をクリックします。
ソリューションユーザーの役割名.cerのファイル名を付けて「保存」をクリックします。
ファイルを取得できました。
ダウンロードしたcsrファイル分同じ操作を繰り返すと下記のcerファイルが出来上がります。
改行コードの変更(CRFL→LF)
AD CSから出力されたcerファイルは、改行コードがCRLFで出力されます。このままvSphereへインポートするとKB80803の不具合になるそうです。※KBには記載がありませんが、CPU使用率も高くなるようです。改行コードを変更します。
ダウンロードした後のcerファイルです。改行コードがCRLFになっています。
高機能テキストエディタやviなどを使用して改行コードをLFに変換します。
すべてのcerファイルの改行コードを変更します。
ソリューションユーザー証明書の置き換え
先ほど作成したcerファイルとマシンSSL証明書のときに取得したAD CSの証明書を使ってソリューションユーザー証明書を置き換えていきます。
用意したcerファイルをvcsaへアップロードします。
certificate-managerに戻り、「2. Import custom certificate(s) and key(s) to replace existing Solution User Certificates」を実行します。ソリューションユーザーの役割事にcerファイルとkeyファイルのパスを指定してきます。最後にソリューションユーザー証明書のcerファイルに署名したCA証明書を求められるので、adcsca.cerファイルのパスを入力して置き換えを実行します。
ソリューションユーザー証明書の置き換えが進み、vCenterサービスが自動的に再起動するため再度ログインします。
ステータスが100%になると完了です。
ソリューションユーザー証明書置き換え後の確認
vSphere Clientからはソリューションユーザー証明書は確認できません。
vcsaのコマンドから見るとソリューションユーザー証明書の有効期限が長くなっているのがわかります。なぜか置き換えしていないはずのマシンSSL証明書のバックアップがとられているのが不可思議ですが、特に影響はないと思われます。
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
BACKUP_STOREに置き換える前の証明書が残ります。放置していると証明書のステータスアラームにトリガーされる可能性があります。
置き換え後様子をみて問題ないようであれば削除しておきましょう。
EAM証明書の更新
ソリューションユーザー証明書を更新したさいに、EAM証明書が自動的に更新できないことがあるようです。今回の検証では確認できませんでしたが、合わせて確認するようにしましょう。
参考
まとめ
これでマシンSSL証明書とソリューションユーザー証明書の有効期限を長期間にできることがわかりました・・・・結構大変だけど・・・。