怪人
HSTS

HSTS 如何运作

分享
  • 在下炳尚 2 风险管理(专业级)RM/PL 高级信息系统项目管理师
    在下炳尚2 风险管理(专业级)RM/PL 高级信息系统项目管理师

    HSTS 主要是通过服务器发送响应头的方式来控制浏览器操作:

    首先在服务器响应头中添加 HSTS 响应头

    **Strict-Transport-Security**: max-age=expireTime [; includeSubDomains] [; preload]  此响应头只有在 https 访问返回时才生效,其中[ ]中的参数表示可选;  **includeSubDomains**:包含它,意味着当前域名及其子域名均开启HSTS保护。  此参数影响范围较大,如果某些子域名没有启用 https,则将导致无法访问,添加请谨慎!  **preload**:申请将域名加入到浏览器内置列表时使用。
    • 每个连接到该网站及其子域的,从这个头被接收的时刻起必须是一个 HTTPS 连接。 如果浏览器接收到使用 HTTP 加载资源的请求,则必须尝试使用 HTTPS 请求替代。 如果 HTTPS 不可用,则终止连接。如果证书无效,将阻止建立连接。

    设置 max-age 参数,时间设置不宜过长,建议设置时间为 6 个月

    • 注意:生产环境下使用HSTS应当谨慎,一旦浏览器接收到HSTS Header(假如有效期是1年),但网站的证书又恰好出了问题,那么用户将在接下来的1年时间内都无法访问到你的网站,直到证书错误被修复,或者用户主动清除浏览器缓存。因此,建议在生产环境开启HSTS时,先将max-age的值设置小一些,例如5分钟,然后检查HSTS是否能正常工作,网站能否正常访问,之后再逐步将时间延长,例如1周、1个月,并在这个时间范围内继续检查HSTS是否正常工作,最后才改到1年。

    当用户下次使用 HTTP 访问,客户端就会进行内部跳转,并且能够看到 307 Redirect Internel 的响应码

    • 307状态码,和 301/302 状态码不同,它并不是服务器返回的,而是浏览器本地自动生成,即在浏览器本地自动发生了 http 到 https 的跳转,与网站服务器没有任何交互。
    • 响应头中:Non-Authoritative-Reason:HSTS,也标明了是因为 HSTS 功能的缘故,导致浏览器本地发生了 http 到 https 的跳转。

    网站服务器变成了 HTTPS 访问源服务器

    开启 HSTS 后网站可以有效防范中间人的攻击,同时也会省去网站 301/302 跳转花费的时间,大大提升安全系数和用户体验。
  • 写回答