关于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:
[; 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响应头信息,比方:
Header always set Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”
③、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