Product Documentation

传输层安全性 (TLS)

Jun 17, 2016
将 XenApp 或 XenDesktop 站点配置为使用传输层安全性 (TLS) 协议包括以下过程:
  • 获取服务器证书并在所有 Delivery Controller 上安装和注册,并使用 SSL 证书配置端口。 有关详细信息,请参阅在 Controller 上安装 TLS 服务器证书

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

  • 通过完成以下任务在用户和 Virtual Delivery Agents (VDA) 之间启用 TLS 连接:
    要求和注意事项:
    • 在用户和 VDA 之间启用 TLS 连接仅对 XenApp 7.6 和 XenDesktop 7.6 及后续受支持的版本有效。
    • 在安装组件、创建站点、创建计算机目录和创建交付组之后,在交付组中和 VDA 上配置 TLS。
    • 要在交付组中配置 TLS,必须具有更改 Controller 访问规则的权限。完全权限管理员具有此权限。
    • 要在 VDA 上配置 TLS,必须是安装 VDA 的计算机上的 Windows 管理员。
    • 如果打算在从早期版本升级的 VDA 上配置 TLS,请在升级之前卸载这些计算机上的 SSL Relay 软件。
    • PowerShell 脚本在静态 VDA 上配置 TLS,不会在通过 Machine Creation Services 或 Provisioning Services 置备的池 VDA 上配置 TLS。对于第二种情况,计算机映像在每次重新启动时重置。
对于包括使用 Windows 注册表的任务:
警告:注册表编辑不当会导致严重问题,可能导致需要重新安装操作系统。 Citrix 无法保证因“注册表编辑器”使用不当导致出现的问题能够得以解决。 使用“注册表编辑器”需自担风险。 在编辑注册表之前,请务必进行备份。

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

在 Controller 上安装 TLS 服务器证书

对于 HTTPS,XML Service 通过使用服务器证书而非客户端证书来支持 TLS 功能。 要获取证书并在 Controller 上进行安装和注册,以及使用 SSL 证书配置端口,请遵循以下操作:

更改 HTTP 或 HTTPS 端口

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

要更改 Controller 使用的默认 HTTP 或 HTTPS 端口,请从 Studio 运行以下命令:BrokerService.exe -WIPORT <http 端口> -WISSLPORT <https 端口>

其中,<http 端口> 是用于 HTTP 流量的端口号,<https 端口> 是用于 HTTPS 流量的端口号。

注意:更改端口后,Studio 可能会显示关于许可证兼容性和升级的消息。 要解决此问题,请使用以下 PowerShell cmdlet 序列重新注册服务实例:
Get-ConfigRegisteredServiceInstance -ServiceType Broker -Binding  XML_HTTPS | Unregister-ConfigRegisteredServiceInstance Get-BrokerServiceInstance | where Binding -eq "XML_HTTPS" |  Register-ConfigServiceInstance

仅会强制执行 HTTPS 流量

如果希望 XML Service 忽略默认端口上的 HTTP 流量,请在 Controller 上的 HKLM\Software\Citrix\DesktopServer\ 中设置以下注册表值,然后重新启动 Broker Service。

要忽略 HTTP 流量,请将 XmlServicesEnableNonSsl 设置为 0。

提供了一个用于忽略 HTTPS 流量的相应注册表值:XmlServicesEnableSsl。 请确保未将其设置为 0。

关于 VDA 上的 TLS 设置

在 VDA 上配置 TLS 时,会更改已安装 SSL 证书上的权限,向 ICA Service 授予证书私钥的读取权限,并将以下信息告知 ICA Service:

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

    必须将 Windows 防火墙(如果启用)配置为允许此 TCP 端口上的传入连接。 使用 PowerShell 脚本时会完成此配置。

  • 允许的 TLS 协议版本

Important

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 密码

    密码集是常用 TLS 密码的列表。 客户端连接并发送受支持的 TLS 密码列表时,VDA 将客户端的其中一个密码与其已配置密码集中的其中一个密码相匹配并接受连接。 如果客户端发送的密码不在 VDA 的密码集中,VDA 将拒绝连接。

    支持三种密码集:GOV(ernment)、COM(mercial) 和 ALL。 这些密码集中的密码取决于 Windows FIPS 模式;有关 Windows FIPS 模式的信息,请参阅 http://support.microsoft.com/kb/811833。 下表列出了受支持的每种密码集中的密码。
    TLS 密码集GOVCOMALLGOVCOMALL
    FIPS 模式
    RSA_KEYXxxxxxx
    RSA_SIGNxxxxxx
    3DESx xx x
    RC4 xx   
    MD5xxx   
    SHAxxxxxx
    SHA_256xxxxxx
    SHA_384xxxxxx
    SHA_512xxxxxx
    AESxxxxxx

交付组不能既包含已配置 TLS 的 VDA 又包含未配置 TLS 的 VDA。 为交付组配置 TLS 时,应该已经为此交付组中的所有 VDA 配置 TLS。

使用 PowerShell 脚本在 VDA 上配置 TLS

Enable-VdaSSL.ps1 脚本可在 VDA 上启用或禁用 TLS 侦听器。 此脚本位于安装介质上的“Support”(支持)>“Tools”(工具)>“SslSupport”文件夹中。

启用 TLS 时,此脚本为指定的 TCP 端口禁用现有的所有 Windows 防火墙规则,然后添加新规则以允许 ICA Service 仅接受 TLS TCP 端口上的传入连接。 它还为以下各项禁用 Windows 防火墙规则:
  • Citrix ICA(默认:1494)
  • Citrix CGP(默认:2598)
  • Citrix WebSocket(默认:8008)

结果,用户仅可以通过 TLS 连接,而不能使用原始 ICA、CGP 或 WebSocket 进行连接。

此脚本包含以下语法描述以及其他示例;您可以使用 Notepad++ 等工具查看此信息。

必须指定 –Enable 或 –Disable 参数;其他所有参数为可选参数。

语法

Enable-VdaSSL {-Enable | -Disable} [–SSLPort <port>] [-SSLMinVersion "<min-ssl-version>"] [-SSLCipherSuite"<suite>"] [-CertificateThumbPrint "<thumbprint>"]

参数说明
-Enable在 VDA 上安装并启用 TLS 侦听器。 必须带有此参数或 –Disable 参数。
-Disable在 VDA 上禁用 TLS 侦听器。 必须带有此参数或 –Enable 参数。 如果指定此参数,其他参数均无效。
–SSLPort <端口>TLS 端口。 默认值:443
-SSLMinVersion "<最低 ssl 版本>"

最低 TLS 协议版本,两边用引号括起来。 有效值:"SSL_3.0"、"TLS_1.0"、"TLS_1.1" 和 "TLS_1.2"。 默认值:"TLS_1.0"

重要:Citrix 建议客户查看其 SSLv3 的使用情况,并在适当的情况下重新配置其部署以删除对 SSLv3 的支持。 请参阅 CTX200238

-SSLCipherSuite "<密码集>"TLS 密码集,两边用引号括起来。 有效值:"GOV"、"COM" 和 "ALL"。 默认值:"ALL"
-CertificateThumbPrint "<指纹>"证书存储中 SSL 证书的指纹,两边用引号括起来。 通常在证书存储中包含多个证书时使用此参数;脚本使用指纹来选择要使用的证书。 默认值:在证书存储区域的“本地计算机”>“个人”>“证书”区域找到的第一个可用证书。

示例

以下脚本安装并启用 TLS 1.2 协议版本值。
Enable-VdaSSL –Enable
以下脚本安装并启用 TLS 侦听器,指定 TLS 端口 400、GOV 密码集和最低 TLS 1.2 SSL 协议值。
Enable-VdaSSL – Enable –SSLPort 400 'SSLMinVersion "TLS_1.2"  –SSLCipherSuite "GOV"
以下脚本在 VDA 上禁用 TLS 侦听器。
Enable-VdaSSL –Disable

在 VDA 上手动配置 TLS

在 VDA 上手动配置 TLS 时,可以向各个 VDA 上的相应服务授予 TLS 证书私钥的一般读取权限:NT SERVICE\PorticaService(适用于 VDA for Windows Desktop OS)或者 NT SERVICE\TermService(适用于 VDA for Windows Server OS)。 在安装 VDA 的计算机上:
  1. 启动 Microsoft 管理控制台 (MMC):“开始”>“运行”> mmc.exe
  2. 将证书管理单元添加到 MMC:
    1. 选择文件 > 添加/删除管理单元
    2. 选择证书,然后单击添加
    3. 收到“该管理单元将始终为下列帐户管理证书:”提示时,选择计算机帐户,然后单击下一步
    4. 收到“请选择需要这个管理单元管理的计算机”提示时,选择本地计算机,然后单击完成
  3. 在“证书(本地计算机)”>“个人”>“证书”下,在证书上单击鼠标右键,然后选择所有任务 > 管理私钥
  4. 访问控制列表编辑器显示“(友好名称)私钥的权限”,其中,(友好名称) 是 SSL 证书的名称。 添加以下其中一项服务并向其授予读取权限:
    • 对于 VDA for Windows Desktop OS:"PORTICASERVICE"
    • 对于 VDA for Windows Server OS:"TERMSERVICE"
  5. 双击已安装的 SSL 证书。 在证书对话框中,选择“详细信息”选项卡,然后滚动到底部。 单击指纹
  6. 运行 regedit 并转至 HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\icawd。
    1. 编辑 SSL 指纹注册表项并将 SSL 证书的指纹值复制到此二进制值中。 可以忽略编辑二进制值对话框中的未知项(如 '0000' 和特殊字符),这样是安全的。
    2. 编辑 SSLEnabled 注册表项并将 DWORD 值更改为 1。 (之后要禁用 SSL,请将 DWORD 值更改为 0。)
    3. 如果要更改默认设置(可选),请在相同注册表路径中使用以下值:
      • SSLPort DWORD – SSL 端口号。 默认值:443。
      • SSLMinVersion DWORD – 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。 默认值:3 (ALL)。
  7. 如果 TLS TCP 端口不是默认值 443,请确保此端口在 Windows 防火墙中处于打开状态。 (在 Windows 防火墙中创建入站规则时,请确保其属性已选中“允许连接”或“启用”条目)。
  8. 确保没有其他应用程序或服务(如 IIS)正在使用 TLS TCP 端口。
  9. 对于 VDA for Windows Server OS,重新启动计算机以使更改生效。 (无需重新启动包含 VDA for Windows Desktop OS 的计算机)。

在交付组上配置 TLS

为包含已配置 TLS 连接的 VDA 的每个交付组完成此过程。
  1. 从 Studio,打开 PowerShell 控制台。
  2. 运行 asnp Citrix.* 以加载 Citrix 产品 cmdlet。
  3. 运行 Get-BrokerAccessPolicyRule -DesktopGroupName '<交付组名称>' | Set-BrokerAccessPolicyRule -HdxSslEnabled $true

    其中,<交付组名称> 是包含 VDA 的交付组的名称。

  4. 运行 Set-BrokerSite -DnsResolutionEnabled $true

故障排除

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

使用 Receiver for Windows 时,如果收到指示 TLS 错误的连接错误(如 1030),请禁用 Desktop Viewer,然后尝试重新连接。尽管连接仍会失败,但可能会提供对基本 TLS 问题的解释(例如,在从证书颁发机构申请证书时指定了错误的模板)。