秘密キーの保護

はじめに

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

秘密キーには次の2種類があります。

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

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

Federated Authentication Service (FAS)管理コンソールのInitial Setupタブのステップ3で、Authorizeをクリックすると、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デバイスを備えたハードウェアセキュリティモジュール (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 APIと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 \<FASサーバーのFQDN>

例:

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

注: “プロバイダー: [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

形式は “Cryptographic Message Syntax Standard – PKCS #7 Certificates (.P7B)” である必要があります。また、”可能な場合は証明のパスにあるすべての証明書を含める” が選択されている必要があります。

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

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

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つのステップである「証明書テンプレートの展開」と「証明機関のセットアップ」のみを完了します。

localized image

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

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

localized image

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

localized image

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

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

ステップ 5: HSM内でRSAキーペアを生成し、FAS管理コンソールのInitial SetupタブでAuthorizeをクリックして証明書署名要求を作成します。

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

localized image

注: [プロバイダー: [CNG] HSMベンダーのキーストレージプロバイダー]

ステップ 7: 証明機関サーバーで、証明機関MMCのPending Requestsノードを選択します。

localized image

要求を右クリックし、Issueを選択します。

注: 「Authorize this service」のステップに緑色のチェックマークが表示されます。

localized image

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

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:

localized image

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

Get-FasUserCertificate –address \<FAS server FQDN>

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

localized image

注:

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

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

例:

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

localized image

関連情報

秘密キーの保護