【vSphere7.0u2】vcsa(VMCA)の証明書構成をハイブリッドモードにしてみる(マシンSSL証明書を置き換え)

どうも、Tです。

VMwareさんの推奨するvSphereの証明書管理アプローチのハイブリッドモードを試してみます。

ここでの結論

  • vSphere CleintからマシンSSL証明書の置き換えができるとはいえ、やはり面倒ではある。
  • ハイブリッドモードにすることで、マシンSSL証明書有効期限2年をCA認証局で設定する好きな期間に延長することができる(ハイブリッドの本来の目的は社内へのブラウザの証明書エラーを簡易に運用するだめですが・・・)
  • ソリューションユーザー証明書のwcpは2年で置き去りにされる

VMwareさんが推奨する理由はわかるけど、wcp証明書の問題はどうするつもりなんだろうか・・・?

wcpの証明書が切れたときの動作は下記記事をご参照ください。

【vSphere7.0u2】マシンSSL証明書だけ更新していけば問題ないのか?
どうも、Tです。 vSphere7を運用にするにあたって、マシンSSL証明書だけ更新し続ければ大丈夫なのか?と情報がどこにもなく気にな...

やりたいこと

vSphere7環境で証明書の管理構成としてハイブリッドモードを構成します。

vSphereの証明書を管理方法には複数種類ありますが、VMwareさんが推奨するのは、下記の2つになります。

vSphere セキュリティ証明書
vSphere では、通信の暗号化、サービスの認証、トークンへの署名に証明書を使用してセキュリティを提供します。

VMCA のデフォルト証明書

VMCA は、vCenter Server および ESXi ホストのすべての証明書を提供します。

VMCA のデフォルト証明書と外部 SSL 証明書(ハイブリッド モード)

vCenter Server の SSL 証明書を置き換え、VMCA でソリューション ユーザーおよび ESXi ホストの証明書を管理できるようにします。高度なセキュリティに対応したデプロイでは、必要に応じて、ESXi ホストの SSL 証明書も置き換えることができます。

1つはインストール後に構成されているすべての証明書をVMCAで管理する方法です。

2つ目のハイブリッドモードは、マシンSSL証明書(と任意でESXiホスト証明書)をカスタム認証局(外部のCA)の証明書を使って置き換える構成です。

ハイブリッドモードの利点は、下記に記載されています。

vSphere 7 - Certificate Management
vSphere 7 makes evolutionary improvements to the way certificates are managed, and vSphere Admins who use hybrid mode continue to be the big winners.

ちなみにですが、ハイブリッドモードを使わずソリューションユーザーも置き換える方法については非推奨になっているようです。vSphere7のcertificate-managerを実行してみるとロシューションユーザー証明書は将来的に廃止される旨が記載されています。

5. Replace Solution user certificates with Custom Certificate
NOTE: Solution user certs will be deprecated in a future  release of vCenter. Refer to release notes for more details.

環境

環境は、下記の記事で利用した環境を用います。

【vSphere7.0u2】証明書の有効期限はどうなったのか。マシンSSL証明書が切れるとどうなるか。
どうも、Tです。 過去にvSphereの証明書問題で有効期限を調べてまとめました。vSphere7はどうなるのか気になったので...

また、vSphereとは外部のカスタム認証局が必要です。今回は、WindowsServerで提供しているAD CSエンタープライズCAとWeb画面で証明書要求が行えるWeb登録機能を使います。

Active Directory証明書サービス(AD CS)でオレオレ認証局(エンタープライズCA)を構築する
どうも、Tです。 急遽、証明書機関が必要になったので、Active Directory証明書サービス(AD CS)を使えるようにしてみ...
Active Directory証明書サービス(AD CS)に証明機関Web登録を追加する(CAと同居構成)
どうも、Tです。 先日、AD CSをインストールしましたが、Webブラウザから証明書発行のリクエストを行えるようにWeb登録機能を追加...

  • vCenterServer:7.0.2 17958471
  • vSphere ESXi: 7.0.2 17867351
  • カスタム認証局:AD CS(エンタープライズCA&Web登録)

事前確認

マシンSSL証明書の有効期限は2023年8月です。

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からみても同様ですね。

AD CSの認証テンプレート作成

この操作は、AD CSサーバーで行います。

vSphereで利用する証明書のテンプレートの作成方法のKB2112009があります。この手順に沿ってテンプレートを作成していきます。今回は、マシンSSL証明書として使いますが、KBにあるようにソリューションユーザー証明書にも利用することができます。

Creating a Microsoft Certificate Authority Template for SSL certificate creation in vSphere 6.x/7.x

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通りに進めることにしました。

【参考】

証明書テンプレートの互換性設定について | PCテクノロジー株式会社
無線LAN用のコンピュータ証明書を作成する際などに、既存の証明書テンプレートを複製して新しいテンプレートを作成しパラメータの設定等を実施しますが、「互換性」タブにある「証明機関」や「証明書の受信者」設定を初期値から変更した場合、テンプレートのスキーマバージョンが変化し、証明書を受信するPCのOSバージョンによっては証明...

※余力あれば調べる予定。

全般タブ

全般タブを設定します。

  • テンプレート表示名:わかりやすい任意の名前を入力
  • 有効期限:マシンSSL証明書の有効期限(任意で設定)

拡張機能タブ

拡張機能タブを設定します。

「アプリケーションポリシー」->「編集」をクリックします。

「サーバー認証」を選択して「削除」をクリックします。

「サーバー認証」が削除されたことを確認して「OK」をクリックします。

「基本制限」を選択して「編集」をクリックします。

「この拡張機能を有効にする」にチェックを入れて「OK」をクリックします。

「キー使用方法」を選択し「編集」をクリックします。

「署名は発行先の証明である(非否認)」にチェックを入れて「OK」をクリックします。

サブジェクト名タブ

サブジェクト名タブの「要求に含まれる」が選択されていることを確認し「OK」をクリックします。

テンプレート表示名に作成したテンプレートが表示されること、スキーマのバージョンが2であることを確認します。

AD CSの証明書テンプレートに追加

作成してテンプレートを使えるように証明書テンプレートに追加していきます。

「証明書テンプレートを右クリック」->「新規作成」->「発行する証明書テンプレート」をクリックします。

リストの中から作成した証明書テンプレートを選択し「OK」をクリックします。

証明書テンプレートの中に追加されたことを確認します。これで証明書テンプレートとして使えるようになりました。

マシンSSL証明書のCSR(証明書署名要求)作成

この手順は、vSphere Clientから行います。

CSR( Certificate Signing Request )は、自分の証明書にCAによって署名をお願いするために行います。今回で言えばマシンSSL証明書対して、CA(AD CS)に署名してもらうために行います。

Replacing a vSphere 6.x /7.x/8.x Machine SSL certificate with a Custom Certificate Authority Signed Certificate
This article explains how to replace a VMware vSphere 6.x/7.x/8.x Machine SSL certificate with a Custom Certificate Authority (CA) Signed Certificate: Notes: F...

「証明書の管理」->「マシンSSL証明書のアクション」->「証明書署名要求(CSR)の生成」をクリックします。

CSRに必要となる情報を入力して「次へ」をクリックします。

SAN(Subject Alternative Name)がオプション扱いではありますが、FQDNの登録が必須です。SANは、コロンで区切ってショートネームやIPも指定できます。

https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.authentication.doc/GUID-2F83112B-961A-4ECB-B23F-63758E34106B.html

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からvSphere証明書を取得(署名済み証明書の取得)

証明書のダウンロード

この操作は、AD CSサーバーで行います。

AD CSに搭載しているWeb登録へ接続できてればどこからでも大丈夫です。本環境では、AD CSの操作であるとわかりやすいように、AD CSにログインして行っています。

先ほど作成したCSRファイルをもとに、署名された署名所を取得します。KB2112014を参考に進めます。

Obtaining vSphere certificates from a Microsoft Certificate Authority

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のファイル名を付けて「保存」をクリックします。

署名済みの証明書がダウンロードできました。

「ホーム」をクリックします。

CA証明書チェーンのダウンロード

vSphereのVMCAにマシンSSL証明書をインポートするために、CAチェーンの証明書(ADCSの証明書)も必要になりますのでダウンロードします。

「CA 証明書、証明書チェーン、または CRL のダウンロード」をクリックします。

下記のような画面が出た場合は、「はい」をクリックします。この確認画面がでるのは、AD CSにショートホスト名のURLでアクセスしているためです。

「Base64」を選択し、「CA証明書チェーンのダウンロード」をクリックします。

任意の名前.p7bのファイル名を付けて「保存」をクリックします。

CA証明書チェーンのファイルがダウンロードできました。このファイルに含まれる署名所をBase64でをエクスポートします。p7bファイルをダブルクリックします。

「証明書」->「ADCSの証明書を右クリック」->「すべてのタスク」->「エクスポート」をクリックします。

「次へ」をクリックします。

「Base 64 encoded X.509(.CER)」を選択し「次へ」をクリックします。

出力場所を決定して「次へ」をクリックします。

「完了」をクリックして「正しくエクスポートされました」を確認したのち「OK」をクリックします。

CA証明書のcerファイルが出力されました。この後は、mashinessl.cerとadcsca.cerファイルを使います。

改行コードの変更(CRLF→LF)

AD CSから出力されたcerファイルは、改行コードがCRLFで出力されます。このままvSphereへインポートするとKB80803の不具合になるそうです。※KBには記載がありませんが、CPU使用率も高くなるようです。mashinessl.certとadcsca.cerの改行コードを変更します。

vCenter Appliance /storage/log partition full due to excessive pod-startup.log files

ダウンロードした後のcerファイルです。改行コードがCRLFになっています。

高機能テキストエディタやviなどを使用して改行コードをLFに変換します。

この後は、改行コードをLFに変換したcerファイルを使用します。

マシンSSL証明書のインポート

取得した証明書をvcsa(VMCA)へインポートしていきます。

カスタム証明書の追加
証明書ストアにカスタム マシン SSL 証明書を追加できます。

「証明書の管理」->「マシンSSL証明書のアクション」->「証明書をインポートして置き換え」をクリックします。

「vCenter Server から CSR が生成される外部 CA 証明書に置き換え (プライベート キーは組み込み)」を選択して「次へ」をクリックします。

「ファイルの参照」ボタンから、それぞれの証明書選択します。

  • マシンSSL証明書:mashinessl.cer
  • 信頼されたルート証明書チェーン:adcsca.cer

証明書が指定されたことを確認し「REPLACE」をクリックします。

vcsaのサービスの再起動が開始されます。再起動後にvSphere Clientへログインしなおします。

マシンSSL証明書のインポート後の確認

マシンSSL証明書の有効期限が長くなり、信頼できるルート証明書が追加されました。

マシンSSL証明書の詳細を見るとCSRを作成した内容になっていることがわかります。

vSphere ClientのWebブラウザから証明書を見てみると変わっていることがわかります。

VECSもちゃんと変わっていることがわかります。

CSR要求時に作成された__MACHINE_CSRはなくなり、__MACHINE_CERTのみになっています。

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に置き換える前のマシンSSL証明書が残ります。元の証明書は2年と短いため、放置していると証明書のステータスアラームが発生します。

置き換え後様子をみて問題ないようであれば削除しておきましょう。

CertificateStatusAlarm - There are certificate that expired or about to expire/Certificate Status Change Alarm Triggered on VMware vCenter Server

参考

Replacing a vSphere 6.x /7.x/8.x Machine SSL certificate with a Custom Certificate Authority Signed Certificate
This article explains how to replace a VMware vSphere 6.x/7.x/8.x Machine SSL certificate with a Custom Certificate Authority (CA) Signed Certificate: Notes: F...
Obtaining vSphere certificates from a Microsoft Certificate Authority
Creating a Microsoft Certificate Authority Template for SSL certificate creation in vSphere 6.x/7.x
Replace machine certificate in vSphere 7 - vNote42
Replace machine certificate has never been that easy than in vSphere 7. See here how to do this using new certificate wizard in vCenter.
vCenter Server 7.0 で CSR を生成してカスタム証明書に置き換える
vSphere 6.7 以降では vSphere Client から証明書の管理が可能になっています。カスタム証明書の CSR を vCenter Server で生成する手順について文言など多少混乱した点があったので、記録として残しておきたいと思います。

まとめ

vSphere Clientから操作が行えるようになったとはいえ、やはり面倒ではある・・・・。