在虚拟投递代理上启用传输层安全/数据报传输层安全

通过完成以下任务,在 Citrix Workspace™ 应用程序和虚拟投递代理 (VDA) 之间启用 TLS 连接:

  • 在 VDA 上安装证书。有关详细信息,请参阅 (#requesting-and-installing-a-certificate)
  • 在安装 VDA 的计算机上配置 TLS。(为方便起见,以后将安装 VDA 的计算机简称为“VDA”。)强烈建议您使用 Citrix 提供的 PowerShell 脚本来配置 TLS/DTLS。有关详细信息,请参阅 (#configure-tls-on-a-vda-using-the-powershell-script)。但是,如果您想手动配置 TLS/DTLS,请参阅 (#manually-configure-tls-on-a-vda)。
  • 通过在 Studio 中运行一组 PowerShell cmdlet,在包含 VDA 的交付组中配置 TLS。有关详细信息,请参阅 (#configure-tls-on-delivery-groups)。

要求和注意事项:

  • 在安装组件、创建站点、创建计算机目录和创建交付组之后,在交付组和 VDA 上配置 TLS。
  • 要在交付组中配置 TLS,您必须具有更改控制器访问规则的权限。完全管理员拥有此权限。
  • 要在 VDA 上配置 TLS,您必须是安装 VDA 的计算机上的 Windows 管理员。
  • 在由 Machine Creation Services™ 或 Provisioning Services 预配的池化 VDA 上,VDA 计算机映像会在重新启动时重置,导致以前的 TLS 设置丢失。每次重新启动 VDA 时运行 PowerShell 脚本以重新配置 TLS 设置。

交付组不能混合配置了 TLS 的 VDA 和未配置 TLS 的 VDA。在为交付组配置 TLS 之前,请确保已为该交付组中的所有 VDA 配置 TLS。

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

  • 证书存储中用于 TLS 的证书。

  • 用于 TLS 连接的 TCP 端口号。

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

  • 允许使用哪些版本的 TLS 协议。

    重要:

    Citrix 建议使用 TLS 1.2 或更高版本。SSL 和旧版本的 TLS 已弃用。

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

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

  • 允许使用哪些 TLS 密码套件。

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

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

    密码套件 ALL COM GOV ALL COM GOV
    联邦信息处理标准模式
    TLS_AES_256_GCM_SHA384 X   X X   X
    TLS_AES_128_GCM_SHA256 X     X   X
    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  

    注意:

    The VDA does not support DHE ciphersuites (for example, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, and TLS_DHE_RSA_WITH_AES_128_CBC_SHA.) If selected by Windows, the connection will fail.

    如果您正在使用 NetScaler Gateway,请参阅 NetScaler 文档以获取有关后端通信的密码套件支持信息。有关 TLS 密码套件支持的信息,请参阅 Citrix ADC 设备上可用的密码。有关 DTLS 密码套件支持的信息,请参阅 DTLS 密码支持

申请和安装一个数字证书

要使用 TLS,您必须安装一个其备用名称包含 VDA FQDN 的证书。该证书必须受直接连接到 VDA(而非通过 Citrix Gateway)的任何客户端信任。为了允许无法轻松部署证书的非托管设备连接到 VDA,请考虑部署 NetScaler® Gateway。

使用 Microsoft 证书颁发机构创建证书

如果您的客户端和 VDA 位于受信任的林中并且具有 Microsoft 证书颁发机构,则可以从“证书”MMC 管理单元的“证书注册向导”中获取证书。

  1. 在 VDA 上,打开 MMC 控制台并添加“证书”管理单元。出现提示时,选择“计算机帐户”。
  2. 展开“个人 > 证书”,然后使用上下文菜单命令“所有任务 > 请求新证书”。
  3. 单击“下一步”开始,然后再次单击“下一步”以确认您正在从 Active Directory 注册获取证书。
  4. 选择服务器身份验证证书的模板。默认的 Windows“计算机”或“Web 服务器可导出”均可接受。如果模板已设置为自动提供主题的值,则无需提供更多详细信息即可单击“注册”。

    请求证书对话框

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

    主题名称 — 选择类型“公用名”并添加 VDA 的 FQDN

    备用名称 — 选择类型 DNS 并添加 VDA 的 FQDN

    证书属性

    注意:

    使用 Active Directory 证书服务证书自动注册以自动向 VDA 颁发和部署证书。这在 启用证书自动注册) 中有所描述。

    您可以使用通配符证书以允许单个证书保护多个 VDA:

    主题名称 — 选择类型 公用名 并输入 VDA 的 *.primary.domain

    备用名称 — 选择类型 DNS 并添加虚拟投递代理的 *.primary.domain

    请求证书通配符对话框

    您可以使用 SAN 证书以允许单个证书保护多个特定的 VDA:

    主题名称 — 选择类型 公用名 并输入一个字符串以帮助识别证书用途

    备用名称 — 选择类型 DNS 并为每个 VDA 的 FQDN 添加一个条目。将备用名称的数量保持在最低限度,以确保最佳的 TLS 协商。

    请求证书对话框

    注意:

    通配符证书和 SAN 证书都要求在“私钥”选项卡上选中 允许导出私钥

    请求证书对话框

使用 PowerShell 脚本对 VDA 上的 TLS 进行配置

将 TLS 证书安装到证书存储的“本地计算机”>“个人”>“证书”区域。如果该位置存在多个证书,请向 PowerShell 脚本提供证书的指纹。

注意:

从 XenApp 和 XenDesktop 7.15 LTSR 开始,PowerShell 脚本会根据 VDA 的 FQDN 查找正确的证书。当 VDA FQDN 只有一个证书时,您无需提供指纹。

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

启用 TLS 时,DHE 密码套件将被禁用。ECDHE 密码套件不受影响。

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

  • 思杰 独立计算架构(默认值:1494)
  • 思杰 图形协议(默认值:2598)
  • Citrix Web 套接字(默认值:8008)

其效果是用户只能使用 TLS 或 DTLS 进行连接。如果未使用 TLS 或 DTLS,则无法使用 ICA/HDX、具有会话可靠性的 ICA/HDX 或通过 WebSocket 的 HDX。

注意:

DTLS 不支持与基于 UDP 实时传输的 ICA/HDX 音频配合使用,也不支持与 ICA/HDX Framehawk 配合使用。

请参阅网络端口

该脚本包含以下语法说明以及其他示例;您可以使用 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 “" 证书存储中 TLS 证书的指纹,用引号括起来。脚本使用指定的指纹选择要使用的证书。如果省略此参数,则会选择不正确的证书。
SSLPort TLS 端口。默认值:443
SSLMinVersion “" 最小 TLS 协议版本,用引号括起来。有效值:SSL_3.0TLS_1.0(默认)、TLS_1.1TLS_1.2TLS_1.3TLS_1.3 需要 Windows 11 或 Windows Server 2022 或更高版本。
SSLCipherSuite “" 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 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。启动 Microsoft 管理控制台 (MMC):开始 > 运行 > mmc.exe。

步骤 2。将“证书”管理单元添加到 MMC:

  1. 选择“文件”>“添加/删除管理单元”。
  2. 选择“证书”,然后单击“添加”。
  3. 当系统提示“此管理单元将始终管理以下证书:”时,选择“计算机帐户”,然后单击“下一步”。
  4. 当系统提示“选择此管理单元要管理的计算机”时,选择“本地计算机”,然后单击“完成”。

步骤 3。在“证书 (本地计算机) > 个人 > 证书”下,右键单击该证书,然后选择“所有任务 > 管理私钥”。

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

  • For a VDA for Windows Single-session OS, “PORTICASERVICE”
  • 对于适用于 Windows 多会话操作系统的 VDA,为“TERMSERVICE”

步骤 5。双击已安装的 TLS 证书。在证书对话框中,选择“详细信息”选项卡,然后滚动到底部。单击“指纹”。

STEP 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 DWORD – 此项用于指定 VDA 的 SSL 端口号。默认值为 443。

    SSLMinVersion DWORD – 此项用于设置 VDA 上支持的最低 SSL/TLS 版本。具体选项如下:1 表示 SSL 3.0 版本,2 表示 TLS 1.0 版本,3 表示 TLS 1.1 版本,4 表示 TLS 1.2 版本,5 表示 TLS 1.3 版本。默认值为 2 (即 TLS 1.0 版本)。

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

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

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

步骤 9。对于多会话 VDA,请重新启动计算机以使更改生效。(您无需重新启动单会话 VDA 计算机。)

步骤 10. 修改 Windows 密码套件首选项,以便 VDA 支持的密码套件具有最高优先级,以避免连接问题。

重要提示:

下面概述的组策略更改仅在系统重新启动后生效。

如果您使用的是通过 MCS 或 PVS 预配的非持久性会话主机,则必须在主映像中应用这些设置。

选项 1:

使用组策略编辑器,转到“计算机配置”>“策略”>“管理模板”>“网络”>“SSL 配置设置”>“SSL 密码套件顺序”。确保以下密码套件位于列表顶部:

TLS_AES_256_GCM_SHA384_P384
TLS_AES_256_GCM_SHA384_P256
TLS_AES_128_GCM_SHA256_P384
TLS_AES_128_GCM_SHA256_P256
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
<!--NeedCopy-->

注意:

TLS_AES_256_GCM_SHA384 和 TLS_AES_128_GCM_SHA256 仅适用于 Windows 11 和 Windows Server 2022 或更高版本。如果您使用的是较旧的操作系统,请不要在列表中包含这些密码套件。

请注意,列出的密码套件还指定了椭圆曲线 P384 或 P256,以确保不选择“curve25519”。FIPS 模式不会阻止使用“curve25519”。

无需从列表中删除任何密码套件。请注意,这些设置适用于整个系统,因此如果您决定删除任何密码套件,则必须确保您的会话主机上运行的任何应用程序或服务都不需要它们。

选项 2:

使用组策略编辑器,转到“计算机配置”>“策略”>“管理模板”>“网络”>“SSL 配置设置”>“SSL 密码套件顺序”。确保以下密码套件位于列表顶部:

TLS_AES_256_GCM_SHA384
TLS_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
<!--NeedCopy-->

注意:

TLS_AES_256_GCM_SHA384 和 TLS_AES_128_GCM_SHA256 仅适用于 Windows 11 和 Windows Server 2022 或更高版本。如果您使用的是较旧的操作系统,请不要在列表中包含这些密码套件。

无需从列表中删除任何密码套件。请注意,这些设置适用于整个系统,因此如果您决定删除任何密码套件,则必须确保您的会话主机上运行的任何应用程序或服务都不需要它们。

使用组策略编辑器,转到“计算机配置”>“策略”>“管理模板”>“网络”>“SSL 配置设置”>“ECC 曲线顺序”。启用此设置并在列表中包含以下曲线:

NistP384
NistP256
<!--NeedCopy-->

注意:

这可确保不选择“curve25519”。FIPS 模式不会阻止使用“curve25519”。

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

在交付组上配置 TLS

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

  1. 在 Studio 管理界面中,打开 PowerShell 控制台。
  2. Run Get-BrokerAccessPolicyRule -DesktopGroupName ‘<delivery-group-name>’ | Set-BrokerAccessPolicyRule -HdxSslEnabled $true.
  3. Run Set-BrokerSite -DnsResolutionEnabled $true.

使用自动注册为池化 VDA 启用 SSL

使用池化 VDA 时,如果将证书添加到主映像,则所有 VDA 都将共享同一映像。您可以使用通配符证书,但缺点是,如果任何一个 VDA 受损,此功能强大的证书将意味着所有 VDA 的 HDX™ 连接都将面临风险。

相反,一种安全的替代方案是利用 Microsoft Active Directory 证书服务通过组策略自动预配证书。您可以在 VDA 上使用启动脚本来动态预配新证书并为 VDA 启用 SSL。

请注意,此方法仅适用于单会话桌面 VDA。对于多会话 VDA,ICA 侦听器在启动过程中启动得过早,无法自动预配证书。

由于 Active Directory 证书服务使用内部企业证书颁发机构,因此并非所有 Windows 安装都会自动信任它。如果客户端由公司管理并且是域林的一部分,则可以使用组策略自动分发受信任的 CA 证书。对于 BYOD 和其他未加入域的设备,您需要通过其他机制(例如提供下载链接)向用户分发受信任的 CA 证书,或者使用 NetScaler 网关。

启用证书自动注册功能

首先,请确保您已在 VDA 域林中的服务器上安装 Active Directory 证书服务角色,并提供企业 CA,否则将无法进行自动注册。

请注意,这可能会给您的企业 CA 带来比平时更高的负载,因为 VDA 会在每次启动时提交证书请求。请确保在 CA 服务器上分配足够的 CPU 和内存以应对负载,并且一如既往地在实验室环境中测试部署的可伸缩性,然后再投入生产。

在组策略管理编辑器中,创建一个新策略,该策略适用于将包含已启用 SSL 的池化 VDA 的组织单位,如下所示:

  1. 展开“计算机配置”->“策略”->“Windows 设置”->“安全设置”->“公钥策略”
  2. 编辑“证书服务客户端 – 自动注册策略”对象属性
  3. 按以下屏幕截图所示进行配置。
  4. 右键单击“自动证书请求”容器,然后选择“新建”->“自动证书请求…”
  5. 在“自动证书请求设置向导”中,单击“下一步”
  6. 确保已选择“计算机”证书模板,然后单击“下一步”
  7. 单击“完成”

注册策略的屏幕截图

准备 Windows 主映像

将产品安装介质中 Support\Tools\SslSupport 文件夹中的 Enable-VdaSsl.ps1 脚本复制到 VDA 主映像。请注意,主映像不应包含任何用于 HDX SSL 连接的证书。证书将在创建 MCS 或 PVS 计算机目录时进行预配。现在,按如下方式创建一个新的计划任务(暂时不要运行该计划任务):

  1. 打开“任务计划程序”。

  2. 在“操作”窗格中,按“创建任务…

  3. 在“常规”选项卡上:

    • 输入一个名称,例如 Enable VDA SSL

    • 单击更改用户或组…,然后在“选择用户或组”对话框中输入 SYSTEM 并单击确定

    创建任务操作选项卡的屏幕截图

  4. 选择“触发器”选项卡

  5. 单击新建…。在新建触发器对话框中:

    1. 开始任务设置为发生事件时

    2. Set Log to Microsoft-Windows-CertificateServicesClient-Lifecycle-System/Operational

    3. Set Source to Microsoft-Windows-CertificateServicesClient-Lifecycle-System

    4. 事件 ID 设置为 1006

    5. 单击确定以保存触发器

    新建触发器窗口的屏幕截图

  6. 选择操作选项卡

  7. 单击新建…

  8. 新建操作对话框中:

    1. 操作 设置为 启动程序

    2. 在“程序/脚本”字段中,输入 powershell.exe

    3. 在“添加参数”字段中,输入 -ExecutionPolicy RemoteSigned Enable-VdaSsl.ps1 -Enable -Confirm:$False,包括 PowerShell 脚本的路径。

    4. 确定 以保存操作

    新建操作窗口的屏幕截图

  9. 确定 以保存任务

故障排除

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

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

大多数使用 HDX 自适应传输的配置都可以成功使用 DTLS,包括使用最新版本的 Citrix Workspace 应用程序、Citrix Gateway 和 VDA 的配置。某些在 Citrix Workspace 应用程序和 Citrix Gateway 之间以及 Citrix Gateway 和 VDA 之间使用 DTLS 的配置需要额外操作。

如果出现以下情况,则需要额外操作:

  • the Citrix Receiver version supports HDX Adaptive Transport and 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) or 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 更新到适用于 Windows 的 Receiver 4.10 或更高版本、适用于 Mac 的 Receiver 12.8 或更高版本,或者适用于 iOS 的 Receiver 7.5 或更高版本;或者,
  • 将 Citrix Gateway 更新至支持 DTLS 与 VDA 通信的版本;或者,
  • 将 VDA 更新到 7.16 或更高版本;或者,
  • 在 VDA 上禁用 DTLS;或者,
  • 禁用 HDX 自适应传输。

注意:

适用于 Linux 的 Receiver 尚无合适的更新。适用于 Android 的 Receiver(版本 3.12.3)不支持通过 Citrix Gateway 的 HDX 自适应传输和 DTLS,因此不受影响。

要在 VDA 上禁用 DTLS,请修改 VDA 防火墙配置以禁用 UDP 端口 443。请参阅 网络端口

TLS 和 HTML5 视频重定向以及浏览器内容重定向

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

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

浏览器内容重定向默认处于启用状态。

有关 HTML5 视频重定向的详细信息,请参阅 多媒体策略设置

在虚拟投递代理上启用传输层安全/数据报传输层安全