主页 > 教程合集 > 网站建设 >

网站开启HSTS且强制跳转HTTPS访问的方法

时间:2019-01-16 阅读:0

在上一篇文章《Apache禁用TLS1.0以符合PCI DSS合规标准的方法》中,余斗提到,用MySSL来检查网站HTTPS并评级的问题,余斗在检查自己的网站的时候,发现评级并不是最高的A+而是A,而想要得到A+的评级,官方建议是使用HSTS,使用HSTS的方法很简单,只要在添加Strict-Transport-Security这个HTTP头部信息即可。

网站开启HSTS且强制跳转HTTPS访问的方法

余斗查询了一番,终于搞明白这个HSTS的作用。

HSTS简介:

HSTS(HTTP Strict Transport Security)是国际互联网工程组织IETF发布的一种互联网安全策略机制。采用HSTS策略的网站将保证浏览器始终连接到该网站的HTTPS加密版本,不需要用户手动在URL地址栏中输入加密地址,以减少会话劫持风险。

在网站全站HTTPS后,如果用户手动敲入网站的HTTP地址,或者从其它地方点击了网站的HTTP链接,通常依赖于服务端301/302跳转才能使用HTTPS服务。而第一次的HTTP请求就有可能被劫持,导致请求无法到达服务器,从而构成HTTPS降级劫持。这个问题目前可以通过HSTS(HTTP Strict Transport Security,RFC6797)来解决。

HSTS响应头格式介绍:


Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
 

max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过HTTPS协议来访问。也就是对于这个网站的HTTP地址,浏览器需要先在本地替换为HTTPS之后再发送请求。

includeSubDomains,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过HTTPS协议来访问。

preload,可选参数,一个浏览器内置的使用HTTPS的域名列表。

HSTS部署:

HSTS启用比较简单,只需在相应头中加上如下信息


Strict-Transport-Security: max-age=63072000; includeSubdomains;preload;
 

Strict-Transport-Security是Header字段名,max-age代表HSTS在客户端的生效时间。 includeSubdomains表示对所有子域名生效。preload是使用浏览器内置的域名列表。

HSTS策略只能在HTTPS响应中进行设置,网站必须使用默认的443端口;必须使用域名,不能是IP。因此需要把HTTP重定向到HTTPS,如果明文响应中允许设置HSTS头,中间人攻击者就可以通过在普通站点中注入HSTS信息来执行DoS攻击。

Apache上启用HSTS的方法


$ vim/etc/apache2/sites-available/http-vhosts.conf

# 开启HSTS需要启用headers模块
LoadModule headers_module/usr/lib/apache2/modules/mod_headers.so

<VirtualHost *:80>
    ServerName www.yudouyudou.com
    ServerAlias yudouyudou.com
...
  #将所有访问者重定向到HTTPS,解决HSTS首次访问问题。
    RedirectPermanent/ https://www.yudouyudou.com/
</VirtualHost>

<VirtualHost 0.0.0.0:443>
...
# 启用HTTP严格传输安全
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
...
</VirtualHost>
 

Nginx上启用HSTS的方法


$ vim/etc/nginx/conf.d/http-vhosts.conf

server {
      listen 443 ssl;
      server_name www.yudouyudou.com;
      add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
...
}

server {
      listen 80;
      server_name www.yudouyudou.com;
      return 301 https://www.yudouyudou.com$request_uri;
...
}
 

完成后记得重启服务器,就可以发现我们的设置生效了!

网站开启HSTS且强制跳转HTTPS访问的方法

再去MySSL里检测,网站达到最高评级:

网站开启HSTS且强制跳转HTTPS访问的方法

对于HSTS以及HSTS Preload List,建议是只要不能确保永远提供HTTPS服务,就不要启用。因为一旦HSTS生效,之前的老用户在max-age过期前都会重定向到HTTPS,造成网站不能正确访问,唯一的办法是换新域名。

如果这篇博文对你有帮助,希望您可以打赏给博主余斗,以支持余斗继续坚持下去!

余斗个人博客打赏二维码

余斗余斗
  • 版权声明:原创文章由发表在网站建设分类下,2019-01-16最后更新,转载注明出处。

相关推荐

下一篇:没有了
返回顶部