传输层安全性 (TLS)
Citrix Virtual Apps and Desktops 支持对组件之间基于 TCP 的连接使用传输层安全性 (TLS) 协议。Citrix Virtual Apps and Desktops 还可通过使用自适应传输,支持对基于 UDP 的 ICA/HDX 连接使用数据报传输层安全性 (DTLS) 协议。
TLS 和 DTLS 相似,并且都支持相同的数字证书。将 Citrix Virtual Apps 或 Citrix Virtual Desktops 站点配置为使用 TLS 也会将其配置为使用 DTLS。过程如下;除非另有说明,否则,这些步骤对于 TLS 和 DTLS 是通用的:
-
获取服务器证书并在所有 Delivery Controller 上安装和注册,并使用 TLS 证书配置端口。有关详细信息,请参阅在 Controller 上安装 TLS 服务器证书。
(可选)可以更改 Controller 用于侦听 HTTP 和 HTTPS 流量的端口。
-
通过完成以下任务在 Citrix Workspace 应用程序和 Virtual Delivery Agent (VDA) 之间启用 TLS 连接:
- 在安装 VDA 的计算机上配置 TLS。(为方便起见,后面将安装了 VDA 的计算机简称为 VDA。)有关常规信息,请参阅 VDA 上的 TLS 设置。强烈建议使用 Citrix 提供的 PowerShell 脚本来配置 TLS/DTLS。有关详细信息,请参阅使用 PowerShell 脚本在 VDA 上配置 TLS。但是,如果要手动配置 TLS/DTLS,请参阅在 VDA 上手动配置 TLS。
-
通过在 Studio 中运行一组 PowerShell cmdlet,在包含 VDA 的交付组中配置 TLS。有关详细信息,请参阅在交付组上配置 TLS。
要求和注意事项:
- 在用户和 VDA 之间启用 TLS 连接仅对 XenApp 7.6 和 XenDesktop 7.6 及后续受支持的版本有效。
- 在安装组件、创建站点、创建计算机目录和创建交付组之后,在交付组中和 VDA 上配置 TLS。
- 要在交付组中配置 TLS,必须具有更改 Controller 访问规则的权限。完全权限管理员具有此权限。
- 要在 VDA 上配置 TLS,必须是安装 VDA 的计算机上的 Windows 管理员。
- 在通过 Machine Creation Services 或 Provisioning Services 置备的池 VDA 中,VDA 计算机映像会在重新启动时重置,从而导致以前的 TLS 设置丢失。请在每次重新启动 VDA 后运行 PowerShell 脚本以重新配置 TLS 设置。
警告:
有关涉及在 Windows 注册表中操作的任务 - 注册表编辑不当会导致严重问题,可能需要重新安装操作系统。Citrix 无法保证因注册表编辑器使用不当导致出现的问题能够得以解决。使用注册表编辑器需自担风险。在编辑注册表之前,请务必进行备份。
有关为站点数据库启用 TLS 的信息,请参阅 CTX137556。
在 Controller 上安装 TLS 服务器证书
对于 HTTPS,XML Service 通过使用服务器证书而非客户端证书来支持 TLS 功能。要获取证书并在 Controller 上进行安装和注册,以及使用 TLS 证书配置端口,请遵循以下操作:
如果 Controller 中安装了 IIS,请按照 https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc771438(v=ws.10) 中的指导进行操作。
如果控制器中未安装 IIS,配置证书的其中一种方法是:
- 按照 http://blogs.technet.com/b/pki/archive/2009/08/05/how-to-create-a-web-server-ssl-certificate-manually.aspx 中的指导获取 TLS 服务器证书并将其安装在 Controller 上。有关 certreq 工具的信息,请参阅 https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc736326(v=ws.10)。
- 使用证书配置端口;请参阅 https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-a-port-with-an-ssl-certificate。
如果在 Windows Server 2016 上安装了 Controller,同时在 Windows Server 2012 上安装了 StoreFront,则需要对该 Controller 进行配置更改,以更改 TLS 密码套件的顺序。
注意:
具有其他 Windows Server 版本组合的 Controller 和 StoreFront 不需要此配置更改。
密码套件顺序列表必须包括 TLS_ECDHE_RSA_WITH_AES_256CBC_SHA384 和/或 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 密码套件,同时这些密码套件必须位于任何 TLS_DHE 密码套件之前。
注意:
Windows Server 2012 不支持 GCM 密码套件 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 或 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。
- 使用 Microsoft 组策略编辑器,浏览至计算机配置 > 管理模板 > 网络 > SSL 配置设置。
- 编辑策略“SSL 密码套件顺序”。默认情况下,此策略设置为“未配置”。将此策略设为已启用。
- 按正确的顺序安排套件,删除任何不需要使用的密码套件。
确保 TLS_ECDHE_RSA_WITH_AES_256CBC_SHA384 或 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 位于任何 TLS_DHE 密码套件之前。
在 Microsoft MSDN 上,另请参阅 Schannel 密码套件优先级划分。
更改 HTTP 或 HTTPS 端口
默认情况下,Controller 上的 XML Service 在端口 80 上侦听 HTTP 流量,在端口 443 上侦听 HTTPS 流量。尽管可以使用非默认端口,但请注意:将 Controller 暴露在不受信任的网络上存在安全风险。部署独立 StoreFront 服务器比更改默认值更可取。
要更改 Controller 使用的默认 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 Service 忽略默认端口上的 HTTP 流量,请在 Controller 上的 HKLM\Software\Citrix\DesktopServer\ 中创建以下注册表设置,然后重新启动 Broker Service。
要忽略 HTTP 流量,请创建 DWORD XmlServicesEnableNonSsl 并将其设置为 0。
提供了一个能够创建的用于忽略 HTTPS 流量的相应注册表 DWORD 值: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 连接。
DTLS 1.0 对应于 TLS 1.1,DTLS 1.2 对应于 TLS 1.2。
-
允许哪些 TLS 密码套件。
密码套件选择用于连接的加密。客户端和 VDA 可以支持不同的密码套件组。客户端(Citrix Workspace 应用程序或 StoreFront)连接并发送支持的 TLS 密码套件列表,VDA 将客户端的密码套件之一与其自己的配置密码套件列表中的密码套件之一进行匹配,并接受连接。如果没有匹配的密码套件,VDA 将拒绝连接。
VDA 支持三组密码套件(也称为合规性模式):GOV(ernment)、COM(mercial) 及 ALL。可接受的密码套件还取决于 Windows FIPS 模式;有关 Windows FIPS 模式的信息,请参阅 http://support.microsoft.com/kb/811833。下表列出了每组中的密码套件:
TLS/DTLS 密码套件 | 全部 | COM | GOV | 全部 | COM | GOV |
---|---|---|---|---|---|---|
FIPS 模式 | 关 | 关 | 关 | 开 | 开 | 开 |
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_ECDHE_RSA_WITH_AES_128_CBC_SHA | X | X | X | X |
* 在 Windows Server 2012 R2 中不受支持。
注意:
VDA 不支持 DHE 密码套件(例如 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384、TLS_DHE_RSA_WITH_AES_256_CBC_SHA、TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 和 TLS_DHE_RSA_WITH_AES_128_CBC_SHA)。如果 Windows 选择了这些密码套件,Receiver 可能不会使用。
如果您使用的是 Citrix Gateway,请参阅 Citrix ADC 文档,以了解有关后端通信的密码套件支持信息。有关 TLS 密码套件支持的信息,请参阅Citrix ADC 设备上可用的密码。有关 DTLS 密码套件支持的信息,请参阅DTLS 密码支持。
使用 PowerShell 脚本在 VDA 上配置 TLS
在证书存储的本地计算机 > 个人 > 证书区域中安装 TLS 证书。如果该位置有多个证书,请向 PowerShell 脚本提供证书的指纹。
注意:
自 XenApp 和 XenDesktop 7.16 LTSR 起,PowerShell 脚本会根据 VDA 的 FQDN 查找正确的证书。如果该 VDA FQDN 只有一个证书,则不需要提供指纹。
Enable-VdaSSL.ps1 脚本可在 VDA 上启用或禁用 TLS 侦听器。此脚本位于安装介质上的 Support > Tools > SslSupport 文件夹中。
启用了 TLS 时,将禁用 DHE 密码套件。ECDHE 密码套件不受影响。
如果启用 TLS,则该脚本会对指定的 TCP 端口禁用所有现有 Windows 防火墙规则。然后添加一个新规则,允许 ICA Service 只接受 TLS TCP 和 UDP 端口上的传入连接。它还对以下各项禁用 Windows 防火墙规则:
- Citrix ICA(默认:1494)
- Citrix CGP(默认:2598)
- Citrix WebSocket(默认:8008)
其结果是,用户只能使用 TLS 或 DTLS 进行连接。如果不使用 TLS 或 DTLS,则他们不能使用 ICA/HDX、已启用会话可靠性的 ICA/HDX 或采用 WebSocket 的 HDX。
注意:
通过 UDP 协议的 ICA/HDX 音频实时传输或 ICA/HDX Framehawk 不支持 DTLS。
请参阅 网络端口。
此脚本包含以下语法描述以及额外的示例;可以使用 Notepad++ 等工具查看此信息。
重要:
指定 Enable 或 Disable 参数以及 CertificateThumbPrint 参数。其他参数为可选参数。
语法
`Enable-VdaSSL {-Enable | -Disable} -CertificateThumbPrint “<thumbprint>” [–SSLPort <port>] [-SSLMinVersion “<min-ssl-version>”] [-SSLCipherSuite”<suite>”]`
参数 | 说明 |
---|---|
启用 | 在 VDA 上安装并启用 TLS 侦听器。此参数或 Disable 参数为必需参数。 |
禁用 | 在 VDA 上禁用 TLS 侦听器。此参数或 Enable 参数为必需参数。如果指定此参数,其他参数均无效。 |
CertificateThumbPrint “<thumbprint>” | 证书存储中 TLS 证书的指纹,两边用引号引起。脚本使用指定的指纹来选择要使用的证书。如果忽略此参数,则会选择错误的证书。 |
SSLPort <port> | TLS 端口。默认值:443 |
SSLMinVersion “<version>” | 最低 TLS 协议版本,两边用引号引起。有效值:“TLS_1.0”(默认值)、“TLS_1.1”和“TLS_1.2”。 |
SSLCipherSuite “<suite>” | TLS 密码套件,两边用引号引起。有效值:”GOV”、”COM” 和 “ALL”(默认值)。 |
示例
以下脚本安装并启用 TLS 协议版本值。指纹(在此示例中以 12345678987654321 表示)用于选择要使用的证书。
Enable-VdaSSL –Enable -CertificateThumbPrint "12345678987654321"
以下脚本安装并启用 TLS 侦听器,指定 TLS 端口 400、GOV 密码套件和最低 TLS 1.2 协议值。指纹(在此示例中以 12345678987654321 表示)用于选择要使用的证书。
Enable-VdaSSL – Enable
-CertificateThumbPrint "12345678987654321"
–SSLPort 443 'SSLMinVersion "TLS_1.2"
–SSLCipherSuite "All"
以下脚本在 VDA 上禁用 TLS 侦听器。
Enable-VdaSSL –Disable
在 VDA 上手动配置 TLS
在 VDA 上手动配置 TLS 时,可以向各个 VDA 上的相应服务授予对 TLS 证书私钥的一般读取权限:NT SERVICE\PorticaService(适用于 Windows 单会话操作系统的 VDA)或者 NT SERVICE\TermService(适用于 Windows 多会话操作系统的 VDA)。在安装 VDA 的计算机上:
步骤 1. 启动 Microsoft 管理控制台 (MMC):“开始”>“运行”> mmc.exe。
步骤 2. 将证书管理单元添加到 MMC:
- 选择文件 > 添加/删除管理单元。
- 选择证书,然后单击添加。
- 收到“该管理单元将始终为下列帐户管理证书:”提示时,选择“计算机帐户”,然后单击“下一步”。
- 收到“请选择需要这个管理单元管理的计算机”提示时,选择“本地计算机”,然后单击“完成”。
步骤 3. 在证书(本地计算机) > 个人 > 证书下,在证书上单击鼠标右键,然后选择所有任务 > 管理私钥。
步骤 4. 访问控制列表编辑器显示“(友好名称)私钥的权限”,其中,(友好名称) 是 TLS 证书的名称。添加以下其中一项服务并向其授予读取权限:
- 对于适用于 Windows 单会话操作系统的 VDA,“PORTICASERVICE”
- 对于适用于 Windows 多会话操作系统的 VDA,“TERMSERVICE”
步骤 5. 双击已安装的 TLS 证书。在证书对话框中,选择详细信息选项卡,然后滚动到底部。单击指纹。
步骤 6. 运行 regedit 并转至 HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\icawd。
- 编辑 SSL 指纹注册表项并将 TLS 证书的指纹值复制到此二进制值中。可以忽略编辑二进制值对话框中的未知项(如 ‘0000’ 和特殊字符),这样是安全的。
- 编辑 SSLEnabled 注册表项并将 DWORD 值更改为 1。(之后要禁用 SSL,请将 DWORD 值更改为 0。)
-
如果要更改默认设置(可选),请在相同注册表路径中使用以下值:
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 和 UDP 端口不是默认值 443,请确保这些端口在 Windows 防火墙中处于打开状态。(在 Windows 防火墙中创建入站规则时,请确保其属性已选中“允许连接”或“启用”条目)。
步骤 8. 确保没有其他应用程序或服务(如 IIS)正在使用 TLS TCP 端口。
步骤 9. 对于适用于 Windows 多会话操作系统的 VDA,请重新启动计算机以使更改生效。(无需重新启动包含适用于 Windows 单会话操作系统的 VDA 的计算机)。
重要:
VDA 在 Windows Server 2012 R2、Windows Server 2016 或者 Windows 10 Anniversary Edition 或支持的更高版本上时,需要执行额外的步骤。此影响来自 Citrix Receiver for Windows(版本 4.6 到 4.9)、适用于 HTML5 的 Citrix Workspace 应用程序以及适用于 Chrome 的 Citrix Workspace 应用程序的连接。其中也包括使用 Citrix Gateway 的连接。
对于使用 Citrix Gateway 的所有连接以及所有 VDA 版本(如果在 Citrix Gateway 与 VDA 之间配置了 TLS),也需要执行此步骤。这影响所有 Citrix Receiver 版本。
在 VDA(Windows Server 2012 R2、Windows Server 2016、Windows 10 Anniversary Edition 或更高版本)上,使用组策略编辑器,转到“计算机配置”>“策略”>“管理模板”>“网络”>“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_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256
注意:
前六项还指定椭圆曲线 P384 或 P256。请确保未选择 “curve25519”。FIPS 模式不会阻止使用 “curve25519”。
配置了此组策略设置时,VDA 将仅选择同时显示在两个列表中的密码套件:组策略列表和选定合规性模式列表(COM、GOV 或 ALL)。该密码套件还必须显示在客户端(Citrix Workspace 应用程序或 StoreFront)发送的列表中。
此组策略配置还会影响 VDA 上的其他 TLS 应用程序和服务。如果您的应用程序要求使用特定的密码套件,您可能需要将它们添加到此组策略列表中。
重要:
尽管组策略更改一旦应用便会显示,但对 TLS 配置的组策略更改只有在重新启动操作系统后才会生效。因此,对于池桌面,请将对 TLS 配置的组策略更改应用于基础映像。
在交付组上配置 TLS
为包含已配置 TLS 连接的 VDA 的每个交付组完成此过程。
- 从 Studio,打开 PowerShell 控制台。
- 运行 asnp Citrix.* 以加载 Citrix 产品 cmdlet。
- 运行 Get-BrokerAccessPolicyRule -DesktopGroupName ‘<delivery-group-name>’ | Set-BrokerAccessPolicyRule -HdxSslEnabled $true。
- 运行 Set-BrokerSite -DnsResolutionEnabled $true。
故障排除
如果出现连接错误,请检查 VDA 上的系统事件日志。
使用适用于 Windows 的 Citrix Workspace 应用程序时,如果收到指示 TLS 错误的连接错误,请禁用 Desktop Viewer,然后重新尝试连接。尽管连接仍失败,但可能会提供基本 TLS 问题的解释。例如,您在从证书颁发机构申请证书时指定了错误的模板。
大多数使用 HDX 自适应传输的配置在使用 DTLS 时能够成功运行,包括使用最新版本的 Citrix Workspace 应用程序、Citrix Gateway 和 VDA 的配置。某些在 Citrix Workspace 应用程序与 Citrix Gateway 之间使用 DTLS 的配置以及在 Citrix Gateway 与 VDA 之间使用 DTLS 的配置都需要额外的操作。
在以下情况下需要额外的操作:
- Citrix Receiver 版本支持 HDX 自适应传输和 DTLS:Receiver for Windows(4.7、4.8、4.9)、Receiver for Mac(12.5、12.6、12.7)、Receiver for iOS(7.2、7.3.x)或 Receiver for Linux (13.7)
并且以下任一情况也适用:
-
Citrix Gateway 版本支持通过 DTLS 传输到 VDA,但 VDA 版本不支持 DTLS(版本 7.15 或更低版本),
-
VDA 版本支持 DTLS(版本 7.16 或更高版本),但 Citrix Gateway 版本不支持通过 DTLS 传输到 VDA。
要避免来自 Citrix Receiver 的连接失败,请执行以下操作之一:
- 将 Citrix Receiver 更新到 Receiver for Windows 4.10 或更高版本、Receiver for Mac 12.8 或更高版本或者 Receiver for iOS 7.5 或更高版本;或
- 将 Citrix Gateway 更新到支持通过 DTLS 传输到 VDA 的版本;或
- 将 VDA 更新到版本 7.16 或更高版本;或
- 在 VDA 上禁用 DTLS;或
- 禁用 HDX 自适应传输。
注意:
适用于 Receiver for Linux 的更新尚未提供。Receiver for Android(版本 3.12.3)不支持 HDX 自适应传输以及通过 Citrix Gateway 的 DTLS,因此不受影响。
要在 VDA 上禁用 DTLS,请将 VDA 防火墙配置修改为禁用 UDP 端口 443。请参阅网络端口。
Controller 与 VDA 之间的通信
Windows Communication Framework (WCF) 消息级保护会保护 Controller 与 VDA 之间的通信。不需要进行使用 TLS 的额外传输层保护。WCF 配置使用 Kerberos 在 Controller 与 VDA 之间进行相互身份验证。加密使用处于 CBC 模式的带 256 位密钥的 AES。消息完整性使用 SHA-1。
根据 Microsoft,WCF 所使用的安全协议符合 OASIS(结构化信息标准促进组织)标准,包括 WS-SecurityPolicy 1.2。此外,Microsoft 还申明,WCF 支持安全策略 1.2 中列出的所有算法套件。
Controller 和 VDA 间的通信使用 basic256 算法套件,该套件的算法如上所述。
TLS 和 HTML5 视频重定向以及浏览器内容重定向
可以使用 HTML5 视频重定向和浏览器内容重定向来重定向 HTTPS Web 站点。注入到这些 Web 站点的 JavaScript 必须与 VDA 上运行的 Citrix HDX HTML5 视频重定向服务建立 TLS 连接。为了实现这一点,在 VDA 上的证书存储中生成了两个自定义证书。
HTML5 视频重定向策略默认处于禁用状态。
浏览器内容重定向默认处于启用状态。
注意:
如果您未计划使用 HTML5 视频重定向或浏览器内容重定向,我们建议从本地计算机证书存储中删除两个证书。
这些证书包括:
- 对于 CA(根):Citrix XenApp/XenDesktop HDX In-Product CA (C = US; S = Florida; L = Fort Lauderdale; O = Citrix Systems, Inc.; OU = XenApp/XenDesktop Engineering; CN = Citrix XenApp/XenDesktop HDX In-Product CA) 位置:证书(本地计算机) > 可信根证书颁发机构 > 证书。
- 对于最终实体(叶):Citrix XenApp/XenDesktop HDX Service (C = US; S = Florida; L = Fort Lauderdale; O = Citrix Systems, Inc.; OU = XenApp/XenDesktop Engineering; CN = Citrix XenApp/XenDesktop HDX Service) 位置:证书(本地计算机) > 个人 > 证书。
我们建议设置 Citrix HDX HTML5 视频重定向服务,以便其不自动启动。 停止此服务也会删除证书。
有关 HTML5 视频重定向的详细信息,请参阅多媒体策略设置。