本文最后更新时间 2018年5月7日
深夜了,夜猫子又开始瞎折腾捣鼓了…之前一直用的301跳转,这样很容易被劫持。这次折腾的是博客的HSTS…
注意:(确定开启HSTS的三点注意事项!谨记!SSL以及HSTS的到期时间!)
- HSTS策略只能在HTTPS响应中进行设置,网站必须使用默认的443端口;
- 所有子域名(*.saodaye.com)只能通过安全连接(https),如果子域名有一个没有配置ssl,那么这个没有配置ssl的域名就无法访问了;
- 如果saodaye.com服务器发送的TLS证书无效,用户不能忽略浏览器警告继续访问该网站。(意味着在HSTS失效前SSL不能失效,如果SSL在HSTS之前失效了,浏览器就会警告用户,而且无法忽略警告继续访问)
我们先了解一下HSTS是什么鬼~
HSTS是国际互联网工程组织 IETE 正在推行一种新的 Web安全协议HTTP Strict Transport Security(HSTS)。
采用 HSTS 协议的网站将保证浏览器始终连接到该网站的 HTTPS 加密版本,不需要用户手动在 URL 地址栏中输入加密地址。也就是打开网站会直接跳转到https加密的链接,减少会话劫持风险。
简单来说
网站全站HTTPS后,如果用户手动敲入网站的HTTP地址,或者从其它地方点击了网站的HTTP链接,通常依赖于服务端301/302跳转才能使用HTTPS服务。
而第一次的HTTP请求就有可能被劫持,导致请求无法到达服务器,从而构成HTTPS降级劫持。这个问题就可以通过HSTS(HTTP Strict Transport Security,RFC6797)来解决。
开始配置之前先检测一下,是否达到A+,如果无法达到A+,请自觉配置HSTS以减少可能被劫持的风险
emmm 现在是评级是A,暂时没达到A+,而且提示你需要开启HSTS才能提升到A+,那就动手开始配置~
- max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过HTTPS协议来访问。也就是对于这个网站的HTTP地址,浏览器需要先在本地替换为HTTPS之后再发送请求。
- includeSubDomains,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过HTTPS协议来访问。
- preload,可选参数,一个浏览器内置的使用HTTPS的域名列表。
Apache 配置 HSTS
编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加下面的内容到你的 HTTPS VirtualHost:
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
然后重启Apche
Nginx 配置 HSTS
编辑Nginx配置文件就可以了,找到安装Nginx下的Nginx.conf文件
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
然后重启Nginx
宝塔(BT.CN)的配置方法
网站→站点设置→配置文件
(我使用的是nginx,直接插入nginx的代码就可以了,如果是Apche则插入Apche的代码)
SSL/TLS的服务检测评分
演示:https://myssl.com/saodaye.com?status=success
服务器检测是否配置了HSTS(记得改成你自己的域名),只要输入下面的代码,出现标记红框的内容就没问题了,配置就OK了
curl -I https://saodaye.com
本文转自:https://saodaye.com/zz/859.html