秘密キー保護
はじめに
証明書はFASサーバーの埋め込みデータベースに保存されます。関連する秘密キーは、FASサーバーのNetwork Serviceアカウントを使用して保存され、デフォルトでエクスポート不可としてマークされます。
秘密キーには2つの種類があります。
- 登録機関証明書に関連付けられている、Citrix_RegistrationAuthority証明書テンプレートからの秘密キー
- ユーザー証明書に関連付けられている、Citrix_SmartcardLogon証明書テンプレートからの秘密キー
登録機関証明書にはCitrix_RegistrationAuthority_ManualAuthorization(デフォルトで24時間有効)およびCitrix_RegistrationAuthority(デフォルトで2年間有効)の2つの種類があります。
フェデレーション認証サービス(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、AES Cryptographic Provider、またはMicrosoftソフトウェアキー記憶域プロバイダー(登録機関証明書およびユーザー証明書両方の秘密キー用)
- トラステッドプラットフォームモジュール(TPM)チップを使用したMicrosoftプラットフォームキー記憶域プロバイダー(登録機関証明書の秘密キー用)、およびMicrosoft Enhanced RSA、AES Cryptographic Provider、またはMicrosoftソフトウェアキー記憶域プロバイダー(ユーザー証明書の秘密キー用)
- ハードウェアセキュリティモジュール(HSM)ベンダーのHSMデバイスを使用した暗号サービスまたはキー記憶域プロバイダー(登録機関証明書およびユーザー証明書両方の秘密キー用)
秘密キーの構成設定
3つのオプションのうちいずれかを使用してFASを構成します。テキストエディターを使用して、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とCNG APIの切り替え)
値 | コメント |
---|---|
true | CAPI APIを使用 |
false(デフォルト) | CNG APIを使用 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderName(使用するプロバイダーの名前)
値 | コメント |
---|---|
Microsoft Enhanced RSAおよびAES Cryptographic Provider | デフォルトはCAPIプロバイダーです |
Microsoftソフトウェアキー記憶域プロバイダー | デフォルトはCNGプロバイダーです |
Microsoftプラットフォームキー記憶域プロバイダー | デフォルトはTPMプロバイダーです。TPMはユーザーキーにはお勧めしません。TPMは登録機関キーにのみ使用します。FASサーバーを仮想化環境で実行する予定の場合は、TPMおよびハイパーバイザーのベンダーに仮想化がサポートされているかどうかを確認してください。 |
HSM_Vendor CSP/Key 記憶域プロバイダー | HSMベンダーによって提供されます。値はベンダーによって異なります。FASサーバーを仮想化環境で実行する予定の場合は、HSMベンダーに仮想化がサポートされているかどうかを確認してください。 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderType(CAPI APIの場合のみ必要)
値 | コメント |
---|---|
24 | デフォルト値です。Microsoft KeyContainerPermissionAccessEntry.ProviderType Property PROV_RSA_AES 24を参照します。CAPIでHSMを使用する場合、およびHSMベンダーで別のタイプを指定されている場合以外は、常に24である必要があります。 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyProtection(FASが秘密キー操作を実行する必要がある場合は、ここで使用されている値を使用します)。秘密キーの「エクスポート可能」フラグを制御します。 ハードウェアでサポートされている場合は、TPMキーストレージの使用が許可されます。
値 | コメント |
---|---|
NoProtection | 秘密キーをエクスポートできます。 |
GenerateNonExportableKey | デフォルト値です。秘密キーをエクスポートできません。 |
GenerateTPMProtectedKey | 秘密キーはTPMを使用して管理されます。秘密キーはProviderNameで指定したProviderName(例:Microsoftプラットフォームキー記憶域プロバイダー)を介して格納されます |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyLength(秘密キーのサイズをビット単位で指定)
値 | コメント |
---|---|
2048 | デフォルト値です。 1024または4096を使用することもできます。 |
構成ファイルの設定を以下に図解します(インストール時のデフォルト設定は赤で示しています)。
構成シナリオの例
例1
この例では、Microsoftソフトウェアキー記憶域プロバイダーを使用して格納されている登録機関証明書の秘密キーおよびユーザー証明書の秘密キーについて説明します。
これはデフォルトのインストール後の構成です。追加の秘密キー構成は不要です。
例2
この例は、Microsoftプラットフォームキー記憶域プロバイダーを使用してFASサーバーのマザーボードのハードウェアTPMに格納されている登録機関証明書秘密キー、およびMicrosoftソフトウェアキー記憶域プロバイダーを使用して格納されているユーザー証明書秘密キーを示しています。
このシナリオでは、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管理コンソールの使用はお勧めしません。
FASの初回のセットアップ手順の実行中、証明書テンプレートを展開して証明機関をセットアップした後、サービスを許可(構成順序の手順3)する前に次を行います:
手順1:以下の行を次のとおり変更して、構成ファイルを編集します。
ファイルは以下のように表示されます。
一部のTPMではキーの長さが制限されています。デフォルトのキーの長さは、2048ビットです。お使いのハードウェアでサポートされる長さのキーを指定してください。
手順2:Citrixフェデレーション認証サービスを再起動して、構成ファイルからの値を読み込みます。
手順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ソフトウェアキー記憶域プロバイダーが使用されます。
手順7: FAS管理コンソールで [ルール] タブを選択し、「インストールと構成」の記述に従って設定を編集します。
PowerShellの使用
PowerShellを使用して、登録機関証明書をオフラインで要求できます。これは、証明機関がオンラインの証明書署名要求で登録機関証明書を発行することがないようにしたい組織に適しています。FAS管理コンソールを使用してオフラインで登録機関証明書の署名要求を行うことはできません。
手順1: 管理コンソールを使用した初回FAS構成時には、最初の「証明書テンプレートの展開」および「証明機関のセットアップ」の2つの手順だけを完了します。
手順2: 証明機関サーバーで、証明書テンプレートMMCスナップインを追加します。Citrix_RegistrationAuthority_ManualAuthorizationテンプレートを右クリックし、[テンプレートの複製] を選択します。
[一般]タブを選択します。テンプレート名と有効期間を変更します。この例では、テンプレート名はOffline_RA、有効期間は2年間です。
手順3: 証明機関サーバーで、証明機関MMCスナップインを追加します。3. [証明書テンプレート]を右クリックします。[新規作成]を選択し、[発行する証明書テンプレート]をクリックします。作成したばかりのテンプレートを選択します。
手順4:FASサーバーで次のPowerShellコマンドレットを読み込みます。
Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
手順5: RSAキーペアをFASサーバーのTPM内で生成し、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コマンドレットは、登録機関証明書の秘密キーの生成に使用される一時的な「上書き」と認識してください。
- このコマンドレットを実行する場合、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:\<certificate template from step 2>" \<certificate request file from step 6>
例:
certreq -submit -attrib "certificatetemplate:Offline_RA" C:\Users\Administrator.AUTH\Desktop\usmcertreq.txt
以下が表示されます。
この時点で、「証明機関の一覧」ウィンドウが表示される可能性があります。この例の証明機関ではhttp(上部)およびDCOM(下部)登録の両方が有効です。 使用できる場合はDCOMオプションを選択します。
証明機関が指定されると、PowerShellによってRequestIDが表示されます。
手順8: 証明機関サーバーの証明機関MMCスナップインで [Pending Requests] をクリックします。要求IDを記録します。要求を右クリックし、[発行]を選択します。
手順9: [発行した証明書] ノードを選択します。発行したばかりの証明書(要求IDが一致する証明書)を見つけます。証明書をダブルクリックして開きます。[詳細] タブをクリックします。[ファイルへコピー] をクリックします。証明書のエクスポートウィザードが開きます。[次へ]をクリックします。次のファイル形式のオプションを選択します。
形式は [Cryptographic Message Syntax Standard – PKCS #7 Certificates(.P7B)] を選択し、[Include all certificates in the certification path if possible] をオンにする必要があります。
手順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管理コンソールを終了して再起動します。
注:[このサービスを認証する]手順には緑色のチェックマークが付いています。
手順13: FAS管理コンソールで [ルール] タブを選択し、「インストールと構成」の記述に従って設定を編集します。
例3
この例では、HSMに格納されている登録機関証明書の秘密キーおよびユーザー証明書の秘密キーについて説明します。この例では、構成済みのHSMを想定しています。HSMにはプロバイダー名(「HSM_Vendor’s Key Storage Provider」など)が含まれます。
FASサーバーを仮想化環境で実行する予定の場合は、HSMベンダーにハイパーバイザーがサポートされているかどうかを確認してください。
手順1: 管理コンソールを使用したFASの初期セットアップ時には、最初の「証明書テンプレートの展開」および「証明機関のセットアップ」の2つの手順だけを完了します。
手順2: HSMベンダーのドキュメントで、HSMのProviderNameの値を確認します。HSMがCAPIを使用している場合、プロバイダーはドキュメントで暗号化サービスプロバイダー(CSP)と記述されている可能性があります。HSMがCNGを使用している場合、プロバイダーはキー記憶域プロバイダー(KSP)と記述されている可能性があります。
手順3:構成ファイルを次のように編集します。
ファイルは以下のように表示されます。
このシナリオでは、HSMがCNGを使用していると想定しているため、ProviderLegacyCspの値はfalseに設定されています。HSMがCAPIを使用している場合は、ProviderLegacyCspの値はtrueに設定されます。HSMベンダーのドキュメントで、HSMがCAPICNとCNGのどちらを使用しているかを確認してください。また、非対称RSAキー生成でサポートされているキーの長さについても、HSMベンダーのドキュメントで確認してください。この例では、キーの長さはデフォルトの2048ビットに設定されています。指定したキーの長さがお使いのハードウェアでサポートされていることを確認してください。
手順4:Citrixフェデレーション認証サービスを再起動して、構成ファイルからの値を読み込みます。
手順5: HSM内でRSAキーペアを生成し、FAS管理コンソールの [Initial Setup] タブで [Authorize] をクリックして証明書署名要求を作成します。
手順6:Windowsイベントログのアプリケーションエントリをチェックして、キーペアがHSM内で生成されていることを確認します。
注: [Provider: [CNG] HSM_Vendor’s Key Storage Provider]となっています。
手順7: 証明機関サーバーで、証明機関MMCで [Pending Requests] ノードを選択します。
要求を右クリックし、[発行] を選択します。
注:[このサービスを認証する]手順には緑色のチェックマークが付いています。
手順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は、次のコマンドレットで取得できます。「FQDN of FAS Server」は、FASサーバーのFQDNです。:
Get-FasUserCertificate –address \<FAS server FQDN> -KeyInfo $true
例:
Get-FasUserCertificate –address fas3.djwfas.net -KeyInfo $true
関連情報
- FASのインストールと構成については、「インストールと構成」を参照してください。
- 一般的なFAS環境については、「Federated Authentication Serviceのアーキテクチャの概要」を参照してください。
- その他の具体的な手順については、「詳細な構成」を参照してください。