Citrix Virtual Apps and Desktops

在交付控制器上启用 TLS

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

要在交付控制器™上启用 TLS,您必须:

证书的请求与安装过程

要使用 TLS,您必须安装一个证书,其公用名或主题备用名称与服务器的 FQDN 匹配。如果您在交付控制器前面使用负载均衡器,则将服务器和负载均衡器的 FQDN 都包含为主题备用名称。有关详细信息,请参阅证书。要使 StoreFront 连接到交付控制器,您必须使用 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. 查找您之前安装的证书的指纹。要查看指纹,请打开管理计算机证书,浏览到该证书并将其打开,然后转到详细信息选项卡。

    显示指纹的证书属性屏幕截图(/zh-cn/citrix-virtual-apps-desktops/2511/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 Service 关联的特定 appid,而不是任意 GUID。 要查找 Citrix Broker Service 的正确 appid

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

    例如,运行以下命令将指纹为 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 网关 以使用 HTTPS 而非 HTTP 连接到交付控制器。

配置监视服务 OData API 以支持 HTTPS

监视服务提供 OData v3 和 v4 API,允许 Citrix® 和第三方应用程序查询数据。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_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. 重新启动代理服务。

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

更改 HTTP 或 HTTPS 的端口

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

要更改控制器使用的默认 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-->
在交付控制器上启用 TLS