在交付控制器上启用 TLS

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

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

证书的请求和安装过程

要使用 TLS,您必须安装一个证书,其公用名或主题备用名称与服务器的 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. 找到您之前安装的证书的指纹。要查看指纹,请打开管理计算机证书,浏览到该证书并将其打开,然后转到详细信息选项卡。

    显示指纹的证书属性屏幕截图(/zh-cn/citrix-virtual-apps-desktops/2411/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 代理服务的正确 appid

      1. 以管理员身份打开 PowerShell 命令窗口并运行以下命令:

         Get-WmiObject -Class Win32_Product | Select-String -Pattern "broker"
         <!--NeedCopy-->
        
      2. 在输出中找到 Citrix Broker Service 的标识号(全局唯一标识符)(例如,{D333C884-187F-447C-8C67-463F33989C8F})。将此全局唯一标识符用于 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 Gateway,以使其通过 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. 重新启动 Broker 服务。

有一个相应的注册表 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-->
在交付控制器上启用 TLS