ADC

配置对 HTTP 严格传输安全性 (HSTS) 的支持

HTTP 严格传输安全 (HSTS) 有助于保护网站免受各种攻击,例如 SSL 剥离、Cookie 劫持和协议降级。使用 HSTS,服务器可以在与客户端的所有通信中强制使用 HTTPS 连接。也就是说,只能使用 HTTPS 访问该站点。

NetScaler 设备支持 HSTS 作为 SSL 配置文件和 SSL 虚拟服务器中的内置选项。必须支持 HSTS 才能获得 SSL Labs 的 A+ 认证。

在 SSL 前端配置文件或 SSL 虚拟服务器上启用 HSTS。如果启用 SSL 配置文件,则必须在 SSL 配置文件上启用 HSTS,而不是在 SSL 虚拟服务器上启用。

指定浏览器不得接受未加密连接的时间(以秒为单位)。使用 maxage 参数指定 HSTS 在该持续时间内对该客户端生效。默认情况下,HSTS 标头仅适用于根域。您可以指定是否必须包含子域名。例如,您可以通过将 IncludeSubdomains 参数设置为 YES 来指定 www.example.com 的子域名,例如 www.abc.example.com 和 www.xyx.example.com,只能使用 HTTPS 进行访问。子域名必须支持 HTTPS。但是,它们并不需要分别启用 HSTS。

如果访问任何支持 HSTS 的 Web 站点,来自服务器的响应标头将包含类似于以下内容的条目:

HSTS 响应标头

客户端在 max-age 参数中指定的时间内存储此信息。对于对该 Web 站点的后续请求,客户端会检查其内存中是否有 HSTS 条目。如果找到条目,则只能使用 HTTPS 访问该 Web 站点。例如,如果您将 maxage 参数设置为 31536000,则浏览器会记得在一年内仅使用 HTTPS 访问该域。

可以在创建 SSL 配置文件或 SSL 虚拟服务器时使用 add 命令配置 HSTS。还可以在现有 SSL 配置文件或 SSL 虚拟服务器上配置 HSTS,方法是使用 set 命令对其进行修改。

使用 CLI 配置 HSTS

在命令提示符下,键入:

add ssl vserver <vServerName> -maxage <positive_integer> -IncludeSubdomains ( YES | NO)
set ssl vserver <vServerName> -HSTS ( ENABLED | DISABLED )
<!--NeedCopy-->

add ssl profile <name> -maxage <positive_integer> -IncludeSubdomains ( YES | NO )
set ssl profile <name> -HSTS ( ENABLED | DISABLED )

Arguments

HSTS

         State of HTTP Strict Transport Security (HSTS) on an SSL virtual server or SSL profile. Using HSTS, a server can enforce the use of an HTTPS connection for all communication with a client.

          Possible values: ENABLED, DISABLED

          Default: DISABLED

maxage

          Set the maximum time, in seconds, in the strict transport security (STS) header during which the client must send only HTTPS requests to the server.

          Default: 0

          Minimum: 0

          Maximum: 4294967294

IncludeSubdomains

         Enable HSTS for subdomains. If set to Yes, a client must send only HTTPS requests for subdomains.

          Possible values: YES, NO

          Default: NO
<!--NeedCopy-->

在以下示例中,客户端只能使用 HTTPS 访问 Web 站点及其子域名 157680000 秒。

add ssl vserver VS-SSL –maxage 157680000 –IncludeSubdomain YES
set ssl vserver VS-SSL –HSTS ENABLED
<!--NeedCopy-->
add sslProfile hstsprofile –maxage 157680000 –IncludeSubdomain YES
set sslProfile hstsprofile –HSTS ENABLED
<!--NeedCopy-->

使用 GUI 配置 HSTS

  1. 导航到流量管理 > 负载平衡 > 虚拟服务器
  2. 选择 SSL 类型的虚拟服务器,然后单击 编辑

如果设备上启用了默认 SSL 配置文件,请执行以下步骤。

  1. 选择一个 SSL 配置文件,然后单击编辑

  2. 基本设置中,单击铅笔图标以编辑设置。向下滚动并选择 HSTS包括子域

    启用 HSTS

如果设备上未启用默认 SSL 配置文件,请执行以下步骤。

  1. 高级设置中,选择 SSL 参数

  2. 选择 HSTS包括子域

    在虚拟服务器上启用 HSTS

支持 HSTS 预加载

HSTS 标头通过防止浏览器与域建立未加密的连接来保护 Web 应用程序。但是,如果用户是第一次访问该网站,则浏览器尚未看到 HSTS 标头。在 Web 服务器告诉浏览器使用 HTTPS 之前,攻击者可能会接管连接。

为了解决这个问题,NetScaler 设备支持在 HTTP 响应标头中添加 HSTS 预加载。要包含预加载,必须将 SSL 虚拟服务器或 SSL 配置文件中的 preload 参数设置为 YES。然后,设备将预加载包含在客户端的 HTTP 响应标头中。可以使用 CLI 和 GUI 配置此功能。有关 HSTS 预加载的详细信息,请参阅 https://hstspreload.org/

下面是带有预加载的有效 HSTS 标头的示例:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
<!--NeedCopy-->
Strict-Transport-Security: max-age=63072000; preload
<!--NeedCopy-->

使用 CLI 配置 HSTS 预加载

在命令提示符下,键入:

add ssl vserver <vServerName> -maxage <positive_integer> -preload ( YES | NO )
set ssl vserver <vServerName> -HSTS ( ENABLED | DISABLED )
<!--NeedCopy-->

add ssl profile <name> -maxage <positive_integer> -IncludeSubdomains ( YES | NO ) -preload ( YES | NO )
set ssl profile <name> -HSTS ( ENABLED | DISABLED )
<!--NeedCopy-->

使用 GUI 配置 HSTS 预加载

如果设备上启用了默认 SSL 配置文件,请执行以下步骤。

  1. 导航到“系统”>“配置文件”>“SSL 配置文件”。选择一个 SSL 配置文件,然后单击编辑

  2. 基本设置中,单击铅笔图标以编辑设置。向下滚动并选择 HSTS预加载

    启用 HSTS

如果设备上未启用默认 SSL 配置文件,请执行以下步骤。

  1. 导航到流量管理 > 负载平衡 > 虚拟服务器
  2. 选择 SSL 类型的虚拟服务器,然后单击 编辑

  3. 高级设置中,选择 SSL 参数

  4. 选择 HSTS预加载

    在虚拟服务器上启用 HSTS

用例

User1 希望使用网络浏览器安全地访问某些网站。exemple.com网站为其客户提供安全的浏览体验。

User1 在 exple.com 上有一个帐户,经常使用这个网站进行交易。User1 需要向朋友转账,然后通过在网络浏览器中输入 www.exeple.com 来访问 exple.com。 浏览器将 URL 转换为 http://www.exemple.com。浏览器检测到 exceple.com 这个名字并与 DNS 服务器通信以获取主机服务器的 IP 地址。 浏览器使用端口 80 联系 IP 地址。银行网站将请求重定向到 https://www.exemple.com。执行 SSL 握手会建立 SSL 连接。 URL 中的挂锁变为绿色并显示已锁定。 User1 现在可以输入凭据进行交易。

问题场景

即使网站开启了 HTTPS,客户端仍可能尝试通过 HTTP 进行连接。网站可以将请求重定向到 HTTPS,但是这种重定向是不安全的,因为攻击者可以捕获用户信息或将用户重定向到虚假网站。例如, 中间人可以拦截 exple.com 的解析请求,并将 User1 自己的服务器 IP 地址发送给 User1。当在端口 80 上向此 IP 地址发出请求时,中间人可以将 User1 重定向到端口 443 上的类似命名网站,例如 https://www.example.com (注意拼写略有变化)。User1 可能没有注意到差异(example.com 而不是 example.com),然后输入了凭据。

解决方案

在 NetScaler 设备上执行以下步骤,以保护您的网站免受攻击。在 CLI 提示符处,键入:

add ssl profile sample-profile -maxage 63072000 -IncludeSubdomains YES -preload YES
set ssl profile sample-profile -HSTS ENABLED
<!--NeedCopy-->

由于 HSTS 已启用,因此设备在对客户端的 HTTP 响应中包含预加载。此外,HSTS 在规定的期限内生效,子域名也包括在内。因此,只接受来自客户端的 HTTPS 连接。

配置对 HTTP 严格传输安全性 (HSTS) 的支持