阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

HTTP HSTS协议和 nginx

256次阅读
没有评论

共计 2655 个字符,预计需要花费 7 分钟才能阅读完成。

导读 Netcraft 公司最近公布了他们检测 SSL/TLS 网站的研究,并指出只有仅仅 5% 的用户正确执行了 HTTP 严格传输安全 HSTS。本文介绍 nginx 如何配置 HSTS。

 

什么是 HSTS

HTTPS(SSL 和 TLS) 确保用户和网站通讯过程中安全,使攻击者难于拦截、修改和假冒。当用户手动输入域名或 http:// 链接,该网站的第一个请求是未加密的,使用普通的 http。最安全的网站立即发送回一个重定向使用户引向到 https 连接,然而,中间人攻击者可能会攻击拦截初始的 http 请求,从而控制用户后续的回话。

自然而然 HSTS 应运而生为了解决这一潜在的安全问题。即时用户输入域名或 http 连接,浏览器将严格的升级到 https 连接。

HTTP HSTS 协议和 nginx

HSTS 如何工作的

HSTS 策略是从安全的 HTTPS 站点发送的 HTTP 响应头部发布的。

Strict-Transport-Security: max-age=31536000

当浏览器从 HTTPS 站点看到这个头部,就知道该域名只能通过 HTTPS(SSL 或者 TLS)访问了。并将此信息缓存到 31536000,也就是 1 年。

可选的参数 includeSubDomains 告诉浏览器该策略适用于当前域下的所有子域。

Strict-Transport-Security: max-age=31536000; includeSubDomains
nginx 配置 HSTS

在 nginx 配置文件上设置 HSTS 响应头部。

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

always 参数确保所有的响应设置该头部,包括内部产生的错误响应。nginx 版本早于 1.7.5 不支持该 always 参数和内部产生的错误响应不设置该头部信息。

add_header 指令继承规则:

nginx 配置块继承 add_header 指令所在的封装块,因此只需将 add_header 指令放在顶级的 server 块。此外还有个重要的例外,如果一个块包含了 add_header 指令本身,它不会从封装块继承该头部,你需要重新定义所有的 add_header 指令。

server {
    listen 443 ssl;
 
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 
    # This 'location' block inherits the STS header
    location / {root /usr/share/nginx/html;}
 
    # Because this 'location' block contains another 'add_header' directive,
    # we must redeclare the STS header
    location /servlet {
        add_header X-Served-By "My Servlet Handler";
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;        proxy_pass http://localhost:8080;
    }
}

测试 HTTP 严格传输安全:

一旦用户提出 HSTS 策略,它的缓存信息期由 max-age 指定。在此期间,浏览器将会拒绝通过未加密的 HTTP 访问 web 服务,并拒绝给予例外证书错误(如果该网站以前提交了一个有效可信的证书)。如果指定了一个 includeSubDomanis 参数,这些限制也同样适用于当前域下的所有子域。

当你测试 HSTS 时,max-age 时间设置短点。

是否每个 HTTPS 响应需要有一个 STS 头部:

我们的目标是当用户开始 HTTPS 回话时,尽可能快的呈现 HSTS 策略。如果他们在回话期间接收到 HSTS 策略,他们仍然容易受到 HTTP 劫持攻击的。浏览器只需查看一次 STS 头部,因此它不是严格必要将它添加到每个位置块和每个响应。然而,只在主页或者登陆页面添加它可能是不够的,如果你只添加到缓存的响应,客户端可能无法看到它。确保尽可能多的合理的覆盖到你的 URL,特别注意动态的内容。

HTTP 和 HTTPS 并行

有时网站需要同时运行在 HTTP 和 HTTPS 下

server {
    listen  80;
    listen  443 ssl;
    ...
}

有时,需要将 http 请求重定向到 https

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
 
    # Discourage deep links by using a permanent redirect to home page of HTTPS site
    return 301 https://$host;
 
    # Alternatively, redirect all HTTP links to the matching HTTPS page
    # return 301 https://$host$request_uri;
}
 
server {
    listen 443 ssl;
    server_name www.ttlsa.com;
 
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;}
加强 HSTS

保护客户端从 HTTP 拦截,从它看到 STS 头部到声明的 max-age 的期间内。然而,HSTS 并不是 HTTP 回话劫持的完美解决方案。用户仍然容易受到攻击,如果他们通过 HTTP 访问 HSTS 保护的网站时:

  1. 以前从未访问过该网站
  2. 最近重新安装了其操作系统
  3. 最近重新安装了其浏览器
  4. 切换到新的浏览器
  5. 切换到一个新的设备如移动电话
  6. 删除浏览器的缓存
  7. 最近没访问过该站并且 max-age 过期了

为了解决这个问题,google 坚持维护了一个“HSTS preload list”的站点域名和子域名,并通过 https://hstspreload.appspot.com/ 提交其域名。该域名列表被分发和硬编码到主流的 web 浏览器。客户端访问此列表中的域名将主动的使用 HTTPS,并拒绝使用 HTTP 访问该站点。

一旦设置了 STS 头部或者提交了你的域名到 HSTS 预加载列表,这是不可能将其删除的。这是一个单向的决定使你的域名通过 HTTPS 可用的。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2655字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7994665
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...