XenApp and XenDesktop

传输层安全 (TLS)

配置 XenApp 或 XenDesktop® 站点以使用传输层安全 (TLS) 协议包括以下步骤:

  • 在所有 Delivery Controller 上获取、安装和注册服务器证书,并使用 TLS 证书配置端口。有关详细信息,请参阅 在 Controller 上安装 TLS 服务器证书

    您可以选择更改 Controller 用于侦听 HTTP 和 HTTPS 流量的端口。

  • 通过完成以下任务,启用用户与虚拟投递代理 (VDA) 之间的 TLS 连接:

    要求和注意事项:

    • 在用户和 VDA 之间启用 TLS 连接仅适用于 XenApp 7.6 和 XenDesktop 7.6 站点以及更高版本支持的版本。
    • 在安装组件、创建站点、创建计算机目录和创建交付组之后,在交付组和 VDA 上配置 TLS。
    • 要在交付组中配置 TLS,您必须具有更改 Controller 访问规则的权限;完全管理员拥有此权限。
    • 要在 VDA 上配置 TLS,您必须是安装 VDA 的计算机上的 Windows 管理员。
    • 如果您打算在从早期版本升级的 VDA 上配置 TLS,请在升级这些计算机之前卸载其上的任何 SSL 中继软件。
    • PowerShell 脚本在静态 VDA 上配置 TLS;它不会在由机器创建服务™ 或预配服务预配的池化 VDA 上配置 TLS,因为这些 VDA 的计算机映像会在每次重新启动时重置。

警告:

对于涉及 Windows 注册表操作的任务 — 错误编辑注册表可能会导致严重问题,甚至可能需要重新安装操作系统。Citrix® 无法保证能够解决因不正确使用注册表编辑器而导致的问题。请自行承担使用注册表编辑器的风险。在编辑注册表之前务必备份注册表。

有关为站点数据库启用 TLS 的信息,请参阅 CTX137556

注意:

如果在 VDA 上同时启用了 TLS 和 UDT:

  • 对于直接访问虚拟桌面代理,Citrix Receiver™ 始终使用基于 TCP 的 TLS(而非 UDP 和 UDT)。
  • For indirect access to the VDA using NetScaler® Gateway, Citrix Receiver uses DTLS over UDP for communication with NetScaler Gateway. The communication between NetScaler Gateway and the VDA uses UDP without DTLS. UDT is used.

在控制器上安装 TLS 服务器证书

对于 HTTPS,XML Service 通过使用服务器证书(而非客户端证书)支持 TLS 功能。本节介绍如何在 Delivery Controller 中获取和安装 TLS 证书。相同的步骤也可应用于 Cloud Connector,以加密 STA 和 XML 流量。

尽管有各种不同类型的证书颁发机构以及从它们请求证书的方法,但本文介绍 Microsoft 证书颁发机构。Microsoft 证书颁发机构需要发布一个用途为“服务器身份验证”的证书模板。

如果 Microsoft 证书颁发机构集成到 Delivery Controller 所加入的 Active Directory 域或受信任林中,您可以从“证书”MMC 管理单元的“证书注册向导”中获取证书。

证书的请求与安装方法

  1. 在 Delivery Controller™ 上,打开 MMC 控制台并添加“证书”管理单元。出现提示时,选择“计算机帐户”。
  2. 展开 “个人”>“证书”,然后使用 “所有任务”>“请求新证书” 上下文菜单命令。

    MMC 证书管理单元

  3. 单击 “下一步” 开始,然后单击 “下一步” 确认您正在从 Active Directory 注册中获取证书。
  4. 选择服务器身份验证证书的模板。如果模板已设置为自动提供 Subject 的值,您可以单击“注册”而无需提供更多详细信息。

    请求证书对话框(/zh-cn/xenapp-and-xendesktop/7-15-ltsr/media/tls-request-certificates.png)

  5. 要为证书模板提供更多详细信息,请单击“详细信息”箭头按钮并配置以下内容:

    主题名称:选择通用名称并添加交付控制器的 FQDN。

    备用名称:选择 DNS 并添加交付控制器的 FQDN。

    证书属性(/zh-cn/xenapp-and-xendesktop/7-15-ltsr/media/tls-certificate-properties.png)

配置 SSL/TLS 侦听器端口

  1. 以计算机管理员身份打开 PowerShell 命令窗口。
  2. 运行以下命令以获取 Broker Service 应用程序 GUID:

    New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
    
    $Service_Guid = Get-ChildItem HKCR:\Installer\Products -Recurse -Ea 0 | Where-Object { $key = $_; $_.GetValueNames() | ForEach-Object { $key.GetValue($_) } | Where-Object { $_ -like 'Citrix Broker Service' } } | Select-Object Name
    
    $Service_Guid.Name -match "[A-Z0-9]*$"
    
    $Guid = $Matches[0]
    
    [GUID]$Formatted_Guid = $Guid
    
    Remove-PSDrive -Name HKCR
    
    Write-Host "Broker Service Application GUID: $($Formatted_Guid)" -ForegroundColor Yellow
    <!--NeedCopy-->
    
  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-->
    
  4. 在同一 PowerShell 窗口中运行以下命令,以配置 Broker Service SSL/TLS 端口并使用证书进行加密:

    $IPV4_Address = Test-Connection -ComputerName $HostName -Count 1  | Select-Object -ExpandProperty IPV4Address
    
    $IPPort = "$($IPV4_Address):443"
    
    $SSLxml = "http add sslcert ipport=$IPPort certhash=$Thumbprint appid={$Formatted_Guid}"
    
    $SSLxml | netsh
    
    . netsh http show sslcert
    <!--NeedCopy-->
    

正确配置后,上一个命令 .netsh http show sslcert 的输出显示侦听器正在使用正确的 IP:port,并且 Application ID 与 Broker Service 应用程序 GUID 匹配。

只要服务器信任安装在交付控制器上的证书,您现在就可以配置 StoreFront™ 交付控制器和 Citrix Gateway STA 绑定以使用 HTTPS 而不是 HTTP。

密码套件顺序列表应包含 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 密码套件(或两者)。这些密码套件必须位于任何 TLS_DHE_ 密码套件之前。

注意:

Windows Server 2012 does not support the GCM cipher suites TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 or TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.

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

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

在 微软 MSDN 上,另请参阅优先处理 Schannel 密码套件

更改 HTTP 或 HTTPS 的端口

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

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

BrokerService.exe -WIPORT http-port -WISSLPORT https-port

其中 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

仅强制执行 HTTPS 流量

如果您希望 XML 服务忽略 HTTP 流量,请在控制器上的 HKLM\Software\Citrix\DesktopServer\ 中创建以下注册表设置,然后重新启动 Broker 服务。

To ignore HTTP traffic, create DWORD XmlServicesEnableNonSsl and set it to 0.

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

VDA 上的 TLS 设置

交付组不能同时包含已配置 TLS 的 VDA 和未配置 TLS 的 VDA。为交付组配置 TLS 时,应已为该交付组中的所有 VDA 配置 TLS。

在 VDA 上配置 TLS 时,已安装的 TLS 证书的权限会发生更改,从而授予 ICA® Service 对证书私钥的读取访问权限,并通知 ICA Service 以下信息:

  • 证书存储中用于 TLS 的证书
  • 用于 TLS 连接的 TCP 端口号

必须配置 Windows 防火墙(如果已启用)以允许在此 TCP 端口上进行入站连接。使用 PowerShell 脚本时,此配置会自动完成。

  • 允许的 TLS 协议版本。

重要

Citrix 建议您检查 SSLv3 的使用情况,并在适当的情况下重新配置这些部署以删除对 SSLv3 的支持。请参阅 CTX200238

支持的 TLS 协议版本遵循以下层次结构(从低到高):SSL 3.0、TLS 1.0、TLS 1.1 和 TLS 1.2。您可以指定允许的最低版本。使用该版本或更高版本的所有协议连接都将被允许。

例如,如果将 TLS 1.1 指定为最低版本,则允许 TLS 1.1 和 TLS 1.2 协议连接。如果将 SSL 3.0 指定为最低版本,则允许所有受支持版本的连接。如果将 TLS 1.2 指定为最低版本,则只允许 TLS 1.2 连接。

  • 允许哪些 TLS 密码套件。

密码套件选择将用于连接的加密方式。客户端和 VDA 可以支持不同的密码套件集。当客户端(Citrix Receiver 或 StoreFront)连接并发送支持的 TLS 密码套件列表时,VDA 会将客户端的某个密码套件与其自身配置的密码套件列表中的某个密码套件进行匹配,并接受连接。如果没有匹配的密码套件,VDA 将拒绝连接。

VDA 支持三组密码套件(也称为合规模式):GOV(政府)、COM(商业)和 ALL(全部)。可接受的密码套件还取决于 Windows FIPS 模式;有关 Windows FIPS 模式的信息,请参阅 https://support.microsoft.com/kb/811833。下表列出了每组中的密码套件:

TLS 密码套件 GOV COM ALL GOV COM ALL
FIPS mode 启用 启用
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 x   x x   x
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 x   x x   x
TLS_RSA_WITH_AES_256_GCM_SHA384 x   x x   x
TLS_RSA_WITH_AES_128_GCM_SHA256 x x x x x x
TLS_RSA_WITH_AES_256_CBC_SHA256 x   x x   x
TLS_RSA_WITH_AES_256_CBC_SHA x   x x   x
TLS_RSA_WITH_AES_128_CBC_SHA   x x   x x
TLS_RSA_WITH_RC4_128_SHA   x x      
TLS_RSA_WITH_RC4_128_MD5   x x      
TLS_RSA_WITH_3DES_EDE_CBC_SHA x   x x   x

重要提示:

An extra step is necessary when the VDA is on Windows Server 2012 R2, Windows Server 2016, Windows 10 Anniversary Edition, or a later supported release. This affects connections from Citrix Receiver for Windows (version 4.6 through 4.9), Citrix Receiver for HTML5, and Citrix Receiver for Chrome. This also includes connections via NetScaler Gateway.

如果配置了 NetScaler Gateway 与 VDA 之间的 TLS,则所有使用 NetScaler Gateway 的连接(适用于所有 VDA 版本)也需要此步骤。这会影响所有 Citrix Receiver 版本。

在 VDA 上(Windows Server 2016 或 Windows 10 周年更新版或更高版本),使用组策略编辑器,转到 计算机配置 > 管理模板 > 网络 > SSL 配置设置 > SSL 密码套件顺序。选择以下顺序:

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384_P384
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384_P256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256
  • TLS_RSA_WITH_AES_256_GCM_SHA384
  • TLS_RSA_WITH_AES_128_GCM_SHA256
  • TLS_RSA_WITH_AES_256_CBC_SHA256
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_RC4_128_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA

注意:

前四项还指定了椭圆曲线 P384 或 P256。确保未选择“curve25519”。FIPS 模式不会阻止使用“curve25519”。

配置此组策略设置后,VDA 仅当密码套件同时出现在组策略列表和所选合规模式(COM、GOV 或 ALL)的列表中时,才会选择该密码套件。该密码套件还必须出现在客户端(Citrix Receiver 或 StoreFront)发送的列表中。

此组策略配置还会影响 VDA 上的其他 TLS 应用程序和服务。如果您的应用程序需要特定的密码套件,您可能需要将它们添加到此组策略列表中。

重要提示:

尽管组策略更改在应用时会显示,但 TLS 配置的组策略更改仅在操作系统重新启动后才会生效。因此,对于池化桌面,请将 TLS 配置的组策略更改应用到基础映像。

Configure TLS on a VDA using the PowerShell script

Enable-VdaSSL.ps1 脚本用于在 VDA 上启用或禁用 TLS 侦听器。此脚本位于安装介质的 Support >Tools > SslSupport 文件夹中。

启用 TLS 时,脚本会禁用指定 TCP 端口的所有现有 Windows 防火墙规则,然后添加一条新规则,允许 ICA 服务仅在 TLS TCP 端口上接受传入连接。它还会禁用以下 Windows 防火墙规则:

  • 思杰 ICA(默认端口号:1494)
  • 思杰 CGP(默认端口号:2598)
  • Citrix Web 套接字 (默认端口: 8008)

结果是用户只能使用 TLS 连接;他们不能在没有 TLS 的情况下使用 ICA/HDX、带有会话可靠性的 ICA/HDX 或通过 WebSocket 的 HDX。

请参阅 网络端口

注意:

对于无状态计算机(例如 PVS 目标或 MCS 克隆),默认使用 FQDN 证书。

该脚本包含以下语法说明以及额外的示例;您可以使用 Notepad++ 等工具查看此信息。

重要:

指定启用或禁用参数以及 CertificateThumbPrint 参数。其他参数是可选的。

语法

Enable-VdaSSL {-Enable | -Disable} -CertificateThumbPrint "<thumbprint>"
[–SSLPort <port>] [-SSLMinVersion "<min-ssl-version>"] [-SSLCipherSuite"<suite>"]
<!--NeedCopy-->
参数名称 描述信息
启用 在 VDA 上安装并启用 TLS 侦听器。此参数或 Disable 参数是必需的。
禁用 禁用 VDA 上的 TLS 侦听器。此参数或 Enable 参数是必需的。如果指定此参数,则其他参数无效。
CertificateThumbPrint “" 证书存储中 TLS 证书的指纹,用引号括起来。脚本使用指定的指纹来选择要使用的证书。如果省略此参数,则会选择不正确的证书。
SSLPort TLS 端口。默认值:443
SSLMinVersion “" 最小 TLS 协议版本,用引号括起来。有效值:“SSL_3.0”、“TLS_1.0”(默认)、“TLS_1.1”和“TLS_1.2”。重要提示: Citrix 建议客户审查其 SSLv3 的使用情况,并采取措施重新配置其部署,以在适当情况下删除对 SSLv3 的支持。请参阅 CTX200238
SSLCipherSuite “" TLS 密码套件,用引号括起来。有效值:“GOV”、“COM”和“ALL”(默认)。

示例

以下脚本安装并启用 TLS 1.2 协议版本值。指纹(在此示例中表示为“12345678987654321”)用于选择要使用的证书。

Enable-VdaSSL –Enable -CertificateThumbPrint "12345678987654321"

以下脚本安装并启用 TLS 侦听器,并指定 TLS 端口 400、GOV 密码套件和最小 TLS 1.2 协议值。指纹(在此示例中表示为“12345678987654321”)用于选择要使用的证书。

Enable-VdaSSL –Enable -CertificateThumbPrint "12345678987654321" –SSLPort 400 -SSLMinVersion "TLS_1.2" –SSLCipherSuite "All"

以下脚本禁用 VDA 上的 TLS 侦听器。

Enable-VdaSSL –Disable

手动配置 VDA 上的 TLS

在 VDA 上手动配置 TLS 时,您需要为每个 VDA 上的相应服务授予对 TLS 证书私钥的通用读取访问权限:对于 Windows 桌面操作系统 VDA,为 NT SERVICE\PorticaService;对于 Windows 服务器操作系统 VDA,为 NT SERVICE\TermService。在安装 VDA 的计算机上:

  1. Launch the Microsoft Management Console (MMC): Start > Run > mmc.exe.
  2. 将“证书”管理单元添加到 MMC:

    1. 选择文件 > 添加/删除管理单元
    2. 选择证书,然后单击添加
    3. 当系统提示此管理单元将始终管理以下对象的证书:时,选择计算机帐户,然后单击下一步
    4. 当系统提示选择此管理单元要管理的计算机时,选择本地计算机,然后单击完成
  3. 证书 (本地计算机) > 个人 > 证书下,右键单击证书,然后选择所有任务 > 管理私钥

  4. 访问控制列表编辑器显示“(友好名称)私钥的权限”,其中(友好名称)是您的 TLS 证书的名称。添加以下服务之一并授予其读取访问权限:

    • For a VDA for Windows Desktop OS, “PORTICASERVICE”
    • 对于 Windows 服务器操作系统 VDA,服务名称为“TERMSERVICE”
  5. 双击已安装的 TLS 证书。在证书对话框中,选择详细信息选项卡,然后滚动到底部。单击指纹

  6. Run regedit and go to HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\icawd.

    1. 编辑 SSL Thumbprint 键,并将 TLS 证书指纹的值复制到此二进制值中。您可以安全地忽略“编辑二进制值”对话框中的未知项(例如“0000”和特殊字符)。
    2. 编辑 SSLEnabled 键,并将 DWORD 值更改为 1。(要稍后禁用 SSL,请将 DWORD 值更改为 0。)
    3. 如果要更改默认设置(可选),请在同一注册表路径中使用以下内容:

      SSLPort 双字型 – SSL 端口号。默认值:443。

      SSL 最低版本 双字型 – 选项 1 为 SSL 3.0, 选项 2 为 TLS 1.0, 选项 3 为 TLS 1.1, 选项 4 为 TLS 1.2。默认值为 2 (即 TLS 1.0)。

      SSLCipherSuite DWORD – 1 = GOV, 2 = COM, 3 = ALL. Default: 3 (ALL).

  7. 如果 TLS TCP 端口不是默认的 443,请确保它在 Windows 防火墙中处于打开状态。(在 Windows 防火墙中创建入站规则时,请确保其属性已选择“允许连接”和“已启用”条目。)

  8. 确保没有其他应用程序或服务(例如 IIS)正在使用 TLS TCP 端口。

  9. 对于适用于 Windows Server 操作系统的 VDA,请重新启动计算机以使更改生效。(您无需重新启动包含适用于 Windows Desktop 操作系统的 VDA 的计算机。)

在交付组上配置 TLS

对于包含已配置为 TLS 连接的 VDA 的每个交付组,请完成此过程。

  1. 从 思杰工作室,打开 PowerShell 控制台。
  2. 运行 asnp Citrix.*,以便加载 思杰 产品的 cmdlet 命令。
  3. 运行 Get-BrokerAccessPolicyRule -DesktopGroupName 'delivery-group-name' | Set-BrokerAccessPolicyRule -HdxSslEnabled $true
  4. 运行 Set-BrokerSite -DnsResolutionEnabled $true

故障排除

如果发生连接错误,请检查 VDA 的系统事件日志。

使用适用于 Windows 的 Citrix Receiver 时,如果收到指示 TLS 错误的连接错误(例如 1030),请禁用 Desktop Viewer,然后尝试重新连接。尽管连接仍会失败,但可能会提供有关底层 TLS 问题的解释。(例如,您在向证书颁发机构请求证书时指定了不正确的模板。)

控制器与 VDA 之间的通信

Controller 与 VDA 之间的通信通过 Windows Communication Framework (WCF) 消息级保护进行保护。不需要使用 TLS 的额外传输级保护。WCF 配置使用 Kerberos 在 Controller 和 VDA 之间进行相互身份验证。加密使用具有 256 位密钥的 CBC 模式 AES。消息完整性使用 SHA-1。

根据 Microsoft 的说法,WCF 使用的 安全协议 符合 OASIS(结构化信息标准促进组织)的标准,包括 WS-SecurityPolicy 1.2。此外,Microsoft 表示 WCF 支持 安全策略 1.2 中列出的所有算法套件。

Controller 与 VDA 之间的通信使用 basic256 算法套件,其算法如上所述。

TLS 和 HTML5 视频重定向

您可以使用 HTML5 视频重定向来重定向 HTTPS 网站。注入到这些网站中的 JavaScript 必须与在 VDA 上运行的 Citrix HDX™ HTML5 视频重定向服务建立 TLS 连接。为此,HTML5 视频重定向服务会在 VDA 上的证书存储中生成两个自定义证书。停止服务会删除这些证书。

HTML5 视频重定向策略默认处于禁用状态。

有关 HTML5 视频重定向的详细信息,请参阅 (/zh-cn/xenapp-and-xendesktop/7-15-ltsr/policies/reference/ica-policy-settings/multimedia-policy-settings.html#html5-video-redirection)。