Citrix虚拟应用和桌面

传输层安全性(TLS)

Citrix虚拟应用程序和桌面支持用于组件之间的基于TCP的连接的传输层安全性(TLS)协议。Citrix Virtual Apps和Desktops还支持基于UDP的ICA / HDX连接的数据报传输层安全(DTL)协议,使用自适应传输

TLS和DTLS类似,支持相同的数字证书。将Citrix虚拟应用程序或Citrix虚拟桌面站点配置为使用TLS也会将其配置为使用DTLS。使用以下程序;这些步骤对TLS和DTLS都是通用的,除非有以下说明:

  • 获取,安装和注册所有递送控制器上的服务器证书,并使用TLS证书配置端口。有关详细信息,请参阅在控制器上安装TLS服务器证书

    您还可以选择更改Controller用来侦听HTTP和HTTPS流量的端口。

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

    • 在安装VDA的计算机上配置TLS。(为方便起见,进一步引用安装VDA的机器只是称为“VDA”)以获取一般信息,请参阅VDAS上的设置.强烈建议您使用Citrix提供的PowerShell脚本来配置TLS / DTL。有关详细信息,请参阅使用PowerShell脚本在VDA上配置TLS.但是,如果要手动配置TLS / DTL,请参阅手动在VDA上配置TLS
    • 通过在Studio中运行一组PowerShell cmdlet来配置包含VDA的传递组中的TLS。有关详细信息,请参阅在发送组上配置TLS

      要求和注意事项:

      • 在用户和VDAs之间启用TLS连接仅对XenApp 7.6和XenDesktop 7.6站点有效,以及后续支持的版本。
      • 在安装组件后,在递送组和VDAS上配置TLS,创建站点,创建机器目录和创建传递组。
      • 要在交付组中配置TLS,您必须具有更改Controller访问规则的权限。完全管理员具有此权限。
      • 要在VDAS上配置TLS,您必须是安装VDA的计算机上的Windows管理员。
      • 在通过机器创建服务或配置服务提供的池化VDAS上,VDA机器映像在重新启动时重置,导致以前的TLS设置丢失。每次重新启动VDA以重新配置TLS设置时运行PowerShell脚本。

警告:

对于包括在Windows注册表中工作的任务 - 编辑注册表错误地可能导致可能要求您重新安装操作系统的严重问题。Citrix无法保证可以解决由注册表编辑器使用不正确使用的问题。使用注册表编辑器以您自己的风险。在编辑之前,请务必备份注册表。

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

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

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

尽管有各种不同类型的证书颁发机构和向它们请求证书的方法,但本文描述的是Microsoft证书颁发机构。Microsoft证书颁发机构需要发布一个用于服务器身份验证的证书模板。

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

请求和安装证书

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

    MMC证书管理单元“></p></li>
            <li>点击<strong>下一个</strong>开始,<strong>下一个</strong>要确认您正在从Active Directory注册中获取证书。</li>
            <li><p>选择服务器身份验证证书的模板。如果已设置模板以自动提供您可以单击的主题的值<strong>注册</strong>没有提供更多细节。</p><p><img src=配置SSL / TLS侦听器端口

    1. 将PowerShell命令窗口打开作为计算机管理员。
    2. 运行以下命令以获取代理服务应用程序GUID:

      新的psdrive.-名称HKCR.-PSPROVIDER.注册表-根HKEY_CLASSES_ROOT.Service_Guid美元=Get-ChildItemHKCR:\ Installer \产品-recurse.ea0.|在哪里 - 对象{美元的关键=$ _;$ _getValuenames.()|foreach-object.{美元的关键GetValue.$ _}|在哪里 - 对象{$ _例如Citrix代理服务的}}|选择对象名称Service_Guid美元名称-匹配“[A-Z0-9] *美元”$ GUID.=$匹配[0.][GUID.]$ formatted_guid.=$ GUID.删除psdrive.-名称HKCR.写主机"代理服务应用程序GUID:$($ formatted_guid.-前景色黄色
    3. 在同一个PowerShell窗口上运行以下命令,获取之前安装的证书的Thumbprint:

      $主机名称=([System.Net。DNS.] ::gethostbyname.(($env.computername.))))主机名$ thumb打印=Get-ChildItem-小路证书:\ localMachine \我的|在哪里 - 对象{$ _主题-匹配“CN =”+$主机名称)})拇指指纹-加入';'写主机-目的“证书指纹$($主机名称):$$ thumb打印-前景黄色
    4. 在同一PowerShell窗口上运行以下命令以配置代理服务SSL / TLS端口,并使用CRECRYPTION证书:

      $ ipv4_address.=测试连接-computername.$主机名称-数数1|选择对象-  expandperty.IPV4Address$ ipport.=$($ ipv4_address.:443“SSLxml美元="http add sslcert ipport= .$ ipport.Certhash =.$ thumb打印appid = {$ formatted_guid.}“SSLxml美元|netsh.netsh.http.显示sslcert

    正确配置后,来自最后一个命令的输出.NETSH HTTP SHOW SSLCERT表明听者使用的是正确的IP:港口, 然后应用程序ID匹配代理服务应用程序GUID。

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

    笔记:

    如果控制器安装在Windows Server 2016上,并且在Windows Server 2012 R2上安装了StoreFront,则控制器需要配置更改,以更改TLS密码套件的顺序。控制器和储库与Windows Server版本的其他组合不需要此配置更改。

    密码套件订单列表必须包含TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, 要么tls_ecdhe_rsa_with_aes_128_cbc_sha256密码套件(或两者);这些密码套件必须在任何内容之前tls_dhe__密码套房。

    1. 使用Microsoft组策略编辑器,浏览到计算机配置>管理模板>网络> SSL配置设置
    2. 编辑策略“SSL密码套件订单”。默认情况下,此策略设置为“未配置”。将此策略设置为已启用。
    3. 按正确的顺序安排套房;卸下您不想使用的任何Cipher Suites套房。

    确保要么TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, 要么tls_ecdhe_rsa_with_aes_128_cbc_sha256先于任何tls_dhe__密码套房。

    在Microsoft MSDN上,另请参阅优先考虑Schannel Cipher Suites

    更改HTTP或HTTPS端口

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

    要更改控制器使用的默认HTTP或HTTPS端口,请从Studio运行以下命令:

    brokerservice.exe -wiport \ -wisslport \

    在哪里< http端口>是HTTP流量的端口号和是HTTPS流量的端口号。

    笔记:

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

    get-configRegisteredServiceInstance -serviceType代理 - 绑定XML_HTTPS |Utregister-ConfigRegisteredServiceInstance Get-BrokerServiceInstance |其中binding -eq“xml_https”|注册-ciffserviceinstance.

    仅限于HTTPS流量

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

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

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

    VDAS上的设置

    传递组不能具有某些VDA的混合,其中包含TLS和某些没有配置TLS的VDA。在为传递组配置TLS之前,请确保已为该传送组中的所有VDA配置为TLS

    在VDAS上配置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连接。

      DTL 1.0对应于TLS 1.1,DTL 1.2对应于TLS 1.2。

    • 哪个TLS密码套件允许。

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

      VDA支持三套密码套件(也称为合规模式):GOV(ernment),COM(Mercial)和所有。可接受的密码套件还取决于Windows FIPS模式;看http://support.microsoft.com/kb/811833.有关Windows FIPS模式的信息。下表列出了每个集合中的密码套件:

    TLS / DTLS密码套件 所有 com GOV. 所有 com GOV.
    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_ecdhe_rsa_with_aes_128_cbc_sha. X X X X

    * Windows Server 2012 R2不支持。

    笔记:

    VDA不支持DHE Ciphersuites(例如,TL​​S_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256和TLS_DHE_RSA_WITH_AES_128_CBC_SHA。)如果由Windows选择,则可以由接收器使用它们。

    如果您使用的是Citrix网关,请参阅Citrix ADC文档,了解有关用于后端通信的密码套件支持的信息。有关TLS密码套件支持的信息,请参阅Citrix ADC设备可提供密码.有关DTLS密码套件支持的信息,请参阅DTLS密码支持

    使用PowerShell脚本在VDA上配置TLS

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

    笔记:

    从XenApp和XenDesktop 7.16 LTSR开始,PowerShell脚本基于VDA的FQDN找到正确的证书。当VDA FQDN仅存在单个证书时,您无需提供指纹。

    Enable-vdassl.ps1脚本启用或禁用VDA上的TLS侦听器。此脚本可用支持>工具> SSLSupport文件夹在安装介质上。

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

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

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

    其结果是用户只能使用TLS或DTLS进行连接。在没有TLS或DTLS的情况下,他们无法通过WebSocket使用ICA/HDX、带有会话可靠性的ICA/HDX或HDX。

    笔记:

    DTLS不支持ICA/HDX Audio over UDP Real-time Transport或ICA/HDX Framehawk。

    网络港口

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

    重要的:

    指定启用或禁用参数和CertificateThumbPrint参数。其他参数为可选参数。

    句法

    启用-vdassl {-enable |-disable} -certificatethumb intrampring“”[-sslport ] [-slminversion“”] [-slciphersuite“\ ”]

    范围 描述
    使能够 安装并启用VDA上的TLS侦听器。此参数或禁用参数是必需的。
    禁用 在VDA上禁用TLS监听。该参数或“启用”参数都是必需的。如果指定该参数,则其他参数无效。
    CertificateThumpprint“ 证书存储中的TLS证书的指纹,用引号括起来。该脚本使用指定的指纹选择要使用的证书。如果省略此参数,则选择不正确的证书。
    SSLPort <口> TLS端口。默认值:443
    sslminversion“ 最小TLS协议版本,用引号括起来。有效值:“TLS_1.0”(默认),“TLS_1.1”和“TLS_1.2”。
    sslciphersuite“ TLS密码套件,用引号括起来。有效值:“gov”,“com”和“全部”(默认)。

    例子

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

    Enable-VDassl-enable -certificatethumpprint“12345678987654321”

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

    Enable-Vdassl-enable -certificateThumpprint“12345678987654321”-slport 400 -sslminversion“tls_1.2”-slciphersuite“全部”

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

    启用-vdassl -disable

    手动在VDA上配置TLS

    VDA手动配置TLS时,您授予通用的读访问权TLS的私钥证书相应的服务在每一个共识:为VDA Windows NT服务\ PorticaService单一会话操作系统,或为VDA Windows NT服务\ TermService Multi-session操作系统。在安装VDA的机器上:

    步骤1.启动Microsoft管理控制台(MMC):start>运行> mmc.exe。

    步骤2.将证书管理单元添加到MMC:

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

    步骤3.在“Certificates (Local Computer) > Personal > Certificates”下,右键单击证书,然后选择“All Tasks > Manage Private Keys”。

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

    • 对于Windows单会话操作系统的VDA,“Porticaservice”
    • 对于Windows Multi-Session OS的VDA,“SiqueRervice”

    第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.2,3 = TLS 1.1,4 = TLS 1.2。默认值:2(TLS 1.2)。

      SSLCipherSuite DWORD - 1 = GOV, 2 = COM, 3 = ALL。默认值:3(所有)。

    第7步。确保如果它们不是默认值为443,则确保TLS TCP和UDP端口在Windows防火墙中打开。(当您在Windows防火墙中创建入站规则时,确保其属性具有“允许连接”和“已启用”条目.)

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

    第9步。对于VDAs For Windows Multi-session操作系统,请重启机器使修改生效。(对于Windows单会话操作系统,不需要重启包含VDAs的机器。)

    重要的:

    当VDA是在Windows Server 2012 R2、Windows Server 2016或Windows 10周年版或更高版本支持的版本时,需要额外的步骤。这影响了从Citrix Receiver的Windows(版本4.6到4.9),Citrix工作区应用程序的HTML5,和Citrix工作区应用程序的Chrome。这也包括使用Citrix Gateway的连接。

    对于所有VDA版本,如果Citrix网关和VDA之间的TLS,则使用Citrix Gateway的所有连接也需要此步骤。这会影响所有Citrix接收器版本。

    在VDA(Windows Server 2012 R2,Windows Server 2016或Windows 10niversary Edition或更高版本)上,使用组策略编辑器,转到“计算机配置”>“管理”>“管理”>“网络”>“SSL配置设置”>“SSL密码”套件订单。选择以下顺序:

    Tls_ecdhe_rsa_with_aes_256_gcm_sha384_p384 tls_ecdhe_rsa_with_aes_256_cbc_sha384_p384 tls_ecdhe_rsa_with_aes_256_cbc_sha384_p384 tls_ecdhe_rsa_with_aes_256_cbc_sha384_p384 tls_ecdhe_rsa_with_aes_256_cbc_sha384_p384

    笔记:

    前六个项目还指定了椭圆曲线,P384或P256。确保未选择“曲线25519”。FIPS模式不会阻止使用“曲线25519”。

    配置此组策略设置时,VDA仅在两个列表中出现时选择密码套件:组策略列表和所选合规模式(COM,GOV或全部)的列表。密码套件还必须出现在客户端发送的列表中(Citrix Workspace App或StoreFront)。

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

    重要的:

    尽管在应用它们时显示组策略更改,但TLS配置的组策略更改只会在操作系统重新启动后生效。因此,对于池桌面,将TLS配置的组策略更改应用于基础图像。

    在发送组上配置TLS

    为包含VDAS配置为TLS Connections的每个传递组完成此过程。

    1. 从Studio中打开PowerShell控制台。
    2. 跑步Asnp Citrix。*加载Citrix产品cmdlet。
    3. 跑步get-brokeraccesspolicyrule -desktopgroupname'<delivery-group-name>'|set-brokeraccesspolicyrule -hdxsslenabled $ true
    4. 跑步set-brokersite -dnsresolutionEnabled $ true

    故障排除

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

    使用Citrix Workspace应用程序的Windows时,如果收到指示TLS错误,禁用桌面查看器的连接错误,然后再次尝试连接。虽然连接仍然失败可能提供底层TLS问题的说明。例如,您在请求证书颁发机构的证书时指定了一个错误的模板。)

    使用HDX自适应传输的大多数配置与DTL成功工作,包括使用最新版本的Citrix Workspace应用程序,Citrix Gateway和VDA的DTL。在Citrix Workspace应用程序和Citrix网关之间使用DTL的某些配置,并在Citrix Gateway和VDA之间使用DTL,需要额外的操作。

    如果:

    • Citrix Receiver版本支持HDX自适应传输和DTLS:接收器为Windows(4.7, 4.8, 4.9),接收器为Mac(12.5, 12.6, 12.7),接收器为iOS (7.2, 7.3.x)或接收器为Linux (13.7)

    以下任一项也适用:

    • Citrix Gateway版本支持VDA的DTL,但VDA版本不支持DTLS(版本7.15或更早版本),

    • VDA版本支持DTL(版本7.16或更高版本),但Citrix Gateway版本不支持VDA的DTL。

    要避免从Citrix Receiver连接失败,请执行以下操作之一:

    • 更新Citrix Receiver,到Windows 4.10或更高版本的Receiver, Mac 12.8或更高版本的Receiver,或iOS 7.5或更高版本的Receiver;要么,
    • 将Citrix Gateway更新为支持VDA的DTL的版本;要么,
    • 更新VDA,到Version 7.16或更高版本;要么,
    • 禁用VDA的DTL;要么,
    • 禁用HDX自适应传输。

    笔记:

    对于Linux的接收器更新尚未使用。Android(版本3.12.3)的接收器不支持通过Citrix网关的HDX自适应传输和DTL,因此不受影响。

    要在VDA处禁用DTL,请修改VDA防火墙配置以禁用UDP端口443.查看网络港口

    控制器和VDA之间的通信

    Windows通信框架(WCF)消息级保护可以保护控制器和VDA之间的通信。不需要使用TLS的额外运输级别保护。WCF配置使用Kerberos进行控制器和VDA之间的相互认证。加密使用CBC模式中的AES,具有256位键。消息完整性使用SHA-1。

    根据微软,安全协议WCF使用的WS-SecurityPolicy符合OASIS(结构化信息标准推进组织)的标准,包括WS-SecurityPolicy 1.2。此外,微软声明WCF支持1.2安全政策

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

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

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

    默认情况下禁用HTML5视频重定向策略。

    默认情况下启用浏览器内容重定向。

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

传输层安全性(TLS)