プライベートキーの保護

はじめに

  • 証明書はFASサーバー上の組み込みデータベースに保存されます。関連するプライベートキーは、FASサーバーのNetwork Serviceアカウントによって保存され、デフォルトでエクスポート不可としてマークされます。

プライベートキーには2種類あります。

  • Citrix_RegistrationAuthority証明書テンプレートからの、登録機関証明書に関連付けられたプライベートキー
  • Citrix_SmartcardLogon証明書テンプレートからの、ユーザー証明書に関連付けられたプライベートキー

  • 実際には、2つの登録機関証明書があります。Citrix_RegistrationAuthority_ManualAuthorization(デフォルトで24時間有効)とCitrix_RegistrationAuthority(デフォルトで2年間有効)です。

Federated Authentication Service(FAS)管理コンソールの初期設定タブのステップ3で、承認をクリックすると、FASサーバーはキーペアを生成し、Citrix_RegistrationAuthority_ManualAuthorization証明書に対する証明書署名要求を証明機関に送信します。これは一時的な証明書で、デフォルトで24時間有効です。証明機関はこの証明書を自動的に発行しません。その発行は、証明機関で管理者によって手動で承認される必要があります。証明書がFASサーバーに発行されると、FASはCitrix_RegistrationAuthority_ManualAuthorization証明書を使用して、Citrix_RegistrationAuthority証明書(デフォルトで2年間有効)を自動的に取得します。FASサーバーは、Citrix_RegistrationAuthority証明書を取得するとすぐに、Citrix_RegistrationAuthority_ManualAuthorizationの証明書とキーを削除します。

登録機関証明書に関連付けられたプライベートキーは特に機密性が高く、登録機関証明書ポリシーにより、プライベートキーを所有する者は、テンプレートで構成されたユーザーセットに対する証明書要求を発行できるためです。結果として、このキーを制御する者は、そのセット内の任意のユーザーとして環境に接続できます。

FASサーバーは、組織のセキュリティ要件に合った方法でプライベートキーを保護するように構成できます。以下のいずれかを使用します。

  • 登録機関証明書とユーザー証明書のプライベートキーの両方に、Microsoft Enhanced RSA and AES Cryptographic ProviderまたはMicrosoft Software Key Storage Providerを使用
  • 登録機関証明書のプライベートキーにTrusted Platform Module(TPM)チップを備えたMicrosoft Platform Key Storage Providerを使用し、ユーザー証明書のプライベートキーにMicrosoft Enhanced RSA and AES Cryptographic ProviderまたはMicrosoft Software Key Storage Providerを使用
  • 登録機関証明書とユーザー証明書のプライベートキーの両方に、HSMデバイスを備えたHardware Security Module(HSM)ベンダーのCryptographic ServiceまたはKey Storage Providerを使用

プライベートキーの構成設定

FASを3つのオプションのいずれかを使用するように構成します。テキストエディターを使用して、Citrix.Authentication.FederatedAuthenticationService.exe.configファイルを編集します。ファイルのデフォルトの場所は、FASサーバー上のProgram Files\Citrix\Federated Authentication Serviceフォルダーです。

localized image

FASは、サービスが開始されたときにのみ構成ファイルを読み取ります。値が変更された場合、新しい設定を反映させるにはFASを再起動する必要があります。

Citrix.Authentication.FederatedAuthenticationService.exe.configファイルで関連する値を次のように設定します。

Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderLegacyCsp(CAPIとCNG APIの切り替え)

Value Comment
true CAPI APIを使用
false (default) CNG APIを使用

Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderName(使用するプロバイダーの名前)

Value Comment
Microsoft Enhanced RSA and AES Cryptographic Provider デフォルトのCAPIプロバイダー
Microsoft Software Key Storage Provider デフォルトのCNGプロバイダー
Microsoft Platform Key Storage Provider デフォルトのTPMプロバイダー。TPMはユーザーキーには推奨されません。登録機関キーにのみTPMを使用してください。FASサーバーを仮想化環境で実行する予定がある場合は、仮想化がサポートされているかどうかをTPMおよびハイパーバイザーベンダーに確認してください。
HSM_Vendor CSP/Key Storage Provider HSMベンダーによって提供されます。値はベンダーによって異なります。FASサーバーを仮想化環境で実行する予定がある場合は、仮想化がサポートされているかどうかをHSMベンダーに確認してください。

Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderType(CAPI APIの場合にのみ必須)

Value Comment
24 デフォルト。Microsoft KeyContainerPermissionAccessEntry.ProviderTypeプロパティPROV_RSA_AES 24を指します。CAPIでHSMを使用しており、HSMベンダーが別途指定しない限り、常に24である必要があります。

Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyProtection(FASがプライベートキー操作を実行する必要がある場合、ここで指定された値を使用します)プライベートキーの「エクスポート可能」フラグを制御します。ハードウェアでサポートされている場合、TPMキー保存の使用を許可します。

Value Comment
NoProtection プライベートキーはエクスポート可能です。
GenerateNonExportableKey デフォルト。プライベートキーはエクスポートできません。
GenerateTPMProtectedKey プライベートキーはTPMを使用して管理されます。プライベートキーは、ProviderNameで指定したProviderName(例:Microsoft Platform Key Storage Provider)を介して保存されます。

Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyLength(プライベートキーのサイズをビット単位で指定)

Value Comment
2048 デフォルト。1024または4096も使用できます。

構成ファイルの設定は、次のようにグラフィカルに表現されます(インストール時のデフォルトは赤で表示)。

localized image

構成シナリオの例

例1

この例では、Microsoft Software Key Storage Providerを使用して保存された登録機関証明書のプライベートキーとユーザー証明書のプライベートキーについて説明します。

これはデフォルトのインストール後構成です。追加の秘密鍵構成は不要です。

例 2

この例では、登録機関証明書の秘密鍵がMicrosoft Platform Key Storage Providerを介してFASサーバーのマザーボードのハードウェアTPMに保存され、ユーザー証明書の秘密鍵がMicrosoft Software Key Storage Providerを使用して保存される様子を示します。

このシナリオでは、FASサーバーのマザーボード上のTPMが、TPMメーカーのドキュメントに従ってBIOSで有効にされ、その後Windowsで初期化されていることを前提としています。詳細については、https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-vista/cc749022(v=ws.10) を参照してください。

FAS管理コンソールの使用

FAS管理コンソールはオフラインの証明書署名要求を実行できないため、組織が登録機関証明書に対してオンラインの証明書署名要求を許可している場合を除き、その使用は推奨されません。

FASの初期設定を行う際、証明書テンプレートを展開し、証明書機関を設定した後、サービスを承認する前(設定シーケンスのステップ3)に、次の手順を実行します。

ステップ 1: 構成ファイルを編集し、次の行を次のように変更します。

ローカライズされた画像

ファイルは次のようになります。

ローカライズされた画像

一部のTPMはキー長を制限します。デフォルトのキー長は2048ビットです。ハードウェアでサポートされているキー長を指定してください。

ステップ 2: Citrix Federated Authentication Serviceを再起動し、構成ファイルから値を読み取ります。

ステップ 3: サービスを承認します。

ステップ 4: 証明書機関サーバーから保留中の証明書要求を手動で発行します。登録機関証明書が取得されると、管理コンソールのセットアップシーケンスのステップ3が緑色になります。この時点で、登録機関証明書の秘密キーはTPMで生成されています。証明書はデフォルトで2年間有効です。

登録機関証明書の秘密キーがTPMに正しく保存されていることを確認するには、次のPowerShellコマンドを使用します。登録機関証明書の秘密キーがTPMに保存されている場合、PrivateKeyProviderフィールドは Microsoft Platform Crypto Provider に設定されます。

Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
Get-FasAuthorizationCertificate -FullCertInfo -Address localhost
<!--NeedCopy-->

ステップ 5: 構成ファイルを次のように編集し直します。

ローカライズされた画像

注:

FASはTPMで保護されたキーを持つユーザー証明書を生成できますが、大規模な展開ではTPMハードウェアが遅すぎる場合があります。

ステップ 6: FASを再起動します。これにより、サービスは構成ファイルを再読み込みし、変更された値を反映します。その後の自動秘密キー操作はユーザー証明書キーに影響を与えます。これらの操作では秘密キーはTPMに保存されず、Microsoft Software Key Storage Providerが使用されます。

ステップ 7: FAS管理コンソールで [ルール] タブを選択し、インストールと構成に記載されているとおりに設定を編集します。

PowerShellの使用

登録機関証明書は、PowerShellを使用してオフラインで要求できます。これは、証明書機関がオンラインの証明書署名要求を介して登録機関証明書を発行することを望まない組織に適しています。FAS管理コンソールを使用してオフラインの登録機関証明書署名要求を行うことはできません。

ステップ 1: 管理コンソールを使用したFASの初期構成中に、「証明書テンプレートの展開」と「証明書機関のセットアップ」の最初の2つのステップのみを完了します。

ローカライズされた画像

ステップ 2: 証明書機関サーバーで、証明書テンプレートMMCスナップインを追加します。Citrix_RegistrationAuthority_ManualAuthorization テンプレートを右クリックし、[テンプレートの複製] を選択します。

[全般] タブを選択します。名前と有効期間を変更します。この例では、名前は Offline_RA で、有効期間は2年です。

ローカライズされた画像

ステップ 3: 証明書機関サーバーで、証明書機関MMCスナップインを追加します。[証明書テンプレート] を右クリックします。[新規] を選択し、[発行する証明書テンプレート] をクリックします。作成したばかりのテンプレートを選択します。

ステップ 4: FASサーバーで次のPowerShellコマンドレットをロードします。

Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1

ステップ 5: FASサーバーのTPM内にRSAキーペアを生成し、FASサーバーで次のPowerShellコマンドレットを入力して証明書署名要求を作成します。注: 一部のTPMはキー長を制限します。デフォルトのキー長は2048ビットです。ハードウェアでサポートされているキー長を必ず指定してください。

New-FasAuthorizationCertificateRequest -UseTPM $true -address \<FQDN of FAS Server>

例:

New-FasAuthorizationCertificateRequest -UseTPM $true -address fashsm.auth.net

次のように表示されます。

ローカライズされた画像

注:

  • Id GUID(この例では「5ac3d8bd-b484-4ebe-abf8-4b2cfd62ca39」)は、後続のステップで必要になります。
  • このPowerShellコマンドレットは、登録機関証明書の秘密キーを生成するために使用される1回限りの「オーバーライド」と考えることができます。
  • このコマンドレットを実行すると、FASの起動時に構成ファイルから読み取られた値が、使用するキー長(デフォルトは2048)を決定するためにチェックされます。
  • この手動のPowerShellで開始された登録機関証明書の秘密キー操作では、-UseTPMが$trueに設定されているため、システムはTPMを使用するために必要な設定と一致しないファイルからの値を無視します。
  • このコマンドレットを実行しても、構成ファイルの設定は変更されません。
  • その後の自動FAS開始のユーザー証明書秘密キー操作では、FASの起動時にファイルから読み取られた値が使用されます。
  • FASサーバーがユーザー証明書を発行する際に、構成ファイルのKeyProtection値をGenerateTPMProtectedKeyに設定して、TPMで保護されたユーザー証明書秘密キーを生成することも可能です。

TPMがキーペアの生成に使用されたことを確認するには、キーペアが生成されたときにFASサーバーのWindowsイベントビューアーのアプリケーションログを確認します。

ローカライズされた画像

注: 「[TPM: True]」

以下に示します。

localized image

注: “Provider: [CNG] Microsoft Platform Crypto Provider”

ステップ 6: 証明書要求セクションをテキストエディターにコピーし、テキストファイルとしてディスクに保存します。

  • localized image

ステップ 7: 証明書署名要求を証明機関に送信するには、FASサーバーでPowerShellに以下を入力します。

certreq -submit -attrib "certificatetemplate:\<ステップ 2 の証明書テンプレート>" \<ステップ 6 の証明書要求ファイル>

例:

certreq -submit -attrib "certificatetemplate:Offline_RA" C:\Users\Administrator.AUTH\Desktop\usmcertreq.txt

以下が表示されます。

localized image

この時点で、証明機関リストウィンドウが表示される場合があります。この例の証明機関では、HTTP(上)とDCOM(下)の両方の登録が有効になっています。利用可能な場合は、DCOMオプションを選択します。

localized image

証明機関が指定されると、PowerShellにRequestIDが表示されます。

localized image

ステップ 8: 証明機関サーバーで、証明機関MMCスナップインの保留中の要求をクリックします。要求IDをメモします。次に、要求を右クリックして発行を選択します。

ステップ 9: 発行された証明書ノードを選択します。発行されたばかりの証明書を見つけ(要求IDが一致するはずです)、ダブルクリックして開きます。詳細タブを選択します。ファイルにコピーをクリックします。証明書のエクスポートウィザードが起動します。次へをクリックします。ファイル形式について、以下のオプションを選択します。

localized image

形式は「暗号メッセージ構文標準 – PKCS #7 証明書 (.P7B)」であり、「可能であれば、証明のパスにあるすべての証明書を含める」が選択されている必要があります。

ステップ 10: エクスポートした証明書ファイルをFASサーバーにコピーします。

ステップ 11: 登録機関証明書をFASサーバーにインポートするには、FASサーバーで以下のPowerShellコマンドレットを入力します。

localized image

例:

localized image

以下が表示されます。

localized image

登録機関証明書の秘密キーがTPMに正しく保存されていることを確認するには、以下のPowerShellコマンドを使用します。登録機関証明書の秘密キーがTPMに保存されている場合、PrivateKeyProviderフィールドはMicrosoft Platform Crypto Providerに設定されます。

Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
Get-FasAuthorizationCertificate -FullCertInfo -Address localhost
<!--NeedCopy-->

ステップ 12: FAS管理コンソールを閉じ、再起動します。

localized image

注: 「このサービスを承認」のステップに緑色のチェックマークが付いています。

ステップ 13: FAS管理コンソールでルールタブを選択し、インストールと構成で説明されている設定を編集します。

例 3

この例では、HSMに保存されている登録機関証明書の秘密キーとユーザー証明書の秘密キーについて説明します。この例では、HSMが構成されていることを前提としています。HSMには、たとえば「HSM_Vendor’s Key Storage Provider」のようなプロバイダー名があります。

仮想化環境でFASサーバーを実行する予定がある場合は、ハイパーバイザーのサポートについてHSMベンダーに確認してください。

ステップ 1. 管理コンソールを使用してFASの初期設定を行う際は、「証明書テンプレートの展開」と「証明機関のセットアップ」の最初の2つのステップのみを完了します。

ローカライズされた画像

ステップ 2: HSM の ProviderName 値が何であるべきかを判断するには、HSM ベンダーのドキュメントを参照してください。HSM が CAPI を使用している場合、プロバイダーはドキュメントで暗号化サービスプロバイダー (CSP) と呼ばれることがあります。HSM が CNG を使用している場合、プロバイダーはキー記憶域プロバイダー (KSP) と呼ばれることがあります。

ステップ 3: 次のように構成ファイルを編集します。

ローカライズされた画像

ファイルは次のようになります。

ローカライズされた画像

このシナリオでは、HSM が CNG を使用していると仮定しているため、ProviderLegacyCsp の値は false に設定されています。HSM が CAPI を使用している場合、ProviderLegacyCsp の値は true に設定する必要があります。HSM が CAPI と CNG のどちらを使用しているかを判断するには、HSM ベンダーのドキュメントを参照してください。また、非対称 RSA キー生成でサポートされているキー長については、HSM ベンダーのドキュメントを参照してください。この例では、キー長はデフォルトの 2048 ビットに設定されています。指定するキー長がハードウェアでサポートされていることを確認してください。

ステップ 4: 構成ファイルから値を読み取るために、Citrix Federated Authentication Service を再起動します。

ステップ 5: FAS 管理コンソールの [初期設定] タブで [承認] をクリックして、HSM 内で RSA キーペアを生成し、証明書署名要求を作成します。

ステップ 6: キーペアが HSM で生成されたことを確認するには、Windows イベントログのアプリケーションエントリを確認します。

ローカライズされた画像

注: [プロバイダー: [CNG] HSM ベンダーのキー記憶域プロバイダー]

ステップ 7: 証明機関サーバーで、証明機関 MMC の [保留中の要求] ノードを選択します。

ローカライズされた画像

要求を右クリックし、[発行] を選択します。

注: 「このサービスを承認する」のステップに緑色のチェックマークが付いています。

ローカライズされた画像

ステップ 8: FAS 管理コンソールの [ルール] タブを選択し、インストールと構成で説明されているように設定を編集します。

FAS 証明書の保存

FAS は、証明書を保存するために FAS サーバー上の Microsoft 証明書ストアを使用しません。組み込みデータベースを使用します。

登録機関証明書の GUID を特定するには、FAS サーバーで次の PowerShell コマンドレットを入力します。

Add-pssnapin Citrix.a\*

Get-FasAuthorizationCertificate –address \<FAS server FQDN>

例: Get-FasAuthorizationCertificate –address cg-fas-2.auth.net:

ローカライズされた画像

ユーザー証明書のリストを取得するには、次を入力します。

Get-FasUserCertificate –address \<FAS server FQDN>

例: Get-FasUserCertificate –address cg-fas-2.auth.net

ローカライズされた画像

注:

HSM を使用して秘密キーを保存する場合、HSM コンテナーは GUID で識別されます。HSM 内の秘密キーの GUID は、次を使用して取得できます。

Get-FasUserCertificate –address \<FAS server FQDN> -KeyInfo $true

例:

Get-FasUserCertificate –address fas3.djwfas.net -KeyInfo $true

ローカライズされた画像

関連情報

プライベートキーの保護