SSL
配置 XenApp 或 XenDesktop 站点以使用安全套接字层 (SSL) 安全协议包括以下过程:
-
获取服务器证书并在所有 Delivery Controller 上安装和注册,并使用 SSL 证书配置端口。有关详细信息,请参阅在 Controller 上安装 SSL 服务器证书。
(可选)可以更改 Controller 用于侦听 HTTP 和 HTTPS 流量的端口。
-
通过完成以下任务在用户和 Virtual Delivery Agents (VDA) 之间启用 SSL 连接:
- 在安装 VDA 的计算机上配置 SSL。(方便起见,后面将安装 VDA 的计算机简称为 VDA。)可以使用 Citrix 提供的 PowerShell 脚本,也可以手动配置。有关常见信息,请参阅关于 VDA 上的 SSL 设置。有关详细信息,请参阅使用 PowerShell 脚本在 VDA 上配置 SSL 和在 VDA 上手动配置 SSL。
- 通过在 Studio 中运行一组 PowerShell cmdlet,在包含 VDA 的交付组中配置 SSL。有关详细信息,请参阅在交付组上配置 SSL。
要求和注意事项:
- 在用户和 VDA 之间启用 SSL 连接仅对 XenApp 7.6 和 XenDesktop 7.6 及后续受支持的版本有效。
- 在安装组件、创建站点、创建计算机目录和创建交付组之后,在交付组中和 VDA 上配置 SSL。
- 要在交付组中配置 SSL,必须具有更改 Controller 访问规则的权限。完全权限管理员具有此权限。
- 要在 VDA 上配置 SSL,必须是安装 VDA 的计算机上的 Windows 管理员。
- 如果打算在从早期版本升级的 VDA 上配置 SSL,请在升级之前卸载这些计算机上的 SSL Relay 软件。
- PowerShell 脚本在静态 VDA 上配置 SSL,不会在通过 Machine Creation Services 或 Provisioning Services 置备的池 VDA 上配置 SSL。对于第二种情况,计算机映像在每次重新启动时重置。
对于包括使用 Windows 注册表的任务:
小心: 注册表编辑不当会导致严重问题,可能需要重新安装操作系统。Citrix 无法保证因注册表编辑器使用不当导致出现的问题能够得以解决。使用注册表编辑器需自担风险。在编辑注册表之前,请务必进行备份。
有关为站点数据库启用 SSL 的信息,请参阅 CTX137556。
在 Controller 上安装 SSL 服务器证书
对于 HTTPS,XML Service 通过使用服务器证书而非客户端证书来支持 SSL 功能。要获取证书并在 Controller 上进行安装和注册,以及使用 SSL 证书配置端口,请遵循以下操作:
- 如果 Controller 中安装了 IIS,请按照 https://technet.microsoft.com/en-us/library/cc771438%28v=ws.10%29.aspx 中的指导进行操作。
- 如果控制器中未安装 IIS,配置证书的其中一种方法是:
-
按照 http://blogs.technet.com/b/pki/archive/2009/08/05/how-to-create-a-web-server-ssl-certificate-manually.aspx 中的指导获取 SSL 服务器证书并将其安装在 Controller 上。有关 certreq 工具的信息,请参阅 http://technet.microsoft.com/en-us/library/cc736326(WS.10).aspx。
如果打算使用 PowerShell 脚本在 VDA 上配置 SSL,请确保证书位于证书存储的“本地计算机”>“个人”>“证书”区域,除非您打算指定 SSL 证书的指纹。如果多个证书位于此位置,将使用找到的第一个证书。
-
使用证书配置端口;请参阅 http://msdn.microsoft.com/en-us/library/ms733791%28v=vs.110%29.aspx。
-
更改 HTTP 或 HTTPS 端口
默认情况下,Controller 上的 XML Service 在端口 80 上侦听 HTTP 流量,在端口 443 上侦听 HTTPS 流量。尽管可以使用非默认端口,但请注意:将 Controller 暴露在不受信任的网络上存在安全风险。部署独立 StoreFront 服务器比更改默认值更可取。
要更改 Controller 使用的默认 HTTP 或 HTTPS 端口,请从 Studio 运行以下命令:BrokerService.exe -WIPORT
其中,
注意:更改端口后,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 上的 SSL 设置
在 VDA 上配置 SSL 时,会更改已安装 SSL 证书上的权限,向 ICA Service 授予证书私钥的读取权限,并将以下信息告知 ICA Service:
-
证书存储中用于 SSL 的证书。
-
用于 SSL 连接的 TCP 端口号。
必须将 Windows 防火墙(如果启用)配置为允许此 TCP 端口上的传入连接。使用 PowerShell 脚本时会完成此配置。
-
允许的 SSL 协议版本。
支持的 SSL 协议版本遵循以下层次结构(从最低到最高):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 连接。
-
允许的 SSL 密码。
密码集是常用 SSL 密码的列表。客户端连接并发送受支持的 SSL 密码列表时,VDA 将客户端的其中一个密码与其已配置密码集中的其中一个密码相匹配并接受连接。如果客户端发送的密码不在 VDA 的密码集中,VDA 将拒绝连接。
支持三种密码集:GOV(ernment)、COM(mercial) 和 ALL。这些密码套件中的密码取决于 Windows FIPS 模式;请参阅 http://support.microsoft.com/kb/811833 以了解有关 Windows FIPS 模式的信息。下表列出了受支持的每种密码集中的密码。
SSL 密码集 GOV COM ALL GOV COM ALL FIPS 模式 关 关 关 开 开 开 RSA_KEYX x x x x x x RSA_SIGN x x x x x x 3DES x x x x RC4 x x MD5 x x x SHA x x x x x x SHA_256 x x x x x x SHA_384 x x x x x x SHA_512 x x x x x x AES x x x x x x
交付组不能既包含已配置 SSL 的 VDA 又包含未配置 SSL 的 VDA。为交付组配置 SSL 时,应该已经为此交付组中的所有 VDA 配置 SSL。
使用 PowerShell 脚本在 VDA 上配置 SSL
Enable-VdaSSL.ps1 脚本可在 VDA 上启用或禁用 SSL 侦听器。此脚本位于安装介质上的“Support”(支持)>“Tools”(工具)>“SslSupport”文件夹中。
启用 SSL 时,此脚本为指定的 TCP 端口禁用现有的所有 Windows 防火墙规则,然后添加新规则以允许 ICA Service 仅接受 SSL TCP 端口上的传入连接。它还对以下各项禁用 Windows 防火墙规则:
- Citrix ICA(默认:1494)
- Citrix CGP(默认:2598)
- Citrix WebSocket(默认:8008)
结果,用户仅可以通过 SSL 连接,而不能使用原始 ICA、CGP 或 WebSocket 进行连接。
此脚本包含以下语法描述以及其他示例;您可以使用 Notepad++ 等工具查看此信息。
必须指定 –Enable 或 –Disable 参数;其他所有参数为可选参数。
语法:
Enable-VdaSSL {-Enable | -Disable} [–SSLPort \] \[-SSLMinVersion “”\] \[-SSLCipherSuite “”\] \[-CertificateThumbPrint “”\]指纹>套件>最低>端口> |
参数 | 说明 |
---|---|
-Enable | 在 VDA 上安装并启用 SSL 侦听器。必须带有此参数或 –Disable 参数。 |
-Disable | 在 VDA 上禁用 SSL 侦听器。必须带有此参数或 –Enable 参数。如果指定此参数,其他参数均无效。 |
–SSLPort 端口> | SSL 端口。默认值:443 |
-SSLMinVersion “”最低> | 最低 SSL 协议版本,两边用引号括起来。有效值:”SSL_3.0”、”TLS_1.0”、”TLS_1.1” 和 “TLS_1.2”。默认值:”TLS_1.0” |
-SSLCipherSuite “”密码集> | SSL 密码集,两边用引号括起来。有效值:”GOV”、”COM” 和 “ALL”。默认值:”ALL” |
-CertificateThumbPrint “”指纹> | 证书存储中 SSL 证书的指纹,两边用引号括起来。通常在证书存储中包含多个证书时使用此参数;脚本使用指纹来选择要使用的证书。默认值:在证书存储区域的“本地计算机”>“个人”>“证书”区域找到的第一个可用证书。 |
示例:
以下脚本使用所有可选参数的默认值安装并启用 SSL 侦听器。
Enable-VdaSSL –Enable
以下脚本安装并启用 SSL 侦听器,指定 SSL 端口 400、GOV 密码集和最低 TLS 1.2 SSL 协议值。
Enable-VdaSSL – Enable –SSLPort 400 ‘SSLMinVersion “TLS_1.2”
–SSLCipherSuite “GOV”
以下脚本在 VDA 上禁用 SSL 侦听器。
Enable-VdaSSL –Disable
在 VDA 上手动配置 SSL
在 VDA 上手动配置 SSL 时,可以向各个 VDA 上的相应服务授予 SSL 证书私钥的一般读取权限:NT SERVICE\PorticaService(对于 VDA for Windows Desktop OS)或者 NT SERVICE\TermService(对于 VDA for Windows Server OS)。在安装 VDA 的计算机上:
- 启动 Microsoft 管理控制台 (MMC):“开始”>“运行”> mmc.exe。
- 将证书管理单元添加到 MMC:
- 选择文件 > 添加/删除管理单元。
- 选择证书,然后单击添加。
- 收到“该管理单元将始终为下列帐户管理证书:”提示时,选择计算机帐户,然后单击下一步。
- 收到“请选择需要这个管理单元管理的计算机”提示时,选择本地计算机,然后单击完成。
- 在“证书(本地计算机)”>“个人”>“证书”下,在证书上单击鼠标右键,然后选择所有任务 > 管理私钥。
- 访问控制列表编辑器显示“(友好名称)私钥的权限”,其中,(友好名称) 是 SSL 证书的名称。添加以下其中一项服务并向其授予读取权限:
- 对于 VDA for Windows Desktop OS:”PORTICASERVICE”
- 对于 VDA for Windows Server OS:”TERMSERVICE”
- 双击已安装的 SSL 证书。在证书对话框中,选择“详细信息”选项卡,然后滚动到底部。单击指纹。
- 运行 regedit 并转至 HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\icawd。
- 编辑 SSL 指纹注册表项并将 SSL 证书的指纹值复制到此二进制值中。可以忽略编辑二进制值对话框中的未知项(如 ‘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)。
- 如果 SSL TCP 端口不是默认值 443,请确保此端口在 Windows 防火墙中处于打开状态。(在 Windows 防火墙中创建入站规则时,请确保其属性已选中“允许连接”或“启用”条目)。
- 确保没有其他应用程序或服务(如 IIS)正在使用 SSL TCP 端口。
- 对于 VDA for Windows Server OS,重新启动计算机以使更改生效。(无需重新启动包含 VDA for Windows Desktop OS 的计算机)。
在交付组上配置 SSL
为包含已配置 SSL 连接的 VDA 的每个交付组完成此过程。
-
从 Studio,打开 PowerShell 控制台。
-
运行 asnp Citrix.* 以加载 Citrix 产品 cmdlet。
-
运行 Get-BrokerAccessPolicyRule –DesktopGroupName ‘’ \| Set-BrokerAccessPolicyRule –HdxSslEnabled $true。交付组名称>
其中, 是包含 VDA 的交付组的名称。交付组名称>
-
运行 Set-BrokerSite –DnsResolutionEnabled $true。
故障排除
如果连接出错,请检查 VDA 的系统事件日志。
使用 Receiver for Windows 时,如果收到指示 SSL 错误的连接错误(如 1030),请禁用 Desktop Viewer,然后尝试重新连接。尽管连接仍会失败,但可能会提供对基本 SSL 问题的解释(例如,在从证书颁发机构申请证书时指定了错误的模板)。