深入剖解HSTS,启动HTTPS的强制机制
来源:互联网 发布:淘宝乔丹官方旗舰店 编辑:程序博客网 时间:2024/06/02 01:58
关于HSTS的定义
HSTS全称是HTTP Strict Transport Security,中文名HTTP严格传输安全,诞生于2012年,至今已有五年历史。它是一种Web安全策略机制(web security policy mechanism),IETF标准轨道协议,其功能是强制客户端(如浏览器)使用HTTPS与服务器创建连接。
作用
强制浏览器直接发起HTTPS请求,拒绝不安全的链接
抵御SSL剥离攻击,防止中间人攻击。
HSTS工作原理:
HSTS的核心点是HTTP响应头(HTTP Response Header),是由安全的HTTPS站点发出。
HSTS Header的样式:
Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]
其中:
max-age是必选参数,单位为秒,它代表着HSTS Header的指定时间,通常设置为1年,即31536000秒,在此时间内,网站必须通过 HTTPS 协议来访问。
includeSubDomains,可选参数,意味着当前域名及其子域名均开启HSTS保护。
Preload,可选参数,预加载到浏览器缓存。
完整的HSTS流程图
HSTS这个响应头只能用于HTTPS 响应;网站必须使用默认的 443 端口;必须使用域名,不能是 IP。当浏览器检测到HTTPS站点发出HSTS Header,就会默认该站点只能通过HTTPS(SSL 或者 TLS)访问,并将此信息缓存时间为31536000s,也就是1年。如果浏览器发现当前连接不安全的情况下,将强制拒绝用户的后续访问要求。例如,当访问Google搜索引擎的时候,如果当前通信连接存在安全问题,浏览器将会彻底阻止用户继续访问Google,如下图所示。
浏览器阻止用户继续访问不安全的站点
因此,站长们必须要确保站点必须使用安全有效的SSL证书,并正确部署。如果当浏览器接收到HSTS Header(假如有效期是1年),一旦网站的证书出现错误,用户无法选择忽略,用户将在接下来的1年时间内都无法访问您的网站,直到证书错误被修复,或者用户主动清除浏览器缓存。
HSTS Preloading List
HSTS必须要在浏览器访问过的网站一次以后才会生效,如果希望提前生效,需要申请 HSTS Preloading List(HSTS预加载列表)。
如果站长要想把自己的域名加进这个列表,首先需要满足以下条件:
拥有一个有效合法的SSL 证书;
在同一台主机上提供重定向响应,以及接收重定向的HTTPS请求;
确保所有子域名均启用 HTTPS;
在根域名的HTTP响应头中,加入HSTS Header,并满足下列条件:
过期时间最短不得少于18周(10886400秒)
必须包含includeSubDomains参数
必须指定preload参数
满足条件后,在HSTS Preload List的官网上(https://hstspreload.org)提交申请。
检查域名是否加入到Preload List
从提交申请到完成审核,成功加入到内置列表,时间为几天到几周不等,要视具体情况而定。可通过官网https://hstspreload.org或在Chrome地址栏里输入chrome://net-internals/#hsts查询状态。
支持HSTS浏览器
目前HSTS Preloading List由 Google Chrome 维护,HSTS Preloading List使用覆盖Chrome、Firefox、Safari、IE 和 Microsoft Edge 等主流浏览器。
Google Chrome 4及以上版本
Firefox 4及以上版本
Opera 12及以上版本
Safari从OS X Mavericks起
Internet Explorer 11及以上版本
如何开启HSTS
启动HSTS并不难,只需要在服务器配置文件上设置HSTS Header,就可以成功开启HSTS机制。下面介绍不同服务器设置HSTS Header。
①、Nginx服务器
只需要在站点server模块内插入如下配置并重启:
server {
listen 443 ssl http2;
server_name zhangge.net;
# 直接在server插入测试居然不生效,最后发现要在location ~ *php 内插入:
location ~ [^/]\.php(/|$) {
add_header Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”;
# 以下略…
②、Apache服务器
Apache如下配置并重启:
# 先在Apache加载mod_header库,一般位于httpd.conf文件,自行搜索mod_headers并取消注释
LoadModule headers_module modules/mod_headers.so
#然后在站点VirtualHost里面插入HSTS响应头信息,比如:
<VirtualHost *.*.*.*:443>
Header always set Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”
</VirtualHost>
③、LigHttpd
将下述配置增加到 Lighttpd 配置文件(一般是 /etc/lighttpd/lighttpd.conf)并重启:
server.modules += ( “mod_setenv” )
$HTTP[“scheme”] == “https” {
setenv.add-response-header = ( “Strict-Transport-Security” => “max-age=63072000; includeSubdomains; preload”)
}
④、通用方法
如果用的虚拟主机,或者不会折腾WEB软件,那么可以采用更简单的通用方法。通过代码来新增响应头即可,这里只分享一下php的做法,其他语言自行参考:
将如下代码插入到网站根目录的index.php即可:
header(“Strict-Transport-Security: max-age=63072000; includeSubdomains; preload”);
无论是HTTPS协议还是HSTS机制,首要的大前提必须拥有一个有效合法的SSL证书。CA机构是全球颁发SSL证书的唯一合法机构,因此获取SSL证书的正确渠道是合法的CA机构申请获取。数安时代(GDCA)是已通过国际WEBTRUST认证,具备国际化的电子认证服务能力的国内CA机构之一,旗下的SSL证书包括信鉴易 TrustAUTH、GlobalSign、Symantec、GeoTrust SSL证书等多个国际品牌,证书数量达数十种,站长们可根据自身的需求向数安时代GDCA机构申最佳的SSL证书,或向其公司的专业人员资讯,选取合适的SSL证书。数安时代(GDCA)的专业团队将会为您提供最佳的HTTPS解决方案。
文章转载:https://www.trustauth.cn/news/security-news/22639.html
- 深入剖解HSTS,启动HTTPS的强制机制
- Google启动HSTS机制,浏览器强制执行HTTPS加密协议
- 躲避 HSTS 的 HTTPS 劫持
- 深入剖解路由器的“心脏”技术
- apache中通过HSTS实现http请求强制跳转到https
- 从HTTP到HTTPS再到HSTS的演化
- 路由器技术深入剖解
- 路由器技术深入剖解
- HTTP,HTTPS和HSTS详解
- 拿起手术刀 深入剖解路由器的“心脏”技术
- [转]路由器技术深入剖解
- 家用路由器技术深入剖解
- 路由器技术深入剖解 2
- 路由器技术深入剖解 3
- 家用路由器技术深入剖解
- 利用HSTS安全协议柔性解决全站HTTPS的兼容性问题
- Service组件的启动机制深入学习
- 从 HTTP 到 HTTPS 再到 HSTS
- Xcode快捷键
- codeforces 337D D. Book of Evil (树形 dp)
- PL/SQL客户端的安装
- C#编程入门4_选择分支语句
- 观察者模式(Observer)
- 深入剖解HSTS,启动HTTPS的强制机制
- 添加字段的脚本
- jdk源码解析(七)——Java虚拟机类加载机制
- bootstrap-treeview数据结构构建
- linux服务器mysql命令行出现 mysql.sock的错误
- iOS开发:下架App的步骤
- Memcached-Session-Manager多tomcat实现session跨域共享配置
- SQL 左外连接,右外连接,全连接,内连接
- oracle in函数限制