証明書失効一覧(CRL)のチェック
はじめに
StoreFrontで、CVAD Delivery Controllerが使用するTLS証明書の状態を公開された証明書失効一覧(CRL)を使用して確認するよう構成できます。次の場合、証明書へのアクセスの取り消しが必要なことがあります:
- 秘密キーが侵害された可能性がある
- CAが侵害された
- 所属が変更された
- 証明書が置き換えられた
注:
このトピックは、StoreFrontとCitrix Virtual Apps and Desktops Delivery Controllerとの間でHTTPS接続が使用された場合のみ該当します。Delivery ControllerへのHTTP接続に証明書は必要ありません。そのため、ここで説明されるストアの-CertRevocationPolicy設定が影響することはありません。
StoreFrontは、CRL配布ポイント (CDP)の拡張機能およびローカルにインストールされた証明書失効一覧 (CRL)を使用した証明書失効チェックをサポートします。StoreFrontは完全なCRLのみをサポートしています。デルタCLRはサポートされていません。
CRL配布ポイント(CDP)拡張機能
Citrix Virtual Apps and Desktops Delivery Controllerが使用している証明書が失効し、公開されたCRLにシリアル番号が表示されている場合、StoreFrontはこのDelivery Controllerのリソースを列挙しません。StoreFrontが失効した証明書を検出するには、CDP証明書拡張機能で定義されているいずれかのURLを使用して、公開されたCRLにアクセスする必要があります。
CRLの公開間隔
StoreFrontがいち早くDelivery Controller上の失効した証明書を検出できるようにするには、CAでのCRLの公開期間を短縮する必要があります。CLR配布ポイント拡張機能のプロパティを編集して、使用中の公開キー基盤により短いCRL公開期間値を設定します。
クライアントのCRLキャッシュ
Windows公開キー基盤のクライアントは、CRLをローカルにキャッシュします。最新のCRLは、ローカルにキャッシュされたCRLの有効期限が切れるまでダウンロードされません。
証明書失効リスト(CRL)へのStoreFrontのアクセス
証明書失効チェックのためには、StoreFrontがCRLにアクセスできる必要があります。StoreFrontがCRLを公開するWebサーバーや証明機関(CA)と通信する方法や、CRLの更新を受信する方法について慎重に確認してください。
Delivery Controller上の内部エンタープライズCAおよびプライベート証明書
プライベートCAおよび証明書を使用する場合、StoreFrontに必要なのは正しく構成されたエンタープライズCAと、組織内の内部ネットワークからアクセスできる公開されたCRLです。エンタープライズCAがCDP拡張機能を公開するように構成する情報については、Microsoftドキュメントを参照してください。CAが CDP拡張機能を含むように構成される前にDelivery Controller上に存在していた証明書は、再発行が必要な場合があります。
StoreFrontサーバーおよびCitrix Virtual Apps and Desktopsサーバーは通常、インターネット接続のない隔離されたプライベートネットワーク上に存在します。この場合、プライベートCAを使用する必要があります。
Delivery Controller上の外部パブリックCAおよびパブリック証明書
StoreFrontサーバーおよびCitrix Virtual Apps and Desktops Delivery Controllerは、パブリックCAによって発行された証明書を使用できます。StoreFrontは、CDP拡張機能で参照されたURLを使用して、インターネット経由でパブリックCAのWebサーバーと通信できる必要があります。パブリック証明書が失効した後、StoreFrontがCDP URLを使用してCRLのコピーをダウンロードできない場合、StoreFrontはCRLチェックを実行できなくなります。
証明書失効ポリシーの設定
Citrix StoreFrontのPowerShellコマンドレットGet-STFStoreFarmConfigurationおよびSet-STFStoreFarmConfigurationを使用して、ストアの証明書失効ポリシーを設定します。Get-Help Set-STFStoreFarmConfiguration -detailedを実行すると、PowerShellのヘルプとオプション-CertRevocationPolicyの例を表示します。これらのStoreFront PowerShellコマンドレットについて詳しくは、Citrix StoreFront SDK PowerShell Modulesを参照してください。
-CertRevocationPolicyオプションは、以下の値に設定できます:
設定 | 説明 |
---|---|
NoCheck | StoreFrontは、Delivery Controller上の証明書の失効状態をチェックしません。StoreFrontは、失効した証明書を使用するDelivery Controllerからのリソースを列挙し続けます。これがデフォルトの設定です。 |
MustCheck | これは最も安全なオプションです。StoreFrontは、Delivery Controller上の証明書のCDP拡張機能で参照されているURLにアクセスして、CRLの取得を試みます。CRLが利用できない場合、またはDelivery Controllerで使用されている証明書が失効している場合、StoreFrontはDelivery Controllerからの列挙に失敗します。URLは、証明書がプライベートの場合は内部Webサーバーを指し、証明書がパブリックCAによって発行された場合はパブリックインターネットWebサーバーを指します。 |
FullCheck | StoreFrontは、Delivery Controller証明書のCDP拡張機能で公開されているURLへの接続を試みます。StoreFrontがこれらのURLからCRLのコピーの取得に失敗した場合でも、Delivery Controllerからのリソースの列挙を許可します。StoreFrontがCRLを正常に取得しても、Delivery Controllerの証明書が失効している場合、StoreFrontはリソースを列挙しません。URLは、証明書がプライベートの場合は内部Webサーバーを指し、証明書がパブリックCAによって発行された場合はパブリックインターネットWebサーバーを指します。 |
NoNetworkAccess | StoreFrontサーバー上のCitrix Delivery Server証明書ストアにローカルにインポートされたCRLのみがチェックされます。StoreFrontは、CDP拡張機能で指定されたURLへの接続を試みません。StoreFrontがCRLのローカルコピーの取得に失敗した場合でも、Delivery Controllerからのリソースの列挙を許可します。StoreFrontがCitrix Delivery Server証明書ストアからCRLのローカルコピーを正常に取得しても、Delivery Controllerの証明書が失効している場合、StoreFrontはリソースを列挙しません。 |
ストアで証明書失効チェックを構成する
ストアの証明書失効ポリシーを設定するには、[管理者として実行]でPowerShell ISEを開いて、次のPowerShellコマンドレットを実行します。複数のストアがある場合、この手順をすべてのストアで繰り返します。-CertRevocationPolicyは、$StoreVirtualPathで指定されたストアに構成されたすべてのDelivery Controllerに影響を与えるストアレベルの設定です。
$SiteID = 1
$StoreVirtualPath = "/Citrix/Store"
$StoreObject = Get-STFStoreService -SiteId $SiteID -VirtualPath
$StoreVirtualPath
Set-STFStoreFarmConfiguration -StoreService $StoreObject -CertRevocationPolicy "MustCheck"
<!--NeedCopy-->
設定が正しく適用されたことを確認する、または現在の -CertRevocationPolicy構成を表示するには、次を実行します:
(Get-STFStoreFarmConfiguration -StoreService $StoreObject).CertRevocationPolicy
<!--NeedCopy-->
StoreFrontサーバーでローカルにインポートされたCRLを使用する
ローカルにインポートされたCRLの使用はサポートされていますが、Citrixでは推奨されていません。 以下はその理由です:
- 大規模な環境では複数のStoreFrontサーバーグループが関係する可能性があるため、管理や更新が困難になります。
- 証明書が失効するたびにすべてのStoreFrontサーバーのCRLを手動で更新すると、Active Directoryドメイン全体でCDP拡張機能および公開されたCRLを使用する場合に比べて、大幅に効率が低下します。
-CertRevocationPolicyが「NoNetworkAccess」に設定されている場合、ローカルでインストールされているまたは更新されたCRLを使用して、CRLをすべてのStoreFrontサーバーに効率的に配布できます。
ローカルにインポートされたCLRを使用するには
-
CRLをStoreFrontサーバーのデスクトップにコピーします。StoreFrontサーバーがサーバーグループの一部である場合は、グループ内のすべてのStoreFrontサーバーにコピーします。
-
MMCスナップインを開いて [ファイル]>[スナップインの追加と削除]>[証明書]>[コンピューターアカウント]>[Citrix Delivery Servicesの証明書ストア] を選択します。
-
右クリックして [すべてのタスク]>[インポート] を選択し、.CRLファイルを参照して[すべてのファイル]>[開く]>[証明書をすべて次のストアに配置する]>[Citrix Delivery Services] を選択します。
PowerShellまたはコマンドラインでCRLをCitrix Delivery Service証明書ストアに追加するには
-
StoreFrontにログインし、 .CRLファイルを現在のユーザーのデスクトップにコピーします。
-
PowerShell ISEを開き、[管理者として実行] を選択します。
-
以下を実行します:
certutil -addstore "Citrix Delivery Services" "$env:UserProfile\Desktop\Example-DC01-CA.crl"
正常に実行されると、次の値が返されます:
Citrix Delivery Services
CRL "CN=Example-DC01-CA, DC=example, DC=com" added to store.
CertUtil: -addstore command completed successfully.
このコマンドは、スクリプト経由で自動的に環境のすべてのStoreFront サーバーにCRLを配布する場合に使用できます。
Delivery Controllerを使用したXML認証
StoreFrontを構成して、ユーザー認証をCitrix Virtual Apps and Desktops Delivery Controllerに委任できます。Delivery Controllerの証明書が失効した場合、ユーザーはStoreFrontにサインインできなくなります。認証を担当するCitrix Virtual Apps and Desktops Delivery Controller上の証明書が失効している場合、Active DirectoryユーザーをStoreFrontにサインインできなくする必要があるため、これは望ましい動作です。
ユーザー認証をDelivery Controllerに委任するには
-
前のセクション「ストアで証明書失効チェックを構成する」で説明したように、ストアで証明書の失効を構成します。
-
「XMLサービスベースの認証」の手順に従って、Delivery ControllerでHTTPSの使用を構成します。
XML認証サービスで証明書失効チェックを構成する
以下の手順は、展開でXML認証を使用している場合にのみ必要です。
注:
StoreFrontでは、ストアを認証サービスにマッピングするために2つの方法を利用できます。推奨される方法は、ストアと認証サービスの1対1のマッピングです。この場合、すべてのストアと関連する認証サービスに対して、このセクションの手順を実行する必要があります。
ストアと認証サービスの両方で、証明書失効モードが同じ値に設定されていることを確認してください。また、すべてのストアが同一の認証構成を使用している場合、複数のストアが単一の認証サービスを共有するように構成できます。
認証サービスのPowerShellコマンドレットにはSet-STFStoreFarmConfigurationに相当する値がないため、PowerShellの使用方法は多少異なります。前のセクションで説明したものと同じ証明書失効ポリシーの設定を使用します。
-
PowerShell ISEを開き、[管理者として実行] を選択します。
$SiteID = 1 $StoreVirtualPath = "/Citrix/Store" $AuthVirtualPath = "/Citrix/StoreAuth" <!--NeedCopy-->
-
XML認証で使用されるストアサービス、認証サービス、 Delivery Controllerを選択します。Delivery Controllerが既にストアで構成されていることを確認してください。
$StoreObject = Get-STFStoreService -SiteId $SiteID -VirtualPath $StoreVirtualPath $FarmObject = Get-STFStoreFarm -StoreService $StoreObject -FarmName "CVAD" $AuthObject = Get-STFAuthenticationService -SiteID $SiteID -VirtualPath $AuthVirtualPath <!--NeedCopy-->
-
認証サービスのCertRevocationPolicy プロパティを直接編集します。
$AuthObject.FarmsConfiguration.CertRevocationPolicy = "FullCheck" $AuthObject.Save() Enable-STFXmlServiceAuthentication -AuthenticationService $AuthObject -Farm $FarmObject <!--NeedCopy-->
-
正しい証明書失効モードを設定したことを確認してください。
$AuthObject = Get-STFAuthenticationService -SiteID 1 -VirtualPath $AuthVirtualPath $AuthObject.FarmsConfiguration.CertRevocationPolicy <!--NeedCopy-->
Windowsイベントビューアーで予想されるエラー
CRLチェックが有効な場合、エラーはStoreFrontサーバーのWindowsイベントビューアーで報告されます。
イベントビューアーを開くには:
- StoreFrontサーバーで Run と入力します。
- eventvwrと入力して、Enterキーを押します。
- [アプリケーションとサービス]で、Citrix Delivery Serviceイベントを探します。
エラー例:ストアが失効した証明書を使用しているDelivery Controllerに接続できない
An SSL connection could not be established: An error occurred during SSL crytography: Access is denied.
This message was reported from the Citrix XML Service at address https://deliverycontrollerTLS.domain.com/scripts/wpnbr.dll.
The specified Citrix XML Service could not be contacted and has been temporarily removed from the list of active services.
<!--NeedCopy-->
エラー例:Receiver for WebでXML認証の失敗によりユーザーがログインできない場合
An unexpected response was received during the authentication process.
Citrix.DeliveryServicesClients.Authentication.Exceptions.ExplicitAuthenticationFailure,
Citrix.DeliveryServicesClients.Authentication, Version=3.20.0.0,
Culture=neutral, PublicKeyToken=null
General Authentication Failure
ExplicitResult.State: 5
AuthenticationControllerRequestUrl:
https://storefront.example.com/Citrix/StoreWeb/ExplicitAuth/LoginAttempt
ActionType: LoginAttempt
at
Citrix.Web.AuthControllers.Controllers.ExplicitAuthController.GetExplicitAuthResult(ActionType
type, Dictionary`2 postParams)
<!--NeedCopy-->