XenApp和XenDesktop

传输层安全(TLS)

配置XenApp / XenDesktop站点使用TLS (Transport Layer Security)协议的过程如下:

  • 在所有交付控制器上获取、安装和注册服务器证书,并使用TLS证书配置端口。详细信息请参见在控制器上安装TLS服务器证书

    您还可以更改Controller用于侦听HTTP和HTTPS通信的端口。

  • 启用用户与vda之间的TLS连接需要完成以下任务:

    要求和注意事项:

    • 启用用户和vda之间的TLS连接仅适用于XenApp 7.6和XenDesktop 7.6站点,以及后续支持的版本。
    • 安装组件、创建Site、创建Machine Catalogs和创建Delivery Groups后,需要在Delivery Groups和vda中配置TLS。
    • 要在交付组中配置TLS,您必须具有更改控制器访问规则的权限;完全管理员具有此权限。
    • 要在VDA上配置TLS,您必须是安装VDA的计算机上的Windows管理员。
    • 如果您打算在已从早期版本升级的vda上配置TLS,请在升级之前卸载这些机器上的所有SSL中继软件。
    • PowerShell脚本在静态vda上配置TLS;它没有在机器创建服务或供应服务提供的池vda上配置TLS,其中机器映像在每次重新启动时重置。

警告:

对于包括在Windows注册表中工作的任务,不正确地编辑注册表可能会导致严重问题,可能需要重新安装操作系统。Citrix不能保证由错误使用注册表编辑器引起的问题能够得到解决。使用注册表编辑器的风险自负。在编辑注册表之前,请确保备份注册表。

有关对站点数据库启用TLS的信息,请参见CTX137556

注意:

如果VDA同时启用TLS和UDT:

  • 对于直接访问VDA, Citrix Receiver总是使用TCP之上的TLS(而不是UDP和UDT)。
  • 对于使用NetScaler Gateway间接访问VDA, Citrix Receiver使用UDP之上的DTLS与NetScaler Gateway进行通信。NetScaler Gateway与VDA之间的通信采用UDP协议,不支持DTLS协议。使用UDT。

在控制器上安装TLS服务器证书

对于HTTPS, XML服务通过使用服务器证书而不是客户端证书来支持TLS特性。本节介绍在交付控制器中获取和安装TLS证书。同样的步骤可以应用于云连接器来加密STA和XML通信。

尽管存在各种不同类型的证书颁发机构以及向它们请求证书的方法,但本文将介绍Microsoft证书颁发机构。Microsoft证书颁发机构需要发布一个用于服务器身份验证的证书模板。

如果将Microsoft证书颁发机构集成到Active Directory域或集成到交付控制器所加入的受信任林中,则可以从证书MMC管理单元中的证书注册向导获取证书。

请求并安装证书

  1. 在交付控制器上,打开MMC控制台并添加Certificates管理单元。当出现提示时,选择计算机帐户。
  2. 扩大个人>证书,然后使用所有任务>请求新证书上下文菜单命令。

    MMC证书管理单元"loading=

  3. 点击下一个开始,并且下一个确认您正在从活动目录注册中获取证书。
  4. 选择“服务器身份验证证书”模板。如果模板已设置为自动为Subject提供值,则可以单击招收没有提供更多细节。

    请求证书对话框"loading=

  5. 若要提供证书模板的详细信息,请单击细节箭头按钮,配置如下:

    主题名称:选择“Common Name”,添加下发控制器的FQDN。

    选择的名字:选择“DNS”,添加下发控制器的FQDN。

    证书属性"loading=

配置SSL/TLS监听端口

  1. 以计算机管理员的身份打开PowerShell命令窗口。
  2. 执行以下命令获取Broker Service Application GUID:

    New-PSDrive- nameHKCR-PSProvider注册表HKEY_CLASSES_ROOTService_Guid美元Get-ChildItemHKCR: \安装\产品- recurseea0|美元的关键$ _$ _GetValueNames()|ForEach-Object美元的关键GetValue$ _|$ _例如“思杰经纪服务”|Select-Object的名字Service_Guid美元的名字匹配“[A-Z0-9] *美元”美元Guid$匹配0GUIDFormatted_Guid美元美元GuidRemove-PSDrive- nameHKCRWrite-Host"经纪人服务应用GUID:$ (Formatted_Guid美元-ForegroundColor黄色的<——NeedCopy-->
  3. 在同一个PowerShell窗口上运行以下命令获取之前安装的证书的Thumbprint:

    美元的主机的名字([System.Net.Dns)::GetHostByName((envcomputerName)))主机名美元的拇指指纹Get-ChildItem路径证书:\ LocalMachine \我|$ _主题匹配“CN =”+美元的主机的名字)})拇指指纹加入“;”Write-Host对象“证书拇指指纹$ (美元的主机的名字):美元的拇指指纹前景黄色的<——NeedCopy-->
  4. 在同一个PowerShell窗口上运行以下命令配置Broker Service SSL/TLS端口,并使用证书进行加密:

    IPV4_Address美元测试连接-ComputerName美元的主机的名字1|Select-Object-ExpandPropertyIPV4AddressIPPort美元$ (IPV4_Address美元: 443”SSLxml美元"http add sslcert ipport= .IPPort美元certhash =美元的拇指指纹appid = {Formatted_Guid美元}”SSLxml美元|netshnetshhttp显示sslcert<——NeedCopy-->

正确配置后,最后一个命令的输出.netsh HTTP show sslcert .net显示侦听器正在使用正确的IP:端口,以及应用程序ID匹配代理服务应用程序GUID。

提供服务器信任安装在交付控制器上的证书,您现在可以将StoreFront交付控制器和Citrix Gateway STA绑定配置为使用HTTPS而不是HTTP。

密码套件顺序列表应包括TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256密码套件(或两者都有)。这些密码套件必须在any之前TLS_DHE_密码套件。

注意:

Windows Server 2012不支持GCM密码套件TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

  1. 使用Microsoft组策略编辑器,浏览到计算机配置>管理模板>网络> SSL配置设置
  2. 编辑策略SSL加密套件订单.缺省情况下,该策略为没有配置.将此策略设置为启用
  3. 以正确的顺序安排套间;删除您不想使用的任何密码套件。

确保TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,或TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256先于任何TLS_DHE_密码套件。

在Microsoft MSDN上,请参见优先级通道密码套件

修改HTTP或HTTPS端口

默认情况下,控制器上的XML服务在端口80上侦听HTTP流量,在端口443上侦听HTTPS流量。虽然可以使用非默认端口,但要注意将控制器暴露给不受信任的网络的安全风险。部署一个独立的StoreFront服务器比更改默认值更可取。

要更改Controller使用的默认HTTP或HTTPS端口,在Studio中运行以下命令:

BrokerService.exe -WIPORT http-port -WISSLPORT http-port

在哪里http端口HTTP通信的端口号和https端口为HTTPS通信的端口号。

更改端口后,Studio可能会显示关于许可证兼容性和升级的消息。要解决此问题,请使用以下PowerShell cmdlet序列重新注册服务实例:

Get-ConfigRegisteredServiceInstance -ServiceType Broker -Binding XML_HTTPS|

Unregister-ConfigRegisteredServiceInstance

Get-BrokerServiceInstance|绑定-eq " XML_HTTPS "|Register-ConfigServiceInstance

仅强制HTTPS通信

如果您希望XML服务忽略HTTP通信,请在控制器上的HKLM\Software\Citrix\DesktopServer\中创建以下注册表设置,然后重新启动代理服务。

要忽略HTTP流量,创建DWORD XmlServicesEnableNonSsl并将其设置为0。

您可以创建一个相应的注册表DWORD值来忽略HTTPS流量:DWORD XmlServicesEnableSsl。确保它没有被设置为0。

vda上的TLS设置

一个交付组不能同时配置一些配置了TLS的vda和一些未配置TLS的vda。为传递组配置TLS时,应该已经为该传递组中的所有vda配置了TLS

当您在vda上配置TLS时,安装的TLS证书上的权限将被更改,赋予ICA服务对证书私钥的读访问权,并通知ICA服务以下内容:

  • 证书存储区中的哪个证书用于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连接。

  • 允许哪些TLS加密套件。

密码套件选择将用于连接的加密。客户端和vda可以支持不同的密码套件集。当客户端(Citrix Receiver或StoreFront)连接并发送支持的TLS密码套件列表时,VDA将客户端的一个密码套件与它自己配置的密码套件列表中的一个密码套件匹配,并接受连接。如果没有匹配的密码套件,VDA将拒绝连接。

VDA支持三套密码套件(也称为遵从模式):政府(政府)、COM(商业)和ALL。可接受的密码套件还取决于Windows FIPS模式;看到https://support.microsoft.com/kb/811833参阅有关Windows FIPS模式的资料。下表列出了每个集合中的密码套件:

TLS加密套件 政府 COM 所有 政府 COM 所有
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_RSA_WITH_AES_256_GCM_SHA384 x x x x
TLS_RSA_WITH_AES_128_GCM_SHA256 x x x x x x
TLS_RSA_WITH_AES_256_CBC_SHA256 x x x x
TLS_RSA_WITH_AES_256_CBC_SHA x x x x
TLS_RSA_WITH_AES_128_CBC_SHA x x x x
TLS_RSA_WITH_RC4_128_SHA x x
TLS_RSA_WITH_RC4_128_MD5 x x
TLS_RSA_WITH_3DES_EDE_CBC_SHA x x x x

重要的是:

如果VDA是在Windows Server 2012 R2、Windows Server 2016、Windows 10周年纪念版或后续支持的版本上,则需要额外的步骤。这会影响从Citrix Receiver for Windows(4.6到4.9版本)、Citrix Receiver for HTML5和Citrix Receiver for Chrome的连接。这也包括通过NetScaler网关的连接。

如果NetScaler Gateway和VDA之间配置了TLS,对于所有VDA版本,使用NetScaler Gateway的所有连接也需要此步骤。这将影响所有Citrix Receiver版本。

在VDA (Windows Server 2016或Windows 10周年纪念版或更高版本)中,使用组策略编辑器转到计算机配置>管理模板>网络> 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_RSA_WITH_AES_256_GCM_SHA384
  • TLS_RSA_WITH_AES_128_GCM_SHA256
  • TLS_RSA_WITH_AES_256_CBC_SHA256
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_RC4_128_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA

注意:

前四项还指定椭圆曲线,P384或P256。确保“curve25519”未被选中。FIPS模式不阻止使用“curve25519”。

配置此组策略设置时,VDA仅在两个列表中都出现时才选择密码套件:组策略列表和所选遵从模式(COM、GOV或ALL)的列表。密码套件还必须出现在客户端(Citrix Receiver或StoreFront)发送的列表中。

此组策略配置还会影响VDA上的其他TLS应用程序和服务。如果应用程序需要特定的密码套件,则可能需要将它们添加到此组策略列表中。

重要的是:

即使应用组策略更改时显示组策略更改,TLS配置的组策略更改仅在操作系统重新启动后生效。因此,对于池桌面,将TLS配置的组策略更改应用到基本映像。

在VDA上使用PowerShell脚本配置TLS

Enable-VdaSSL。ps1脚本在VDA上启用或禁用TLS侦听器。该脚本可在安装介质的“Support >Tools > SslSupport”文件夹中获取。

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

  • Citrix ICA(默认值:1494)
  • Citrix CGP(默认值:2598)
  • Citrix WebSocket(默认值:8008)

其结果是用户只能使用TLS进行连接;他们不能使用ICA/HDX,会话可靠性的ICA/HDX,或WebSocket上的HDX,没有TLS。

看到网络端口

注意:

对于无状态机器,如PVS目标或MCS克隆,默认情况下使用FQDN证书。

该脚本包含以下语法描述,以及额外的示例;您可以使用notepad++等工具来查看这些信息。

重要的是:

指定Enable或Disable参数和CertificateThumbPrint参数。其他参数为可选配置。

语法

Enable-VdaSSL {-Enable | -Disable} -CertificateThumbPrint "" [-SSLPort ] [-SSLMinVersion ""] [-SSLCipherSuite""] 
参数 描述
启用 在VDA上安装并启用TLS侦听器。该参数或Disable参数是必选参数。
禁用 禁用VDA上的TLS侦听器。该参数或“启用”参数必选。如果指定此参数,则其他参数均无效。
CertificateThumbPrint " <拇指指纹> " 证书存储区中TLS证书的指纹,用引号括起来。该脚本使用指定的指纹选择要使用的证书。如果不填写,表示选择的证书不正确。
SSLPort <口> TLS端口。默认值:443
SSLMinVersion " <版本> " 最小TLS协议版本,用引号括起来。有效值:“SSL_3.0”、“TLS_1.0”(默认),“TLS_1.1”和“TLS_1.2”。重要的是:Citrix建议客户审查他们对SSLv3的使用情况,并采取步骤重新配置他们的部署,以便在适当的时候删除对SSLv3的支持。看到CTX200238
SSLCipherSuite“> <套件” TLS加密套件,用引号括起来。有效值:GOV, COM, ALL(默认值)

例子

下面的脚本安装并启用TLS 1.2协议版本值。拇指指纹(在本例中表示为“12345678987654321”)用于选择要使用的证书。

enable - vdasl -Enable -CertificateThumbPrint "12345678987654321"

下面的脚本安装并启用TLS侦听器,并指定TLS端口400、GOV密码套件和最小TLS 1.2协议值。拇指指纹(在本例中表示为“12345678987654321”)用于选择要使用的证书。

启用- vdassl -启用-CertificateThumbPrint "12345678987654321" -SSLPort 400 -SSLMinVersion "TLS_1.2" -SSLCipherSuite "All"

下面的脚本在VDA上禁用TLS侦听器。

Enable-VdaSSL禁用

在VDA上手动配置TLS

在VDA上手动配置TLS时,为每个VDA上的适当服务授予对TLS证书私钥的通用读访问:对于Windows Desktop操作系统的VDA,授予NT service \PorticaService,对于Windows Server操作系统的VDA,授予NT service \TermService。在安装VDA的机器上:

  1. 启动微软管理控制台(MMC):开始>执行> mmc.exe
  2. 将Certificates管理单元添加到MMC:

    1. 选择文件>添加/删除管理单元
    2. 选择证书然后点击添加
    3. 当提示这个管理单元将始终管理以下证书:,选择计算机帐户然后点击下一个
    4. 当提示选择要此管理单元管理的计算机,选择本地计算机然后点击完成
  3. 证书(本地计算机)>个人>证书,右键单击证书,选择>管理私钥

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

    • 对于Windows Desktop操作系统的VDA,“PORTICASERVICE”
    • 对于Windows Server操作系统的VDA,“TERMSERVICE”
  5. 双击已安装的TLS证书。在证书对话框中,选择细节选项卡,然后滚动到底部。点击拇指指纹

  6. 运行regedit,进入HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\icawd。

    1. 编辑SSL拇指指纹密钥并将TLS证书的拇指指纹的值复制到此二进制值中。您可以安全地忽略“编辑二进制值”对话框中的未知项(例如“0000”和特殊字符)。
    2. 编辑SSLEnabled密钥并将DWORD值更改为1。(如果稍后要禁用SSL,请将DWORD值更改为0。)
    3. 如果您想更改默认设置(可选),请在同一注册表路径下使用以下命令:

      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端口不是默认的443,请确保在Windows防火墙中是打开的。(当您在Windows防火墙中创建入站规则时,确保其属性具有允许连接而且启用选中的条目。)

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

  9. 对于Windows Server操作系统的vda,修改后需要重启机器才能生效。(Windows Desktop操作系统不需要重启有vda的机器。)

在交付组上配置TLS

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

  1. 从Studio打开PowerShell控制台。
  2. 运行asnp Citrix。*加载Citrix产品cmdlets。
  3. 运行Set-BrokerAccessPolicyRule -HdxSslEnabled $true
  4. 运行Set-BrokerSite -DnsResolutionEnabled $true

故障排除

如果出现连接错误,请检查VDA的系统事件日志。

在Windows上使用Citrix Receiver时,如果收到指示TLS错误的连接错误(例如1030),请禁用桌面查看器,然后尝试再次连接。尽管连接仍然会失败,但可能会提供底层TLS问题的解释。例如,您在向证书颁发机构请求证书时指定了错误的模板。)

控制器和VDA之间的通信

控制器和VDA之间的通信由Windows通信框架(WCF)消息级保护保护。不需要使用TLS提供额外的传输级保护。WCF配置使用Kerberos在Controller和VDA之间进行相互身份验证。加密使用CBC模式的AES, 256位密钥。消息完整性使用SHA-1。

根据微软的说法,安全协议WCF使用的标准符合OASIS(结构化信息标准促进组织)的标准,包括WS-SecurityPolicy 1.2。此外,微软声明WCF支持中列出的所有算法套件安全策略1.2

控制器和VDA之间的通信使用basic256算法集,其算法如上所述。

TLS和HTML5视频重定向

你可以使用HTML5视频重定向来重定向HTTPS网站。注入到这些网站的JavaScript必须与运行在VDA上的Citrix HDX HTML5视频重定向服务建立TLS连接。为了实现这一点,HTML5视频重定向服务在VDA的证书存储中生成两个自定义证书。停止服务将删除证书。

默认情况下,HTML5视频重定向策略为关闭状态。

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