デリバリーコントローラーで TLS を有効にする

デフォルトでは、HTTP と HTTPS の両方が有効になっています。HTTPS は、サーバーの FQDN を共通名として使用する自己署名証明書を使用しますが、これは StoreFront™ や Web ブラウザーでは信頼されません。

delivery controller™ で TLS を有効にするには、次の操作を行う必要があります。

証明書のリクエストとインストール

TLS を使用するには、共通名またはサブジェクトの別名がサーバーの FQDN と一致する証明書をインストールする必要があります。Delivery Controller の前にロードバランサーを使用している場合は、サーバーとロードバランサーの両方の FQDN をサブジェクトの別名として含めます。詳細については、「証明書」を参照してください。StoreFront が Delivery Controller に接続するには、RSA デジタル署名アルゴリズムを使用する必要があります。StoreFront は ECDSA アルゴリズムを使用する証明書をサポートしていません。

SSL/TLS リスナーポートの構成

Web Studio および Director の一部としてインストールされる IIS Windows コンポーネントが同じサーバーにインストールされている場合は、IIS を使用して TLS を構成できます。詳細については、「Web Studio および Director で TLS を有効にする」を参照してください。それ以外の場合は、PowerShell を使用して証明書を構成するには、次の手順を実行します。

  1. 既存の証明書がバインドされているかどうかを確認するには、コマンドプロンプトを開いて netsh http show sslcert を実行します。

    netsh http show sslcert
    <!--NeedCopy-->
    
  2. 既存のバインディングがある場合は、それを削除します。

    netsh http delete sslcert ipport=0.0.0.0:443
    <!--NeedCopy-->
    

    既存のバインディングで指定されていた場合は、0.0.0.0:443 を特定の IP アドレスとポートに置き換えます。

  3. 以前にインストールした証明書のサムプリントを見つけます。サムプリントを表示するには、コンピューター証明書の管理を開き、証明書を参照して開き、詳細タブに移動します。

    サムプリントを示す証明書のプロパティのスクリーンショット(/ja-jp/citrix-virtual-apps-desktops/2503/media/certificate-thumbprint.png)

    または、PowerShellを使用することもできます。たとえば、次のスクリプトは、共通名がサーバーのホスト名と一致する証明書を検索し、サムネイルを出力します。

    $HostName = ([System.Net.Dns]::GetHostByName(($env:computerName))).Hostname
    $Thumbprint = (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match ("CN=" + $HostName)}).Thumbprint -join ';'
    Write-Host -Object "Certificate Thumbprint for $($HostName): $($Thumbprint)" -Foreground Yellow
    <!--NeedCopy-->
    

    証明書の共通名がホスト名と一致しない場合、これは失敗します。ホスト名に対して複数の証明書がある場合、これは連結された複数のサムプリントを返し、適切なサムプリントを選択する必要があります。

    次の例は、フレンドリ名で証明書を検索します。

    $friendlyName = "My certificate name"
    $Thumbprint = (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.FriendlyName -eq $friendlyNam}).Thumbprint -join ';'
    Write-Host -Object "Certificate Thumbprint for $friendlyName: $($Thumbprint)" -Foreground Yellow
    <!--NeedCopy-->
    

    指定されたフレンドリ名を持つ証明書が複数ある場合、これは連結された複数のサムプリントを返し、適切なサムプリントを選択する必要があります。

  4. 証明書をポートにバインドするには、netsh http add sslcertコマンドを使用します。

    netsh http add sslcert ipport=[IP address]:443 certhash=[certificate hash] appid=[application GUID] disablelegacytls=enable
    <!--NeedCopy-->
    
    • ipport: IPアドレスとポート。0.0.0.0:443を使用すると、すべてのIPアドレスに適用されます。代わりに、特定のIPアドレスを指定することもできます。

    • certhash: 前のステップで特定した証明書のサムプリント。

    • appid: Citrix Broker サービスのグローバル一意識別子。

      注:

      証明書を更新または再バインドする際は、任意のGUIDではなく、Broker Serviceに関連付けられた特定のappidを使用してください。

      Citrix Broker Service に対応する正しい appid を見つけるには、以下の手順を実行します。

      1. 管理者としてPowerShellコマンドウィンドウを開き、次のコマンドを実行します。

         Get-WmiObject -Class Win32_Product | Select-String -Pattern "broker"
         <!--NeedCopy-->
        
      2. 出力でCitrix Broker Serviceの識別番号 (GUID) を見つけます (例: {D333C884-187F-447C-8C67-463F33989C8F})。このGUIDをappidパラメーターに使用します。

    • disablelegacytls=enable: レガシーバージョンのTLSを無効にします。このパラメーターはWindows 2022以降で利用可能です。Windows 2022ではTLS 1.0と1.1を無効にします。Windows 2025では、TLS 1.0と1.1がデフォルトで無効になっているため、これは不要です。

    たとえば、すべてのIPアドレスで、サムプリント bc96f958848639fd101a793b87915d5f2829b0b6 の証明書をポート 443 にバインドするには、次のコマンドを実行します。

    netsh http add sslcert ipport=0.0.0.0:443 certhash=bc96f958848639fd101a793b87915d5f2829b0b6 appid={91fe7386-e0c2-471b-a252-1e0a805febac} disablelegacytls=enable
    <!--NeedCopy-->
    

HTTPSが有効になったら、StoreFront展開 とNetScaler Gatewayを、デリバリーコントローラーへの接続にHTTPではなくHTTPSを使用するように構成します。

HTTPS 用のモニターサービス OData API を構成する

モニターサービスは、Citrix®およびサードパーティアプリケーションがデータを照会できるように、OData v3およびv4 APIを提供します。DirectorはOData API V3を使用して監視サービスに接続します。HTTPS 用のモニター OData API を構成するには、次の手順を完了します。

  1. 次のPowerShellを実行します。

    $serviceGroup = Get-ConfigRegisteredServiceInstance -ServiceType Monitor | Select -First 1 ServiceGroupUid
    Remove-ConfigServiceGroup -ServiceGroupUid $serviceGroup.ServiceGroupUid
    & 'C:\Program Files\Citrix\Monitor\Service\citrix.monitor.exe' -ConfigureFirewall -RequireODataTls OdataPort 443 -RequireODataSdkTls OdataSdkPort 443
    get-MonitorServiceInstance | register-ConfigServiceInstance
    Get-ConfigRegisteredServiceInstance -ServiceType Config | Reset-MonitorServiceGroupMembership
    <!--NeedCopy-->
    
  2. テキストエディターでファイル C:\Program Files\Citrix\Monitor\Service\Citrix.Monitor.exe.Config を開きます。要素 <add key="owin:baseAddress" value="http://localhost/citrix/monitor/odata/v4" /> を見つけて <add key="owin:baseAddress" value="https://localhost/citrix/monitor/odata/v4" /> に変更します。

暗号スイートを構成する

暗号スイートの順序リストには、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 または TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 の暗号スイート(またはその両方)を含める必要があります。また、これらの暗号スイートは、TLS_DHE_ の暗号スイートよりも前に配置する必要があります。

  1. Microsoft グループポリシーエディターを使用して、コンピューターの構成 > 管理用テンプレート > ネットワーク > SSL 構成設定 に移動します。
  2. 「SSL 暗号スイートの順序」ポリシーを編集します。デフォルトでは、このポリシーは「未構成」に設定されています。このポリシーを「有効」に設定します。
  3. スイートを正しい順序に並べ替えます。使用したくない暗号スイートはすべて削除します。

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 または TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 のいずれかが、TLS_DHE_ の暗号スイートよりも前に配置されていることを確認してください。

Microsoft Learn で、TLS 暗号スイートの順序の構成 も参照してください。

HTTPS トラフィックのみを強制する

XMLサービスを構成してHTTPトラフィックを無視することをお勧めします。

  1. regedit を実行します
  2. HKLM\Software\Citrix\DesktopServer\ を開きます
  3. XmlServicesEnableNonSsl という名前で新しいDWORD値を作成し、0に設定します。
  4. ブローカーサービスを再起動します。

HTTPSトラフィックを無視するために作成できる対応するレジストリDWORD値 XmlServicesEnableSsl があります。これが0に設定されていないことを確認してください。

HTTPまたはHTTPSポートを変更する

デフォルトでは、Controller上のXMLサービスはHTTPトラフィックにはポート80を、HTTPSトラフィックにはポート443をリッスンします。デフォルト以外のポートを使用することもできますが、Controllerを信頼できないネットワークに公開することによるセキュリティリスクに注意してください。デフォルトを変更するよりも、スタンドアロンのStoreFrontサーバーを展開する方が望ましいです。

Controllerで使用されるデフォルトのHTTPまたはHTTPSポートを変更するには、Studioから次のコマンドを実行します。

BrokerService.exe -StoreFrontPort <http-port> -StoreFrontTlsPort <https-port>
<!--NeedCopy-->

ここで、

  • <http-port> はHTTPトラフィックのポート番号です
  • <https-port> はHTTPSトラフィックのポート番号です。

注:

ポートを変更した後、Studioはライセンスの互換性とアップグレードに関するメッセージを表示する場合があります。この問題を解決するには、次のPowerShellコマンドレットシーケンスを使用してサービスインスタンスを再登録します。

Get-ConfigRegisteredServiceInstance -ServiceType Broker -Binding XML_HTTPS |
Unregister-ConfigRegisteredServiceInstance
Get-BrokerServiceInstance | where Binding -eq "XML_HTTPS" |
Register-ConfigServiceInstance
<!--NeedCopy-->
デリバリーコントローラーで TLS を有効にする