SSL 配置文件基础结构

SSLv3 和 RC4 实施中的漏洞强调需要使用最新的密码和协议来协商网络连接的安全设置。对配置实施任何更改(例如在数千个 SSL 端点禁用 SSLv3)是一个繁琐的过程。因此,作为 SSL 端点配置一部分的设置已被移动到 SSL 配置文件以及默认密码。要在配置中实现更改(包括密码支持),您只需修改绑定到实体的配置文件。

除了旧配置文件的设置之外,默认 SSL 配置文件(默认前端和默认后端)还包含所有默认密码和 ECC 曲线。附录中提供了默认配置文件的示例输出。“启用默认配置文件”操作会自动将默认前端配置文件绑定到所有前端实体,并将默认后端配置文件绑定到所有后端实体。您可以修改默认配置文件以适应您的部署。您还可以创建自定义配置文件并将其绑定到 SSL 实体。

重要:

升级后,如果启用默认配置文件,则无法撤消更改。也就是说,无法禁用配置文件。在启用配置文件之前,保存配置并创建配置文件 (ns.conf) 的副本。但是,如果您不想使用默认配置文件中的功能,则可以继续使用旧的 SSL 配置文件。有关这些配置文件的更多信息,请参阅旧版 SSL 配置文件

从 11.1 51.x 版本中,在 GUI 和 CLI 中,当您启用默认配置文件时会添加确认提示,以避免错误启用该配置文件。

命令:

set ssl parameter -defaultProfile ENABLED
    Save your configuration before enabling the Default profile. You cannot undo the changes. Are you sure you want to enable the Default profile? [Y/N]Y
Done

默认情况下,某些 SSL 参数(称为 全局参数)应用于所有 SSL 端点。但是,如果配置文件绑定到 SSL 端点,则全局参数不适用。配置文件中指定的设置改为适用。

注意事项

  1. 一个配置文件可以绑定到多个虚拟服务器,但一个虚拟服务器只能绑定一个配置文件。
  2. 若要删除绑定到虚拟服务器的配置文件,请先取消绑定该配置文件。
  3. 密码或密码组可以以不同的优先级绑定到多个配置文件。
  4. 一个配置文件可以有多个密码和密码组绑定在不同的优先级。
  5. 对密码组的更改将立即反映在所有配置文件以及其中一个配置文件绑定到的所有虚拟服务器中。
  6. 如果密码套件是密码组的一部分,请在从配置文件中删除密码套件之前编辑密码组以删除该密码套件。
  7. 如果您没有为附加到配置文件的密码套件或密码组分配优先级,则会为其分配配置文件中的最低优先级。
  8. 您可以从现有密码组和密码套件创建自定义密码组(也称为用户定义的密码组)。如果您创建密码组 A 并向其添加现有密码组 X 和 Y,则按照该顺序,Y 的优先级将低于 X。也就是说,首先添加的组具有更高的优先级。
  9. 如果密码套件是附加到同一个配置文件的两个密码组的一部分,则密码套件不会再作为第二个密码组的一部分添加。处理流量时,优先级较高的密码套件将生效。
  10. 密码组不会在配置文件中展开。因此,配置文件 (ns.conf) 中的行数大大减少。例如,如果两个包含 15 个密码的密码组绑定到一千个 SSL 虚拟服务器,扩展将在配置文件中添加 30*1000 个密码相关的条目。对于新配置文件,它将只有两个条目:绑定到配置文件的每个密码组一个条目。
  11. 从现有密码和密码组创建用户定义的密码组是一种复制粘贴操作。原始组中的任何更改都不会反映在新组中。
  12. 用户定义的密码组列出了它所属的所有配置文件。
  13. 配置文件列出了绑定到的所有 SSL 虚拟服务器、服务和服务组。
  14. 如果启用默认 SSL 配置文件功能,请使用配置文件设置或更改虚拟服务器、服务、服务组或内部服务的任何属性。

使用 CLI 保存配置

在命令提示窗口中,键入:

save config

shell

root@ns# cd /nsconfig

root@ns# cp ns.conf ns.conf.NS<currentreleasenumber><currentbuildnumber>

示例:

save config
shell
root@ns# cd /nsconfig
root@ns# cp ns.conf ns.conf.NS.11.0.jun.16

启用默认配置文件

重要:

在升级软件之前保存配置并启用默认配置文件。

从版本 11.1 版本 51.x 中的 GUI 和 CLI 中,当您启用默认配置文件时,将显示确认提示,以避免错误启用它。

命令: 以下命令启用默认配置文件,并将此配置文件绑定到配置文件已绑定到的 SSL 实体。也就是说,如果配置文件(例如 P1)已绑定到 SSL 实体,P1 将被默认前端配置文件或默认后端配置文件替换。不会删除旧的配置文件 (P1)。它现在是一个增强型 SSL 配置文件,并包含较早的设置,以及密码和 ECC 曲线。如果您不需要默认配置文件,则可以显式地将 P1 绑定到 SSL 实体。

set ssl parameter -defaultProfile ENABLED
    Save your configuration before enabling the Default profile. You cannot undo the changes. Are you sure you want to enable the Default profile? [Y/N]Y
Done

将软件升级到支持增强型配置文件基础结构的构建,然后启用默认配置文件。

注意:

  • 如果早期配置文件 (P1) 已绑定到 SSL 实体,并且您启用了默认配置文件,则默认配置文件将覆盖早期的绑定。也就是说,默认配置文件绑定到 SSL 实体。如果您不希望绑定默认配置文件,则必须再次将 P1 绑定到 SSL 实体。

  • 单个操作(启用默认配置文件或set ssl parameter -defaultProfile ENABLED)启用(绑定)默认前端配置文件和默认后端配置文件。

用例

启用默认配置文件后,它们将绑定到所有 SSL 端点。默认配置文件是可编辑的。如果您的部署使用了大多数默认设置并且仅更改了少数参数,则可以编辑默认配置文件。这些更改会立即反映在所有终点上。您还可以使用一些自定义参数和一些默认参数创建自定义 SSL 配置文件,并将其绑定到 SSL 实体。

下面的流程图说明了您必须执行的步骤:

SSL 配置文件用例 1

  1. 有关升级软件的信息,请参阅升级系统软件

  2. 使用 CLI 或 GUI 启用默认配置文件。

  • 在命令行中,键入:set ssl parameter -defaultProfile ENABLED
  • 如果您希望使用 GUI,请导航至 流量管理 > SSL > 更改高级 SSL设置 ,向下滚动,然后选择 启用默认配置文件

如果在升级之前配置文件未绑定到终点,则默认配置文件将绑定到 SSL 终点。如果某个配置文件在升级之前绑定到终点,则该配置文件将在升级之后绑定,并将默认密码添加到配置文件中。

  1. (可选)手动更改默认配置文件中的任何设置。
  • 在命令行中,键入:set ssl profile <name> 后跟要修改的参数。
  • 如果您希望使用 GUI,请导航到“系统”>“配置文件”。在 SSL 配置文件中,选择一个配置文件,然后单击 编辑

SSL 配置文件参数

您可以在 SSL 配置文件中设置以下 SSL 参数。您可以在 SSL 虚拟服务器中设置其中一些参数。有关 SSL 虚拟服务器参数的更多信息,请参阅SSL 虚拟服务器参数

使用 CLI 设置设置 SSL 配置文件参数

在命令提示窗口中,键入:

 set ssl profile <name> [-ssllogProfile <string>] [-dh ( ENABLED |
       DISABLED ) -dhFile <string>] [-dhCount <positive_integer>]
       [-dhKeyExpSizeLimit ( ENABLED | DISABLED )] [-eRSA ( ENABLED | DISABLED
       ) [-eRSACount <positive_integer>]] [-sessReuse ( ENABLED | DISABLED )
       [-sessTimeout <positive_integer>]] [-cipherRedirect ( ENABLED |
       DISABLED ) [-cipherURL <URL>]] [-clientAuth ( ENABLED | DISABLED )
       [-clientCert ( Mandatory | Optional )]] [-sslRedirect ( ENABLED |
       DISABLED )] [-redirectPortRewrite ( ENABLED | DISABLED )] [-ssl3 (
       ENABLED | DISABLED )] [-tls1 ( ENABLED | DISABLED )] [-tls11 ( ENABLED
       | DISABLED )] [-tls12 ( ENABLED | DISABLED )] [-tls13 ( ENABLED |
       DISABLED )] [-SNIEnable ( ENABLED | DISABLED )] [-ocspStapling (
       ENABLED | DISABLED )] [-serverAuth ( ENABLED | DISABLED )] [-commonName
       <string>] [-pushEncTrigger <pushEncTrigger>] [-sendCloseNotify ( YES |
       NO )] [-clearTextPort <port|*>] [-insertionEncoding ( Unicode | UTF-8
       )] [-denySSLReneg <denySSLReneg>] [-quantumSize <quantumSize>]
       [-strictCAChecks ( YES | NO )] [-encryptTriggerPktCount
       <positive_integer>] [-pushFlag <positive_integer>]
       [-dropReqWithNoHostHeader ( YES | NO )] [-pushEncTriggerTimeout
       <positive_integer>] [-sslTriggerTimeout <positive_integer>]
       [-clientAuthUseBoundCAChain ( ENABLED | DISABLED )] [-sslInterception (
       ENABLED | DISABLED )] [-ssliReneg ( ENABLED | DISABLED )]
       [-ssliOCSPCheck ( ENABLED | DISABLED )] [-ssliMaxSessPerServer
       <positive_integer>] [-HSTS ( ENABLED | DISABLED )] [-maxage
       <positive_integer>] [-IncludeSubdomains ( YES | NO )] [-sessionTicket (
       ENABLED | DISABLED )] [-sessionTicketLifeTime <positive_integer>]
       [-sessionTicketKeyRefresh ( ENABLED | DISABLED )]
       {-sessionTicketKeyData } [-sessionKeyLifeTime <positive_integer>]
       [-prevSessionKeyLifeTime <positive_integer>] [-cipherName <string>
       -cipherPriority <positive_integer>] [-strictSigDigestCheck ( ENABLED |
       DISABLED )] [-skipClientCertPolicyCheck ( ENABLED | DISABLED )]
       [-zeroRttEarlyData ( ENABLED | DISABLED )]
       [-tls13SessionTicketsPerAuthContext <positive_integer>]
       [-dheKeyExchangeWithPsk ( YES | NO )]

TLS 会话票证扩展

SSL 握手是 CPU 密集型操作。如果启用了会话重用,则会跳过现有客户端的服务器/客户端密钥交换操作。允许他们继续开会。此操作可以缩短响应时间,并增加服务器可以支持的每秒 SSL 事务数。但是,服务器必须存储每个会话状态的详细信息,这会消耗内存,并且如果请求在服务器之间进行负载均衡,则很难在多个服务器之间共享。

Citrix ADC 设备支持 SessionTicket TLS 扩展。使用此扩展表明会话详细信息存储在客户端而不是服务器上。客户端必须通过在客户端 Hello 消息中包含会话票证 TLS 扩展来表明它支持此机制。对于新客户端,此扩展名为空。服务器在 NewSessionTicket 握手消息中发送一个新的会话票证。会话票证是通过使用仅服务器知道的密钥对加密的。如果服务器现在无法发出新票证,它将完成常规握手。

此功能仅在前端 SSL 配置文件中可用,并且仅在设备充当服务器并生成会话票证的通信前端可用。

限制

  • FIPS 平台不支持此功能。
  • 此功能仅支持 TLS 版本 1.1 和 1.2 版本。
  • 会话票证不支持 SSL 会话 ID 持久性。

使用 CLI 启用 TLS 会话票证扩展

在命令提示窗口中,键入:

set ssl profile <name> -sessionTicket (ENABLED | DISABLED ) [-sessionTicketLifeTime <positive_integer>

参数:

sessionTicket: TLS 会话票证扩展状态。使用此扩展表明会话详细信息存储在客户端而不是服务器上,如 RFC 5077 中所定义。

可能的值:ENABLED, DISABLED

默认值: DISABLED

sessionTicketLifeTime:指定一个时间(以秒为单位),在此时间之后,会话工单过期并必须启动新的 SSL 握手。

默认值:300

最小值:0

最大值:172800

示例:

add ssl profile profile1 -sessionTicket ENABLED -sessionTicketlifeTime 300
Done

通过使用 GUI 启用 TLS 会话票证扩展

  1. 导航到“系统”>“配置文件”。选择 SSL 配置文件
  2. 单击“添加”并为配置文件指定名称。
  3. 选择 会话工单
  4. 或者,指定 会话票证生命周期 (秒)

会话票证的安全实施

通过使用 TLS 会话票证,客户端可以使用缩写的握手来更快地重新连接到服务器。但是,如果会话票证长时间未加密或更改,它们可能会带来安全风险。您可以通过使用对称密钥对会话票证进行加密来保护它们。要实现向前保密,您可以指定刷新会话工单密钥的时间间隔。

默认情况下,设备会生成会话票证密钥。但是,如果部署中的多台设备需要解密彼此的会话票证,则它们必须使用相同的会话票证密钥。因此,必须在所有设备上手动设置(添加或加载)相同的会话票证密钥数据。会话工单密钥数据包括以下信息:

  • 会话票据名称。
  • 用于加密或解密 TT 的会话 AES 密钥。
  • 用于计算工单摘要的会话 HMAC 密钥。

您现在可以根据 RFC 5077 中的建议配置长度为 64 字节的会话票证密钥数据以支持 256 位 HMAC 密钥。还支持 48 字节的密钥长度以实现向后兼容。

注意:

手动键入会话票证密钥数据时,请确保 HA 设置或群集设置中所有 Citrix ADC 设备的配置相同。

sessionTicketKeyLifeTime 参数指定刷新会话票证密钥的频率。您可以设置prevSessionTicketKeyLifeTime 参数以指定在生成新密钥后使用该密钥解密工单时使用先前的会话工单密钥维护多长时间。该prevSessionTicketKeyLifeTime 设置延长了客户端可以使用缩写握手重新连接的时间。例如,如果设置sessionTicketKeyLifeTime 为 10 分钟,设置prevSessionTicketKeyLifeTime 为 5 分钟,则会在 10 分钟后生成一个新密钥,并将其用于所有新会话。但是,以前连接的客户端还有 5 分钟的时间,以前签发的票据可以用于缩写握手。

使用 CLI 配置 SSL 会话票证数据

在命令提示窗口中,键入:

set ssl profile <name> -sessionTicket ENABLED -sessionTicketLifeTime <positive_integer> -sessionTicketKeyRefresh ( ENABLED | DISABLED )] -sessionTicketKeyLifeTime <positive_integer> [-prevSessionTicketKeyLifeTime <positive_integer>]

参数:

sessionTicket:使用 RFC 5077 所述的会话票证。建立初始握手需要 CPU 密集型公钥加密操作。使用“ENABLED 用”设置,服务器会向客户端发出会话票证,客户端可以使用该票证执行缩写握手。

可能的值:已启用,已禁用。默认值:DISABLED

sessionTicketLifeTime:会话票据的生命周期(以秒为单位)。在此时间过期后,客户端无法使用此 TT 恢复其会话。

最大值:172800。最小值:0。默认值:300。

sessionTicketKeyRefresh:当会话票证密钥生命周期参数指定的时间过期时,重新生成用于加密或解密会话票证的会话票证密钥。如果启用了 sessionTicket,则自动启用。如果管理员输入会话票证数据,则禁用。

可能的值:已启用,已禁用。默认值:ENABLED

sessionKeyLifeTime:用于加密 Citrix ADC 设备发出的会话票证的对称密钥的生命周期(以秒为单位)。

最大值:86400。最低值:600。默认值:3000

prevSessionKeyLifeTime:在会话票证密钥生命周期过期后,用于加密会话票证的上一个对称密钥对现有客户端仍然有效的时间(以秒为单位)。在此时间内,现有客户端可以使用之前的会话工单密钥恢复其会话。使用新密钥对新客户端的会话票证进行加密。

最大值:172800。最小值:0。默认值:0

示例:

set ssl profile ns_default_ssl_profile_frontend -sessionTicket ENABLED -sessionTicketlifeTime 120 -sessionTicketKeyRefresh ENABLED -sessionTicketKeyLifeTime 100 -prevSessionTicketKeyLifeTime 60

Done

show ssl profile ns_default_ssl_profile_frontend

    Session Ticket: ENABLED
    Session Ticket Lifetime: 120 (secs)
    Session Key Auto Refresh: ENABLED
    Session Key Lifetime: 100 (secs)
    Previous Session Key Lifetime: 60 (secs)

使用 GUI 配置 SSL 会话票证数据

  1. 导航到“系统”>“配置文件”,然后选择“SSL 配置文件”。

  2. 选择 ns_default_ssl_profile_frontend 并单击 编辑

  3. 在“基本设置”部分,单击铅笔图标并设置以下参数:

    • 会话票据
    • 会话票据生命周期(秒)
    • 会话票证密钥自动刷新
    • 会话票证密钥生命周期(秒)
    • 上次会话票证密钥生命周期 (秒)
  4. 单击确定

使用 CLI 手动键入 SSL 会话票证数据

在命令提示窗口中,键入:

set ssl profile <name> -sessionTicket ENABLED

set ssl profile <name> -sessionTicketKeyData

show ssl profile ns_default_ssl_profile_frontend

参数:

sessionTicket:使用 RFC 5077 所述的会话票证。建立初始握手需要 CPU 密集型公钥加密操作。使用“ENABLED 用”设置,服务器会向客户端发出会话票证,客户端可以使用该票证执行缩写握手。

可能的值:已启用,已禁用。默认值:DISABLED

sessionTicketKeyData:包含会话票证名称(0—15 字节)、用于加密或解密会话票证的会话 AES 密钥(16—31 字节)以及用于计算票证摘要的会话 HMAC 密钥(32—63 字节)。由管理员在外部生成并添加到 Citrix ADC 设备。

最大长度:64 字节

示例:

set ssl profile ns_default_ssl_profile_frontend -sessionticket ENABLED

Done

set ssl profile ns_default_ssl_profile_frontend -sessionticketkey 111111111111111111111111111111111111111111111111

Done

show ssl profile ns_default_ssl_profile_frontend

    1) Name: ns_default_ssl_profile_frontend (Front-End)
    SSLv3: ENABLED TLSv1.0: ENABLED TLSv1.1: ENABLED TLSv1.2: ENABLED
    Client Auth: DISABLED
    Use only bound CA certificates: DISABLED
    Strict CA checks: NO
    Session Reuse: ENABLED Timeout: 120 seconds
    DH: DISABLED
    DH Private-Key Exponent Size Limit: DISABLED Ephemeral RSA: ENABLED Refresh Count: 0
    Deny SSL Renegotiation ALL
    Non FIPS Ciphers: DISABLED
    Cipher Redirect: DISABLED
    SSL Redirect: DISABLED
    Send Close-Notify: YES
    Push Encryption Trigger: Always
    PUSH encryption trigger timeout: 1 ms
    SNI: DISABLED
    OCSP Stapling: DISABLED
    Strict Host Header check for SNI enabled SSL sessions: NO
    Push flag: 0x0 (Auto)
    SSL quantum size: 8 kB
    Encryption trigger timeout 100 mS
    Encryption trigger packet count: 45
    Subject/Issuer Name Insertion Format: Unicode
    Session Ticket: ENABLED
    Session Ticket Lifetime: 300 (secs)
    Session Key Auto Refresh: DISABLED
    Session Key Lifetime: 3000 (secs)
    Previous Session Key Lifetime: 0 (secs)
    Session Key Data: 84dad1afc6d56b0deeb0a7fd7f299a207e8d8c15cdd087a5684a11a329fd732e87a0535d90883
    47e8c181ba266f5c8838ae472cb3ab9255b683bf922fad32cee816c329989ef7cdeb278e93ac37882e3

    ECC Curve: P_256, P_384, P_224, P_521

    1) Cipher Name: DEFAULT Priority :4
    Description: Predefined Cipher Alias

    1) Internal Service Name (Front-End): nsrnatsip-127.0.0.1-5061
    2) Internal Service Name (Front-End): nskrpcs-127.0.0.1-3009
    3) Internal Service Name (Front-End): nshttps-::1l-443
    4) Internal Service Name (Front-End): nsrpcs-::1l-3008
    5) Internal Service Name (Front-End): nshttps-127.0.0.1-443
    6) Internal Service Name (Front-End): nsrpcs-127.0.0.1-3008
    7) Vserver Name: v1

Done

使用 GUI 手动键入 SSL 会话票证数据

  1. 导航到“系统”>“配置文件”,然后选择“SSL 配置文件”。

  2. 选择 ns_default_ssl_profile_frontend 并单击 编辑

  3. 在“基本设置”部分,单击铅笔图标并设置以下参数:

    • 会话票据
    • 会话票据关键数据
    • 确认会话票据关键数据
  4. 单击确定

加载旧配置

启用默认配置文件是不可逆的。但是,如果您决定部署不需要默认配置文件,则可以加载在启用默认配置文件之前保存的旧配置。重新启动设备后,这些更改将生效。

使用 CLI 加载旧配置

在命令提示窗口中,键入:

shell

root@ns# clear config

root@ns# cd /nsconfig

root@ns# cp ns.conf.NS.11.0.jun.16 ns.conf

root@ns# reboot