VDA 与 交付控制器™ 之间的 WebSocket 通信

本文介绍了如何设置 WebSocket 连接,用于 VDA 与 Delivery Controller 之间的通信,作为使用 WCF 通信的替代方案。这样做的好处是,VDA 到 Delivery Controller 的通信只需使用 TLS 端口 443。

工作原理

以下部分描述了 交付控制器 与 VDA 之间 WebSocket 连接的工作流程:

在正常代理操作期间

  1. Citrix 虚拟应用和桌面™ 管理员通过使用机器创建服务 (MCS) 预配 VDA 来启动此过程。
  2. 在 MCS 预配过程中,MCS 为每个 VDA 生成公钥-私钥对,并将公钥注册到 Delivery Controller 上的 FMA 信任服务。MCS 将公钥-私钥对作为文件保存在 VDA 上的身份磁盘下。
  3. 当 VDA 计算机启动时,安装在 VDA 计算机上的 MCS 代理从身份磁盘读取密钥对,并将此信息写入 VDA 注册表位置。
  4. 安装在 VDA 上的代理读取注册表中的密钥对,并向 Delivery Controller 生成一个启用 SSL 的 WebSocket 请求,其中包含由私钥签名的服务密钥。
  5. Delivery Controller 使用 FMA 信任服务中的公钥验证已签名的服务密钥授权标头。
  6. 验证完成后,系统在 VDA 和交付控制器之间建立 WebSocket 连接。

当 LHC 模式变为活动状态时

如果您为 LHC 启用 WebSocket 支持,那么在 LHC 模式下,当 VDA 尝试与高可用性服务建立 WebSocket 连接时,高可用性服务会使用本地数据库中的公钥验证已签名的服务密钥授权标头。这会验证 WebSocket 连接,并且 VDA 与 Delivery Controller 之间的 WebSocket 连接即使在 LHC 模式下也能成功建立。

网络套接字支持

开始之前

  1. 配置您的站点。有关详细信息,请参阅创建站点
  2. 在 Delivery Controller 上安装 TLS 证书。有关详细信息,请参阅在 Controller 上安装 TLS 服务器证书
  3. 在 VDA 上安装根 CA 和中间 CA 以信任交付控制器。

操作步骤

按照说明设置 WebSocket 连接:

  1. 在交付控制器上启用 Web 套接字连接。在您站点中的每个交付控制器上运行以下命令:

    New-ItemProperty "HKLM:\SOFTWARE\Citrix\DesktopServer\WorkerProxy" -Name "WebSocket_Enabled" -PropertyType "DWord" -Value 1 -Force

  2. 启用 Web 套接字后重新启动代理服务。
  3. 为 LHC 模式启用 WebSocket 支持。在站点中的每个 Delivery Controller 上运行以下命令:

    New-ItemProperty "HKLM:\SOFTWARE\Citrix\DesktopServer\LHC" -Name "WebSocketEnabledLhc" -PropertyType "DWord" -Value 1 -Force
    <!--NeedCopy-->
    
  4. 为使用 MCS 预配的已加入 AD 的 VDA 创建计算机目录。有关详细信息,请参阅创建计算机目录
  5. 创建交付组并将 VDA 添加到其中。有关详细信息,请参阅创建交付组
  6. 在 VDA 上启用 WebSocket 连接功能。请在 VDA 上运行以下 PowerShell 命令:

    New-ItemProperty "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CitrixBrokerAgent\WebSocket" -Name "Enabled" -PropertyType "DWord" -Value 1 -Force
    <!--NeedCopy-->
    
    • 要检查 WebSocket 是否已启用,请检查以下注册表项值。Enabled 的值必须为 1。

      项:

       HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CitrixBrokerAgent\WebSocket
       <!--NeedCopy-->
      

      名称:已启用

      Type: REG_DWORD

      值: 1

VDA 与 交付控制器™ 之间的 WebSocket 通信