Citrix Virtual Apps and Desktops

在 Delivery Controller 上启用 TLS

默认情况下,HTTP 和 HTTPS 均已启用。HTTPS 使用服务器的 FQDN 作为公用名(Common Name)的自签名证书,此证书不受 StoreFront™ 或 Web 浏览器的信任。

请求和安装证书

要使用 TLS,您需要安装一个证书,其公用名(Common Name)或主题备用名称(Subject Alternative Name)与服务器的 FQDN(完全限定域名)匹配。如果您在 Delivery Controller 前面使用负载均衡器,则应将服务器和负载均衡器的 FQDN 都包含在主题备用名称中。有关详细信息,请参阅证书。StoreFront 要连接到 Delivery Controller,您必须使用 RSA 数字签名算法。StoreFront 不支持使用 ECDSA 算法的证书。

配置 SSL/TLS 侦听器端口

如果 IIS Windows 组件安装在与 Web Studio 和 Director 相同的服务器上,则可以使用 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-->
    

    如果现有绑定中指定了特定的 IP 地址和端口,请将 0.0.0.0:443 替换为该 IP 地址和端口。

  3. 查找您之前安装的证书的指纹。要查看指纹,请打开管理计算机证书,浏览到该证书并将其打开,然后转到详细信息选项卡。

    显示证书指纹的屏幕截图

    • 或者,您可以使用 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 Service 的 GUID。

      注意:

      续订证书或重新绑定时,请使用与 Broker Service 关联的特定 appid,而不是任意 GUID。 要查找 Citrix Broker Service 的正确 appid

      1. 以管理员身份打开 PowerShell 命令窗口并运行以下命令:
       ```
       Get-WmiObject -Class Win32_Product | Select-String -Pattern "broker"
       <!--NeedCopy--> ```
      
      1. 在输出中找到 Citrix Broker Service 的 IdentifyingNumber (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 默认处于禁用状态。

    例如,运行以下命令以将指纹为 bc96f958848639fd101a793b87915d5f2829b0b6 的证书绑定到所有 IP 地址上的端口 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 Gateways,以使用 HTTPS 而不是 HTTP 连接到 Delivery Controller。

  • 为监视服务 OData API 配置 HTTPS

监视服务提供 OData v3 和 v4 API,以允许 Citrix® 和第三方应用程序查询数据。Director 使用 OData API V3 连接到监视服务。要为监视 OData API 配置 HTTPS,请完成以下步骤:

  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_SHA384TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 密码套件(或两者);并且这些密码套件必须位于任何 TLS_DHE_ 密码套件之前。

  1. 使用 Microsoft 组策略编辑器,浏览到计算机配置 > 管理模板 > 网络 > SSL 配置设置
  2. 编辑策略“SSL 密码套件顺序”。默认情况下,此策略设置为“未配置”。将此策略设置为“已启用”。
  3. 按正确顺序排列套件。删除您不想使用的任何密码套件。

确保 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 位于任何 TLS_DHE_ 密码套件之前。

在 Microsoft Learn 上,另请参阅配置 TLS 密码套件顺序

仅强制执行 HTTPS 流量

建议您将 XML Service 配置为忽略 HTTP 流量。

  1. 运行 regedit
  2. 打开 HKLM\Software\Citrix\DesktopServer\
  3. 创建一个名为 XmlServicesEnableNonSsl 的新 DWORD 值并将其设置为 0。
  4. 重新启动 Broker Service。

有一个相应的注册表 DWORD 值 XmlServicesEnableSsl,您可以创建它来忽略 HTTPS 流量。确保它未设置为 0。

更改 HTTP 或 HTTPS 端口

默认情况下,Controller 上的 XML Service 侦听端口 80 以处理 HTTP 流量,侦听端口 443 以处理 HTTPS 流量。尽管您可以使用非默认端口,但请注意将 Controller 暴露给不受信任网络的安全风险。部署独立的 StoreFront 服务器优于更改默认设置。

要更改 Controller 使用的默认 HTTP 或 HTTPS 端口,请从 Studio 运行以下命令:

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

其中:

  • <http-port> 是 HTTP 流量的端口号
  • <https-port> 是 HTTPS 流量的端口号。

注意:

更改端口后,Studio 可能会显示有关许可证兼容性和升级的消息。要解决此问题,请使用以下 PowerShell cmdlet 序列重新注册服务实例:

Get-ConfigRegisteredServiceInstance -ServiceType Broker -Binding XML_HTTPS |
Unregister-ConfigRegisteredServiceInstance
Get-BrokerServiceInstance | where Binding -eq "XML_HTTPS" |
Register-ConfigServiceInstance
<!--NeedCopy-->
在 Delivery Controller 上启用 TLS