网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

HTTP严格传输安全策略(HSTS)

更新时间:2026年03月27日   作者:spoto   标签(Tag):

为了提升网站的安全性,HTTP Strict Transport Security(HSTS)要求网站必须采用HTTPS作为标准传输协议。随着互联网的发展,各种复杂的攻击手段也日益增多,因此需要更加有效的安全策略来应对这些威胁。网络应用程序的一个重要缺陷在于:它们缺乏加密的HTTP连接,这就为中间人攻击和协议降级等攻击手段提供了机会。

通过不安全的HTTP链接访问网站时,用户可能会面临各种风险,比如会话被窃取以及cookie数据被未经授权的第三方获取。采用HSTS措施可以保护用户的数据免受恶意程序的侵害。

HSTS能够优化性能,因为它减少了需要执行HTTP到HTTPS重定向的操作次数,从而提升了用户体验。通过采用HSTS,网站所有者和发展人员可以采取措施来保护他们的平台,从而获得用户的信任。

我们将要讨论的议题如下:

目录

  • 语法
  • 预加载严格传输安全策略
  • 浏览器是如何处理这一情况的呢?
  • 示例/例子
  • 使用 Nginx 和 Apache 进行实现
    • Nginx实现方式
    • Apache实现方式
  • 测试您的HSTS实现情况
    • 它是如何工作的?
  • 结论

语法

HTTP响应头会将HSTS策略从服务器传递给浏览器。根据浏览器的要求,此后对该网站的所有请求都必须使用HTTPS协议,且这一要求需要持续指定的时间段内保持不变。最大有效期指令。HSTS头部的完整语法如下:lua):

Strict-Transport-Security:max-age=<过期时间>;includeSubDomains;preload
  • 最大有效期:max-age根据此指令,HSTS策略将在浏览器中持续生效,持续的时间为指定的秒数。最大有效期:31536000秒该协议的承诺是,该期限将持续一年。如果这一期限到期,那么浏览器将不再需要使用HTTPS协议,除非它再次收到HSTS头部信息。
  • 包含子域名(可选):在应用了该指令之后,HSTS策略会保护所有子域名以及主域名。如果没有该指令,那么HSTS规则只会适用于主域名。启用此选项后,就能有效保障使用HTTPS的子域名的安全性。
  • 预加载(可选):该指令反映了该网站加入浏览器预加载列表的意愿。当网站首次在Chrome和Safari等浏览器中加载时,无论用户的先前经验如何,都会为所有用户启用HTTPS功能。为了进入预加载列表,这些网站必须符合特定的标准,并将自己的域名添加到由浏览器公司管理的共享列表中。

所有的HTTPS响应都需要携带HSTS头信息,这样才能确保HSTS策略的持续时间始终是最新的。这样一来,在初次访问之后,浏览器就会在指定的时间内使用HTTPS进行通信。最大有效期.

预加载严格传输安全策略

预加载HSTS是一种确保首次访问您的网站时,通信方式始终通过HTTPS的方式进行的有效方法。例如,在普通的HSTS机制下,浏览器只有在收到服务器发送的HSTS头部信息后才会开始使用HTTPS进行通信。这意味着,第一次连接可能会通过非安全的HTTP通道进行,而这样的通道实际上仍然可以被利用。但是,通过预加载HSTS,就可以避免这个问题了。

将您的域名提交到供应商维护的HSTS预加载列表中。一旦您的域名被列入该列表,浏览器就会从一开始就自动使用HTTPS进行所有连接。这种方式增加了一层安全性,因为这样可以避免某些网络攻击利用初始的HTTP连接来发起攻击的机会。

为了启用预加载功能,您的 HSTS 头部必须包含以下内容:

  • “max-age”的值必须至少为1年(即1年或更多时间,即使以秒为单位,也必须是31536000秒)。
  • 必须指定子域的名称。
  • 需要使用预加载指令。

一旦满足这些条件,您就可以将您的域名提交到预加载列表中。相关链接为:https://hstspreload.org/

用于预加载的HSTS头部示例:lua):

Strict-Transport-Security:max-age=31536000;includeSubDomains;preload

浏览器是如何处理这一情况的呢?

当浏览器访问具有 HSTS 策略的网站时,会按照以下顺序进行:

  • 初始请求:因此,如果用户通过 HTTP 访问该网站,服务器应该将用户重定向到 HTTPS 版本,同时添加 HSTS 头信息。从此时起,浏览器在处理该网站时只会使用 HTTPS 协议。
  • 未来的请求/期望 (保密咨询/建议:在 max-age 所定义的时间范围内,浏览器会始终将对该域的所有 HTTP 请求自动转换为 HTTPS 格式。如果用户手动输入 “http://example.com/”,那么浏览器会自动将 URL 重写为 “https://example.com/”,然后再将请求发送给服务器。
  • 无效的SSL证书:如果网站的SSL证书无效或已过期,浏览器就会阻止连接的建立。用户将无法进行安全的连接操作。这种机制进一步增加了保护层次,因为它可以阻止那些试图绕过安全警告的行为。
  • 预加载的网站/内容浏览器会自动在访问HSTS预加载列表中的网站时,从第一次请求开始就使用HTTPS协议。也就是说,即使用户从未访问过这些网站,客户端仍然会默认使用HTTPS进行连接。这样就能避免初始连接过程中使用不安全的HTTP协议的情况发生。

示例/例子

请考虑以下HSTS头部的示例:

Strict-Transport-Security:max-age=63072000;includeSubDomains;preload

当服务器在响应中包含此头部信息时,浏览器会启用HTTPS,并且对所有的子域名也遵循相同的规则。另一个例子是,可以使用更简单的HSTS头部信息,而不需要额外的指令。Arduino):

Strict-Transport-Security:max-age=31536000

该政策仅适用于为期一年的时间范围内,它只涵盖主域名,而不包括子域名或预加载列表。对于那些不需要太多子域名且希望避免预加载列表的网站来说,这种方法似乎是个有效的选择。

使用 Nginx 和 Apache 进行实现

像Nginx和Apache这样的服务器支持设置HSTS头部的功能。

Nginx实现方式

要在 Nginx 中配置 HSTS,您需要修改服务器配置文件。以下是 Nginx 配置的伪代码:

服务器 {
请监听端口 443,并使用 SSL 加密连接。
server_name example.com;
# SSL配置
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# HSTS头部设置:max-age值为1年,支持子域名,并且会进行预加载处理。
添加以下头部信息:Strict-Transport-Security,其参数值为:“max-age=31536000;includeSubDomains;preload”,并且该头部信息应始终被包含在内。
位置 / {
# 您网站的根级配置
尝试使用 try_files 来处理 $uri 和 $uri/ 的情况,如果 $uri 不存在,则返回 404 错误。
}
}

配置完成后,请重新加载 Nginx 以应用这些更改。bash):

sudo systemctl reload nginx

Apache实现方式

在 Apache 上实现 HSTS 需要选择进行相关配置更改。.htaccess文件可以将文件存放在网站的根目录中,或者配置文件中。/etc/apache2/sites-available/000-default.conf).

您可以在 Apache 配置文件中添加 HSTS 头信息,具体步骤如下:Apache):

<VirtualHost *:443>
服务器名称:example.com
# SSL配置
SSLEngine正在运行中。
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
# HSTS头部设置:max-age为1年,支持子域名,并且采用预加载方式。
头部始终应设置为“Strict-Transport-Security”,其参数值为:“max-age=31536000; includeSubDomains; preload”。
文档根目录:/var/www/html
<Directory /var/www/html>
选项索引遵循符号链接规则
允许所有权限设置
要求所有已授予的……
</Directory>
</VirtualHost>

在进行这些修改之后,需要重新启动 Apache,以便让 HSTS 头部设置生效。bash):

sudo systemctl restart apache2

测试您的HSTS实施情况

您可以使用开发者工具中的相关工具,或者通过在线服务来确认自己的 HSTS 策略是否设置正确。SSL Labs).

它是如何工作的?

确定HSTS的功能,有助于网页开发者及其相关人员更好地应用这一技术,从而避免可能出现的问题。从浏览器的角度来看,这个过程大致如下:

  • 初始请求:在首次访问某个网站时,每个用户可以根据网站的配置选择使用HTTP或HTTPS连接。当建立HTTPS连接时,服务器可以发送相应的内容。Strict-Transport-Security头部信息.
    • 当用户通过HTTP而非HTTPS进行连接时,HSTS头信息将无法被获取,因此该网站仍然可能面临攻击的风险。许多网站都实现了从HTTP到HTTPS的重定向功能,以确保用户能够在连接开始时就实现安全连接。
  • HSTS策略激活:一旦浏览器捕获到HSTS头部信息,它就会记住该策略,并在所有后续的请求中执行该策略。最大有效期尝试通过HTTP访问该网站时,浏览器会自动被重定向到HTTPS页面。用户可以放心,因为浏览器会自动执行这种重定向操作,无需任何额外的干预。
  • 后续请求:在HSTS策略生效期间,所有对该网站的访问都必须通过HTTPS进行。即使用户手动在浏览器的地址栏中输入“http://example.com/”,浏览器也会将其自动转换为“https://example.com/”,然后再发送请求。这样,服务器就能在所有交互中保持安全状态。
  • 避免不安全的沟通方式:HTTPS连接失败的情况可以通过该协议得到有效处理,从而保护用户的权益。当网站没有有效的或处于活动状态的SSL/TLS证书时,浏览器会完全拒绝建立连接。因此,确保用户的安全就显得非常重要了。这样,用户就不会因为看到SSL警告而选择不使用HTTPS来访问网站,从而提升了系统的安全性。
  • 预加载:那些遵循预加载指令的网站,在满足相关需求后,就可以加入浏览器的预加载列表中。通过这种方式,浏览器可以在用户首次访问该网站时强制使用HTTPS协议。这样一来,对于重要的在线资源来说,就可以避免在访问过程中出现安全隐患。

为了设置预加载的网站,网站管理员必须确保HSTS头部已经正确设置。max-age=31536000以及预加载指令所指定的内容。包括子域名一旦网站符合这些指南要求,它们就可以被纳入浏览器预加载列表中。

结论

采用HTTP Strict Transport Security(HSTS)是当前网络安全框架中最重要的措施之一。使用HSTS可以限制不安全的HTTP协议的使用,从而保护网站和用户免受各种安全威胁的侵害。通过启用浏览器预加载功能,网站管理员可以在用户访问之前确保通信的安全性。

对于网站管理员来说,启用 HSTS 非常简单,这一措施对提高安全性和性能都具有重要意义。在日益复杂的网络安全威胁环境下,实施 HSTS 这样的政策对于为所有人提供安全、可靠的在线体验至关重要。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料