售前咨询
技术支持
渠道合作

深入剖解HSTS,启动HTTPS的强制机制

关于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解决方案。

上一篇:

下一篇:

相关文章