技术论文:Networking SSL / TLS 最佳实践

概述

这篇技术论文旨在传达熟练 ADC 的人会将什么配置为通用实现,才能在 Qualys SSL Labs 获得 A+ 等级。

Qualys SSL Labs 可执行一系列强有力的测试,并提供记分卡,您可以用来改进配置。扫描是免费的,只需大约一分钟即可完成。

Qualys 积极开发 SSL Labs。随着新协议的创建和漏洞的发现,测试可能会发生变化。最好定期测试站点,以确保不会暴露任何新漏洞。

注意: 请与您的安全团队讨论您的部署情况。安全专家说,SSL Labs A+ 是一个不错的总体目标,但它可能不符合贵组织的需求。

需要验证的配置项目

  • Certificates(证书)- 整个链是否已提供且值得信赖?签名算法安全吗?
  • Protocols, Keys and Cipher Support(协议、密钥和密码支持)- 支持哪些 SSL 和 TLS 协议版本?哪些密码套件是首选,顺序如何?提供的密码套件是否支持向前保密?
  • TLS Handshake Simulation(TLS 握手模拟)- 确定哪些协议和密码是由多个不同的客户端和浏览器协商的
  • Protocol Details(协议详细信息)- 是否支持安全重新协商?是否支持严格的传输安全性 (HSTS)?
  • Known Vulnerabilities(已知漏洞)- 服务器是否容易受到诸如 POODLE、BEAST 或 TLS 降级之类的攻击?

SSL Labs 完成测试后,它将显示字母等级以及四个类别中每个类别的分数等级:

1 证书
2 协议支持
3 密钥交换
4 密码强度

每个类别都会获得一个数字分数,然后 SSL Labs 将其平均得出总分。SSL Labs 建议不要使用的一些特殊情况和配置(例如启用 SSLv3),可能会限制您的最终成绩。可以在此处找到有关 SSL Labs 如何对服务器进行评分的完整文档。

实施问题

SSL 配置文件

本文使用 SSL 配置文件。首次启用时,SSL 配置文件会将_所有_ SSL 虚拟服务器设置为使用默认配置文件。

SSL 配置文件优先于全局和每个虚拟服务器的 SSL 参数。

客户端支持

本文中的某些配置步骤可能会导致旧客户端和浏览器出现连接问题。例如,Windows 7 和 8.1 上的 Internet Explorer 11 仅支持较旧的密码套件,而其他较旧的浏览器可能完全不支持 TLS1.2 和 ECC 密码。在缺少支持的情况下,客户可能会遇到错误消息并无法显示站点。

SSL Labs 的首页上有一个“Test your browser”(测试您的浏览器)按钮,可帮助确定您的需求。

Citrix Receiver/Workspace 应用程序对网关部署的密码支持

请查看以下有关为虚拟应用程序和桌面部署网关虚拟服务器时客户端密码支持的文章:

注意: 有关特定 ADC 固件所需的内部版本和其他注意事项,请参阅固件说明部分

基本步骤 - GUI

请执行以下步骤以确保在 SSL Labs 测试中获得高分。

  • 确保 ADC 运行的是最新的固件版本 - 建议运行 13.0 Build 71 或更高版本以利用 TLS1.3 硬件加速

  • 确保证书链完整且可信

    • 根 CA 并不总是直接对证书进行签名。相反,根 CA 通常使用中间证书对证书进行签名
    • 在 ADC 上安装中间证书。将其链接到您绑定到虚拟服务器的服务器证书
    • 中间证书由提供服务器证书的供应商提供,通常以“证书包”形式提供。它们通常可以在供应商的公共站点上找到
    • 您可能需要安装和链接多个中间证书。要使服务器证书发挥作用,ADC 必须发送完整的链。完整的链以由客户端的可信根 CA 之一签名的证书结尾
    • 由于客户端已经拥有可信根 CA,因此,您无需将其安装并链接到 ADC 上
    • 要安装中间证书,请转至:流量管理 > SSL > 证书 > CA 证书,然后选择_安装_(注意: Citrix ADC 的早期版本在 GUI 中没有“CA 证书”选项
    • 通过选择证书并从操作菜单中选择_链接_,链接中间证书
    • 如果安装了正确的中间证书,它将自动填充到链接菜单中

CA-Certificate-Install

Certificate-Link

Certificate-Linked

  • 创建提供前向保密 (FS) 的自定义密码组
    • 转到 Traffic Management(流量管理)> SSL > Cipher Groups(密码组),然后选择 Add(添加)
    • 将密码组命名为“SSL_Labs_Cipher_Group_Q4_2021”
    • 单击 Add(添加),然后展开 ALL(全部)部分 - 选择以下密码套件:
      • TLS1.3-AES256-GCM-SHA384
      • TLS1.3-AES128-GCM-SHA256
      • TLS1.3-CHACHA20-POLY1305-SHA256
      • TLS1.2-ECDHE-ECDSA-AES256-GCM-SHA384
      • TLS1.2-ECDHE-ECDSA-AES128-GCM-SHA256
      • TLS1.2-ECDHE-ECDSA-AES256-SHA384
      • TLS1.2-ECDHE-RSA-AES256-GCM-SHA384
    • 单击 > 右箭头将密码从 Available(可用)列移到 Configured(已配置)列
    • 单击创建

Create-Group

  • 启用 SSL 配置文件

导航到 Traffic Management(流量管理)> SSL > Change advanced SSL settings(更改高级 SSL 设置),向下滚动,然后选择 Enable Default Profile(启用默认配置文件)。

Enable_Default_Profile

SSL 配置文件将_所有_ SSL 虚拟服务器设置为在首次启用时使用默认配置文件。删除现有的每虚拟服务器 SSL 设置后,ADC 将提示您进行确认。

Confirm_Default_Profile

  • 创建 SSL 配置文件
    • 导航到 System(系统)> Profiles(配置文件)> SSL Profile(SSL 配置文件),然后选择 Add
      (添加)SSL_Profile - 将配置文件命名为“SSL_Labs_Profile_Q4_2021” - 滚动到 Deny SSL Renegotiation(拒绝 SSL 重新协商)并选择 NONSECURE(不安全)以仅允许支持 RFC 5746 的客户端重新协商 - 滚动到 HSTS,勾选 HSTS,并指定 Max Age(最长生存时间)为 157680000 秒 - 滚动到 Protocol(协议)并仅选择 TLSv12 和 TLSv13 SSL_Profile_Protocols - 滚动到表单的末尾并选择 OK (确定)- 滚动到 SSL Ciphers(SSL 密码),选择铅笔图标进行编辑,然后单击 Remove All (全部删除)- 单击 Add(添加)并添加我们之前创建的密码组 SSL_Profile_Cipher_List - 滚动到表单的末尾并选择 Done(完成)
  • 将 SSL 配置文件绑定到 SSL 虚拟服务器
    • 在选定的虚拟服务器上,选择铅笔图标以编辑绑定 SSL Profile(SSL 配置文件)
    • 从下拉列表中选择我们创建的 SSL 配置文件
    • 单击 OK(确定)

基本步骤 - CLI

请执行以下步骤以确保在 SSL Labs 测试中获得高分。

在下面的 CLI 示例中,SSL 虚拟服务器的名称列为 Ex-vServer,可以将其替换为您的环境中 SSL 虚拟服务器的名称。

  • 创建首选 ECDHE 和 ECDSA 密码套件的自定义密码组
add ssl cipher SSL_Labs_Cipher_Group_Q4_2021

bind ssl cipher SSL_Labs_Cipher_Group_Q4_2021 -cipherName TLS1.3-AES256-GCM-SHA384

bind ssl cipher SSL_Labs_Cipher_Group_Q4_2021 -cipherName TLS1.3-AES128-GCM-SHA256

bind ssl cipher SSL_Labs_Cipher_Group_Q4_2021 -cipherName TLS1.3-CHACHA20-POLY1305-SHA256

bind ssl cipher SSL_Labs_Cipher_Group_Q4_2021 -cipherName TLS1.2-ECDHE-ECDSA-AES256-GCM-SHA384

bind ssl cipher SSL_Labs_Cipher_Group_Q4_2021 -cipherName TLS1.2-ECDHE-ECDSA-AES128-GCM-SHA256

bind ssl cipher SSL_Labs_Cipher_Group_Q4_2021 -cipherName TLS1.2-ECDHE-ECDSA-AES256-SHA384

bind ssl cipher SSL_Labs_Cipher_Group_Q4_2021 -cipherName TLS1.2-ECDHE-RSA-AES256-GCM-SHA384
<!--NeedCopy-->
  • 启用 SSL 配置文件
set ssl parameter -defaultProfile ENABLED
<!--NeedCopy-->
  • 创建 SSL 配置文件
add ssl profile SSL_Labs_Profile_Q4_2021 -tls1 DISABLED -tls11 DISABLED -tls12 ENABLED -tls13 ENABLED -denySSLReneg NONSECURE -HSTS ENABLE
<!--NeedCopy-->
  • 从 SSL 配置文件中取消绑定默认密码组并绑定自定义组
unbind ssl profile SSL_Labs_Profile_Q4_2021 -cipherName DEFAULT

bind ssl profile SSL_Labs_Profile_Q4_2021 -cipherName SSL_Labs_Cipher_Group_Q4_2021
<!--NeedCopy-->
  • 将 SSL 配置文件绑定到 SSL 虚拟服务器
set ssl vserver "Ex-vServer" -sslProfile SSL_Labs_Profile_Q4_2021
<!--NeedCopy-->

更多设置

SHA1 证书

使用 SHA1 签名的证书被认为是弱证书,无法在 SSL Labs 测试中获得较高的分数。如果有任何证书由 SHA1 签名,则应将其替换为 SHA256 证书并安装在 ADC 上。

DNS CAA

DNS 证书颁发机构授权 (CAA) 允许 CA 验证其是否有权为域颁发证书,并在出现问题时提供联系人。

在 SSL Labs,A+ 不需要 DNS CAA,这是一个可选步骤。您可以在此处了解有关 DNS CAA 的更多信息。

旧客户端支持

我们在本指南中使用的 ECDHE 密码取代了较旧的较慢的 DHE 密码。如果您有无法升级的旧客户端,则可能别无选择,只能启用 DHE。

在 GUI 中启用 DHE 密码套件

  • 转到 Traffic Management(流量管理)> SSL,然后选择 Create Diffie-Hellman (DH) key(创建 Diffie-Hellman (DH) 密钥)

Create_DH_Key_config

  • 将 Diffie-Hellman 密钥命名为“DH_Key_Name_Here.key”

  • 输入参数大小(位)。必须介于 512 到 2048 之间

  • 选择 Diffie-Hellman 生成器(2 或 5)

  • 选择 Create(创建)。根据所选的密钥大小,这可能需要相当长的时间才能完成

注意: 在此屏幕完成之前,请勿进行浏览

Create_DH_Key_config

  • 导航到 System(系统)> Profiles(配置文件)> SSL Profile(SSL 配置文件)

  • 选择 SSL_Labs_Profile_Q4_2021 配置文件,然后选择 Edit(编辑)

  • 选择铅笔图标

  • 向下滚动到 Enable DH Param(启用 DH 参数)复选框并将其选中

  • 选择您刚刚创建的 DH 密钥

Enable_DH_Param_and_Key

  • 向下滚动并选择 Okay(确定)

  • 将 DHE 密码套件绑定到我们之前创建的密码组

  • 导航到 Traffic Management(流量管理)> SSL > Cipher Groups(密码组)

  • 选择 TLS1.2-DHE-RSA-AES256-GCM-SHA384 密码

Bind_DHE_Cipher

  • 单击箭头将其添加到密码组

Select_DHE_Cipher_Added

在 CLI 中启用 DHE 密码套件

  • 创建 DH 密钥并将其绑定到 SSL 配置文件 (CLI)
create ssl dhparam DH_Key_Name_Here.key 2048 -gen 2

set ssl profile SSL_Labs_Profile_Q4_2021 -dh ENABLED -dhFile DH_Key_Name_Here.key
<!--NeedCopy-->
  • 将 DHE 密码套件绑定到我们之前创建的密码组
bind ssl cipher SSL_Labs_Cipher_Group_Q4_2021 -cipherName TLS1.2-DHE-RSA-AES256-GCM-SHA384
<!--NeedCopy-->

固件注意事项

  • Citrix 在固件版本 10.5 Build 57 中默认启用 TLS1.2

  • 机器人漏洞已在版本 12.0 Build 53、11.1 Build 56、11.0 Build 71 和 10.5 Build 67 中得到解决 - 更多详细信息,请单击此处

  • HSTS(严格的传输安全性)标志在 12.0 Build 35 中提供 - 之前的版本需要重写策略才能插入 HSTS 标头。您不能同时使用两者作为 ADC 来插入 2 个标头,这是不允许的。

  • 10.5 Build 57 中,对 TLS1.2 的支持已添加到 VPX 设备中。它在早期版本中可用于配备了专用 SSL 硬件的设备

  • 12.1 Build 49.23 中添加了对 TLS1.3 的支持 - 它必须在 vServer\SSLProfile 中启用,并且必须绑定 TLS1.3 密码(列出的)

  • 12.0 Build 57 中,已向 VPX 设备中添加了 ECC 证书支持。它在早期版本中可用于配备了专用 SSL 硬件的设备

  • Zombie POODLE 漏洞已在版本 12.1 Build 50.31、12.0 Build 60.9、11.1 Build 60.14、11.0 Build 72.17 和 10.5 Build 69.5 中得到解决。此漏洞仅影响配备了 Nitrox SSL 硬件的 MPX\SDX 设备。配备 Coleto Creek 的 MPX\SDX 设备不易受到攻击。禁用基于 CBC 的密码套件也可以缓解此漏洞。有关详细信息,请参阅 CTX 文章

  • 密码列表已修改以解决 CBC 的漏洞,因而删除了 0xc028 和 0x39 密码

  • Citrix 在 13.0 Build 71 中添加了 TLS1.3 硬件加速

技术论文:Networking SSL / TLS 最佳实践