秘密キーの保護
はじめに
- 秘密キーは、Network Serviceアカウントによって保存され、デフォルトでエクスポート不可としてマークされます。
秘密キーには次の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フォルダー内です。

FASは、サービスが開始されたときにのみ構成ファイルを読み取ります。値が変更された場合、新しい設定を反映するにはFASを再起動する必要があります。
Citrix.Authentication.FederatedAuthenticationService.exe.configファイルで関連する値を次のように設定します。
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderLegacyCsp(CAPI APIとCNG APIの切り替え)
| Value | コメント |
|---|---|
| true | CAPI APIを使用 |
| false (default) | CNG APIを使用 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderName(使用するプロバイダーの名前)
| Value | コメント |
Private キーの保護
はじめに
秘密キーは、Network Serviceアカウントによって保存され、デフォルトでエクスポート不可としてマークされます。
秘密キーには次の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フォルダー内です。

FASは、サービスが開始されたときにのみ構成ファイルを読み取ります。値が変更された場合、新しい設定を反映するにはFASを再起動する必要があります。
Citrix.Authentication.FederatedAuthenticationService.exe.configファイルで関連する値を次のように設定します。
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderLegacyCsp(CAPI APIとCNG APIの切り替え)
| Value | コメント |
|---|---|
| true | CAPI APIを使用 |
| false (default) | CNG APIを使用 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderName(使用するプロバイダーの名前)
| Value | コメント |
|---|---|
| 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 | コメント |
|---|---|
| 24 | デフォルト。Microsoft KeyContainerPermissionAccessEntry.ProviderTypeプロパティPROV_RSA_AES 24を指します。CAPIとHSMベンダーが別途指定しない限り、常に24である必要があります。 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyProtection(FASが秘密キー操作を実行する必要がある場合、ここで指定された値を使用します)秘密キーの「エクスポート可能」フラグを制御します。ハードウェアでサポートされている場合、TPMキーの保存を許可します。
| Value | コメント |
|---|---|
| NoProtection | 秘密キーはエクスポートできます。 |
| GenerateNonExportableKey | デフォルト。秘密キーはエクスポートできません。 |
| GenerateTPMProtectedKey | 秘密キーはTPMを使用して管理されます。秘密キーは、ProviderNameで指定したProviderName(例:Microsoft Platform Key Storage Provider)を介して保存されます。 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyLength(秘密キーのサイズをビット単位で指定)
| Value | コメント |
|---|---|
| 2048 | デフォルト。1024または4096も使用できます。 |
構成ファイルの設定は、次のようにグラフィカルに表されます(インストール時のデフォルトは赤で表示)。

構成シナリオの例
例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管理コンソールを使用した初期設定では、最初の2つのステップである証明書テンプレートの展開と証明機関のセットアップのみを完了し、その後、次のように進めます。

ステップ 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
Get-FasAuthorizationCertificate -FullCertInfo -Address localhost
<!--NeedCopy-->
ステップ 5: FASサーバーのTPM内でRSAキーペアを生成し、FASサーバーで次のPowerShellコマンドレットを入力して証明書署名要求を作成します。注: 一部のTPMはキーの長さを制限します。デフォルトのキーの長さは2048ビットです。ご使用のハードウェアでサポートされているキーの長さを必ず指定してください。
[[CODE_BLOCK_2]]
例:
[[CODE_BLOCK_3]]
次のように表示されます。

注:
- 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]”
以下に示します。

注: “Provider: [CNG] Microsoft Platform Crypto Provider”
手順 6: 証明書要求セクションをテキストエディターにコピーし、テキストファイルとしてディスクに保存します。

手順 7: FASサーバーでPowerShellに次のように入力して、証明書署名要求を証明機関に送信します。
certreq -submit -attrib "certificatetemplate:\<手順 2 の証明書テンプレート\>" \<手順 6 の証明書要求ファイル\>
例:
certreq -submit -attrib "certificatetemplate:Offline_RA" C:\Users\Administrator.AUTH\Desktop\usmcertreq.txt
以下が表示されます:

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

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

手順 8: 証明機関サーバーで、証明機関MMCスナップインの [保留中の要求] をクリックします。要求IDをメモします。次に、要求を右クリックして [発行] を選択します。
手順 9: [発行された証明書] ノードを選択します。発行されたばかりの証明書を見つけます (要求IDが一致するはずです)。ダブルクリックして証明書を開きます。[詳細] タブを選択します。[ファイルにコピー] をクリックします。証明書のエクスポートウィザードが起動します。[次へ] をクリックします。ファイル形式について、次のオプションを選択します。

形式は「Cryptographic Message Syntax Standard – PKCS #7 Certificates (.P7B)」であり、「可能な場合は、証明のパスにあるすべての証明書を含める」が選択されている必要があります。
手順 10: エクスポートした証明書ファイルをFASサーバーにコピーします。
手順 11: FASサーバーで次のPowerShellコマンドレットを入力して、登録機関証明書をFASサーバーにインポートします。

例:

以下が表示されます:

登録機関証明書の秘密キーがTPMに正しく保存されていることを確認するには、次のPowerShellコマンドを使用します。登録機関証明書の秘密キーがTPMに保存されている場合、PrivateKeyProviderフィールドは Microsoft Platform Crypto Provider に設定されます。
Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
Get-FasAuthorizationCertificate -FullCertInfo -Address localhost
<!--NeedCopy-->
手順 12: FAS管理コンソールを閉じてから、再起動します。

注: 「Authorize this Service」の手順に緑色のチェックマークが表示されます。
手順 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.Authentication.FederatedAuthenticationService.V1
Get-FasAuthorizationCertificate -FullCertInfo -Address localhost
<!--NeedCopy-->
例:Get-FasAuthorizationCertificate –address cg-fas-2.auth.net

ユーザー証明書のリストを取得するには、次のように入力します。
Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
Get-FasAuthorizationCertificate -FullCertInfo -Address localhost
<!--NeedCopy-->
例:Get-FasUserCertificate –address cg-fas-2.auth.net

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

関連情報
- インストールと構成は、FASのインストールと構成に関する主要なリファレンスです。
- 一般的なFAS展開については、Federated Authentication Servicesのアーキテクチャの概要の記事にまとめられています。
- その他の「ハウツー」記事は、高度な構成の記事で紹介されています。
