証明書失効一覧(CRL)のチェック

はじめに

StoreFrontで、 CVAD Delivery Controllerが使用するTLS証明書の状態を公開された証明書失効一覧(CRL)を使用して確認するよう構成できます。 次の場合、証明書へのアクセスの取り消しが必要なことがあります:

  • 秘密キーが侵害された可能性がある
  • CAが侵害された
  • 所属が変更された
  • 証明書が置き換えられた

注:

このトピックは、StoreFrontと Citrix Virtual Apps and Desktop 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にアクセスする必要があります。

CLR拡張ポイントの拡張

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"

設定が正しく適用されたことを確認する、または現在の -CertRevocationPolicy構成を表示するには、次を実行します:

(Get-STFStoreFarmConfiguration -StoreService $StoreObject).CertRevocationPolicy

StoreFrontサーバーでローカルにインポートされたCRLを使用する

ローカルにインポートされたCRLの使用はサポートされていますが、推奨されていません。 以下はその理由です:

  • 大規模な環境では複数のStoreFrontサーバーグループが関係する可能性があるため、管理や更新が困難になります。

  • 証明書が失効するたびにすべてのStoreFrontサーバーのCRLを手動で更新すると、Active Directoryドメイン全体でCDP拡張機能および公開されたCRLを使用する場合に比べて、大幅に効率が低下します。

-CertRevocationPolicyが「NoNetworkAccess」に設定されている場合、ローカルでインストールされているまたは更新されたCRLを使用して、CRLをすべてのStoreFrontサーバーに効率的に配布できます。

ローカルにインポートされたCLRを使用するには

  1. CRLをStoreFrontサーバーのデスクトップにコピーします。StoreFrontサーバーがサーバーグループの一部である場合は、グループ内のすべてのStoreFrontサーバーにコピーします。

  2. MMCスナップインを開いて [ファイル]>[スナップインの追加と削除]>[証明書]>[コンピューターアカウント]>[Citrix Delivery Servicesの証明書ストア] を選択します。

  3. 右クリックして [すべてのタスク]>[インポート] を選択し、.CRLファイルを参照して [すべてのファイル]>[開く]>[証明書をすべて次のストアに配置する]>[Citrix Delivery Services] を選択します。

    証明書失効リスト

PowerShellまたはコマンドラインでCRLをCitrix Delivery Service証明書ストアに追加するには

  1. StoreFrontにログインし、.CRLファイルを現在のユーザーのデスクトップにコピーします。

  2. PowerShell ISEを開き、[管理者として実行] を選択します。

  3. 以下を実行します:

    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に委任するには

  1. ストアで証明書失効チェックを構成する」で説明したように、ストアで証明書の失効を構成します。

  2. XMLサービスベースの認証」の手順に従って、Delivery ControllerでHTTPSの使用を構成します。

XML認証サービスで証明書失効チェックを構成する

以下の手順は、展開でXML認証を使用している場合にのみ必要です 。

注:

StoreFrontでは、ストアを認証サービスにマッピングするために2つの方法を利用できます。 推奨される方法は、ストアと認証サービスの1対1のマッピングです 。この場合、すべてのストアと関連する認証サービスに対して、このセクションの手順を実行する必要があります 。

ストアと認証サービスの両方で、証明書失効モードが同じ値に設定されていることを確認してください 。また、すべてのストアが同一の認証構成を使用している場合、複数のストアが単一の認証サービスを共有するように構成できます。

認証サービスのPowerShellコマンドレットには Set-STFStoreFarmConfigurationに相当する値がないため、PowerShellの使用方法は多少異なります 。前述の証明書失効ポリシーの設定と同じ設定を使用します。

  1. PowerShell ISEを開き、[管理者として実行] を選択します。

    $SiteID = 1
    $StoreVirtualPath = "/Citrix/Store"
    $AuthVirtualPath = "/Citrix/StoreAuth"
    
  2. 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
    
  3. 認証サービスのCertRevocationPolicyプロパティを直接編集します。

    $AuthObject.FarmsConfiguration.CertRevocationPolicy = "FullCheck"
    $AuthObject.Save()
    Enable-STFXmlServiceAuthentication -AuthenticationService $AuthObject -Farm $FarmObject
    
  4. 正しい証明書失効モードを設定したことを確認してください。

    $AuthObject = Get-STFAuthenticationService -SiteID 1 -VirtualPath $AuthVirtualPath
    $AuthObject.FarmsConfiguration.CertRevocationPolicy
    

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.

エラー例: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)