Citrix Virtual Apps and Desktops

在 Delivery Controller 上启用 TLS

默认情况下,HTTP 和 HTTPS 都处于启用状态。 HTTPS 使用将服务器的 FQDN 用作公用名的自签名证书,这不受 StoreFront 或 Web 浏览器信任。

要在 Delivery Controller 上启用 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 地址和端口,则用特定的 IP 地址和端口替换 0.0.0.0:443

  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 地址。

    • appid - 用于识别添加了绑定的应用程序的任意 GUID。 可以使用任何有效的 GUID,例如 {91fe7386-e0c2-471b-a252-1e0a805febac}

    • 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 连接到 Delivery Controller。

为 HTTPS 配置 Monitor Service OData API

Monitor Service 提供 OData v3 和 v4 API,以允许 Citrix 和第三方应用程序查询数据。 Director 使用 OData API V3 连接到监视服务。 要为 HTTPS 配置 Monitor 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。 找到元素 &lt;add key="owin:baseAddress" value="http://localhost/citrix/monitor/odata/v4" /&gt; 并将其更改为 &lt;add key="owin:baseAddress" value="https://localhost/citrix/monitor/odata/v4" /&gt;

配置密码套件

密码套件顺序列表必须包括 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-->

其中 &lt;http-port&gt; 为 HTTP 流量的端口号,&lt;https-port&gt; 为 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