博客正式启用HSTS,放弃使用301跳转,使SSL/TLS安全评估达到A+

深夜了,夜猫子又开始瞎折腾捣鼓了…之前一直用的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://www.ssllabs.com/

中文版:https://myssl.com

演示:https://myssl.com/saodaye.com?status=success

服务器检测是否配置了HSTS(记得改成你自己的域名),只要输入下面的代码,出现标记红框的内容就没问题了,配置就OK了

curl -I https://saodaye.com

又是一个不眠夜,大家晚安

2018年4月24日02:09:51

获赠个安全认证图标

2 comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*