欢迎来到公海710 使用带有后端 HTTP 的 NetScaler Gateway 和 StoreFront 时如何修复 Citrix Receiver for Windows
前几天,我在 Receiver 4.6 for Windows 中遇到了一个有趣的问题,无法将 NetScaler Gateway URL 添加到 Receiver。我收到的错误是:“由于帐户商店配置无效,您的更改无法保存”

点击“确定”后,您将返回“添加帐户”对话框。因此,我再次输入 NetScaler Gateway URL 并点击“添加”:

现在它给了我错误:“此帐户已添加。请选择其他帐户进行添加或按关闭按钮。”

此时我被带回“添加帐户”对话框并陷入时间循环:

所有接收器都这样做吗?
有趣的是,只有 Receiver for Windows 受到此影响,以下所有内容都运行良好:
- StoreFront 3.8 上的 Receiver for Web,然后使用 Receiver 4.6 for Windows 启动应用
- 适用于 HTML5 的接收器 2.2
- iPhone 上适用于 iOS 的 Receiver 7.1.2
- iPad 上适用于 iOS 的 Receiver 7.1.2
- 适用于 Mac 的 Receiver 12.4
- 使用 Linux 13.3 (HDX SoC SDK) 的接收器Raspberry HDX Ready Pi
这是最后一次启动我的 Windows 10 虚拟桌面的证据。喜欢这个小家伙。没有它就不要离开家。

那么问题是,为什么 Windows 接收器的行为与其他接收器不同?尽管通过 StoreFront 网站 (Receiver for Web) 启动效果很好,但为什么它不允许我将 HTTPS NetScaler Gateway URL 添加到本机 Receiver?
默认情况下,Windows Receiver 需要“HTTPS”网址。如果您像这样添加 URL,则默认情况下它将通过加密的 SSL/TLS 连接通过 HTTPS:

如果您在网址中添加“HTTP”,它会向您发出如下警告:HTTP Store 在添加到 Citrix Receiver 之前需要进行额外配置。请联系您的系统管理员。

这是因为最佳做法是始终使用 SSL,无论是在客户端的前端还是与服务器的后端通信。我总是在生产环境中采用这种方法。每当我部署某些东西时,我总是会承担FIPS 140-2心态,因为即使您现在可能不必担心 FIPS 合规性,但以后您甚至可能需要通过另一个监管机构做类似的事情,因此无论您从事哪个行业,无论您在构建什么东西,最好都是从正确的起点开始保护您的基础设施。简而言之,对数据中心中的所有内容进行加密。如今,攻击者在您的数据中心站稳脚跟的情况太常见了,请尽可能让他们难以嗅探流量。
Citrix 不希望您在此处添加基于 HTTP 的 StoreFront 网址。这很好,但我们要添加基于 HTTPS 的 NetScaler Gateway URL。为什么会失败?
在我见过的某些环境中,人们喜欢使用 NetScaler Gateway 将 HTTPS 流量发送到客户端,但将后端通过端口 80 通过 HTTP 留给 StoreFront。这仅节省了购买另一个证书的一点现金,并缩短了 StoreFront 部署的几分钟时间(在 IIS 中绑定 SSL 证书)。我认为不值得,但我已经看到了。就我而言,为了快速进行 XenApp 7.12 演示,我在实验室中完成了此设置,我刚刚更改了 NetScaler Gateway 会话策略,从正常的生产环境转到这个新的演示环境。就在那时我注意到 Windows 接收器失败了。
所有接收器都这样做吗?
为了解释我的设置,这是我的所有接收器都连接到的 NetScaler Gateway:

这是它调用的会话配置文件。此 URL 正在访问 NetScaler 上的负载平衡虚拟服务器,其后面有我的 StoreFront 服务器:

这是负载平衡的虚拟服务器,其后面的服务组中有我的 2 台 StoreFront 服务器。您可以在这里看到我正在使用 HTTP(端口 80):

在我的 StoreFront 3.8 服务器上,我尚未在 IIS 中安装 SSL 证书。我已将 StoreFront 基本 URL 配置为仅 HTTP 站点。

您可以在此处看到 StoreFront 警告我这一点,因为在生产环境中,您应该尽可能始终使用 SSL:

调整 Receiver 让 Windows 正常工作
在某些情况下,您可能希望根据最佳实践强制使用 HTTP StoreFront 网址。这可以通过遵循 Citrix 的这篇 CTX 文章“如何配置 Citrix Receiver for Windows 以手动添加 HTTP 应用商店”来完成:
https://support.citrix.com/article/CTX134341
这篇文章确实不适用于我们。我们从 NetScaler Gateway 添加 HTTPS URL,而不是直接添加 StoreFront。由于后端 StoreFront 基本 URL 是 HTTP,因此 Windows Receiver 在针对 NetScaler Gateawy 进行身份验证并下拉配置后会在其配置中看到这一点。它不喜欢它。其他接收器都很好,但 Windows 接收器失败。即使您要添加 HTTPS URL,它似乎也需要此注册表项。
我想花一点时间指出 CitrixAGBasic 并没有失败。在 NetScaler Gateway 上执行 aaad.debug 就可以了。检查 StoreFront 服务器上的“Citrix Delivery Services”事件日志,它们是干净的。任何地方都没有错误或警告消息。这纯粹是在进行身份验证并且客户端开始与 StoreFront 通信后发生的客户端问题。
打开注册表并导航至:
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeCitrixDazzle 
然后双击“AllowAddStore”键进行编辑。添加值“A”,如下所示:

现在您的注册表将如下所示:

此时,您可以打开 Receiver 并点击“登录”,但当您登录并枚举应用和桌面时,它可能会表现不稳定。更好的做法是右键单击系统托盘中的 Receiver,然后转到“高级首选项”。单击重置接收器选项:

继续并点击“是,重置接收器”:

完成后您会收到确认信息:

现在接收方将要求您再次添加帐户。不要这样做。转到系统托盘,右键单击“Receiver”,然后单击“退出”:

现在转到“开始”菜单并再次启动 Citrix Receiver:

现在添加您的网关网址,不要输入 HTTPS,如下所示:

像平常一样输入您的凭据:

瞧!这次 Receiver 实际上添加了应用商店并完整枚举了您的应用程序和桌面:

转到您的姓名所在的位置并点击它以查看帐户:

双击您的商店:

在“编辑帐户”对话框中,您可以看到它采用了后端 StoreFront 基本网址。即使您通过 NetScaler Gateway 使用 SSL ICA 代理,接收方仍抱怨“指定的 URL 不安全”:

现在在实验室或小型演示环境中这很好,因为您可以控制它。在生产环境中,您必须通过组策略编辑此注册表项并将其推送到所有客户端。当然,您无法为家庭用户执行此操作,因此他们会不断致电服务台寻求帮助,并说“接收器已损坏”。这就是为什么您应该在 StoreFront 服务器上真正使用 SSL 证书,以防止这种令人头疼的问题并保护您的环境。请记住,您无需为公共 CA 的证书付费。您始终可以建立自己的 CA 服务器并将内部证书添加到 StoreFront 服务器。所有访问 StoreFront 的内部客户都会信任它。当您通过 NetScaler Gateway 进行代理时,所有外部客户端都将正常工作,因为它们使用绑定到 NetScaler Gateway 虚拟服务器的公共证书进行通信。而且您仍然可以通过 NetScaler 在后端使用 SSL 多路复用(也称为端到端 SSL),因此您的 StoreFront 服务器上的压力会稍微减轻一些。
这是有效的证明。在这张图中,我登录到了一台未加入域的 PC。它没有注册表项,但我可以很好地添加 NetScaler Gateway URL。这是因为 StoreFront 基本 URL 设置为使用内部证书的 HTTPS。未加入域的 PC 不知道内部 CA,即使它在其接收器配置中显示它。一切都通过 NetScaler Gateway URL (gw.jasonsamuel.com) 进行代理,该 URL 上有公共证书:

Receiver for Windows 的行为与其他 Receiver 之间肯定存在一些差异。如果您遇到此问题,我希望本文对您有所帮助。如果这有帮助或者您有任何疑问,请在下面发表评论。
作者