[指南] 如何配置使用HTTP严格传输安全HSTS

HTTP严格传输安全即HSTS是某种安全功能,HSTS旨在告知用户使用的浏览器与服务器之间仅HTTPS通信。

如果网站服务器支持HTTP访问并将其重定向到HTTPS访问的话,那么重定向之前的初始化会话是非加密的。

这种情况下攻击者就可以利用中间人攻击手法进行劫持,让访问请求从正常站点跳转到攻击者的恶意站点去。

而HSTS协议则告知浏览器不可以使用HTTP进行连接,在浏览器上自动将所有到该站点的HTTP替换HTTPS。

维基百科上对HSTS协议的描述是可以用来抵御 SSL 剥离攻击,该攻击由Moxie在2009年黑帽大会上发表的。

这种攻击方式主要利用的就是不少用户习惯性点击 HTTP 连接而不会手动把请求的网址改成HTTPS加密连接。

因此可以在 HTTP 连接完成前对请求进行阻止,然后将连接重定向到攻击者伪造的恶意网址上即可窃取数据。

[指南] 如何配置使用HTTP严格传输安全HSTS

需要注意的是:

在浏览器首次访问网页之前并不知道服务器是否支持 HSTS 协议,因此网站需要通过HTTPS协议告知浏览器。

所以在用户的浏览器初次访问HTTPS站点时即使启用HSTS协议也不能够完全杜绝掉SSL剥离这个攻击手法的。

如何告诉浏览器支持HSTS协议:

在服务器中配置HSTS协议并在客户端发出HTTPS请求时,在HTTP响应头中包含Strict-Transport-Security。

在Nginx中设置HSTS协议:

编辑网站配置文件然后加入HSTS协议代码保存,然后重启Nginx即可开启HSTS协议。实例如下:

server { listen 443 ssl http2; #listen [::]:443 ssl http2; server_name www.landiannews.com landiannews.com; #开启HTTP严格传输安全HSTS	add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; #开启HTTP严格传输安全HSTS index index.html index.htm index.php default.html default.htm default.php; ssl on; ssl_certificate /usr/local/nginx/conf/certificate/www.landiannews.com.crt; ssl_certificate_key /usr/local/nginx/conf/certificate/www.landiannews.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; }
  #修改完成保存后重启Nginx service nginx restart

在Apache 2中设置HSTS:

在Apache里编辑网站的配置文件例如/etc/apache2/sites-enabled/website.conf等等:

# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so
<VirtualHost 67.89.123.45:443>
#开启HTTP严格传输安全HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
#开启HTTP严格传输安全HSTS
</VirtualHost>

以上内容由 LCTT 编译并发布在Linux中国,英文原文请点击这里查看。

本文来源 Linux中国,由 山外的鸭子哥 整理编辑,其版权均为 Linux中国 所有,文章内容系作者个人观点,不代表 蓝点网 对观点赞同或支持。如需转载,请注明文章来源。
扫码关注蓝点网微信公众号

评论:

32 条评论,访客:32 条,站长:0 条
  1. 如果
    如果发布于: 
    Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

    s.haoyangmao8.com 这个就自动跳https 头疼

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Google Chrome 57.0.2987.110 Google Chrome 57.0.2987.110 Windows 10 64位版 Windows 10 64位版

      你浏览器问题吧,,,我打开显示正常啊

      • 如果
        如果发布于: 
        Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

        你那有缓存吧,我这火狐 谷歌 360等都不行

      • 如果
        如果发布于: 
        Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

        手机浏览器没事 但是电脑的不行

      • 如果
        如果发布于: 
        Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

        你说的显示正常因为是你第一次打开这个页面,在打开他就会 hsts加载,以后就打不开了,清除浏览器第一次都能打开

        • 山外的鸭子哥
          山外的鸭子哥发布于: 
          Google Chrome 57.0.2987.110 Google Chrome 57.0.2987.110 Windows 10 64位版 Windows 10 64位版

          没有 我特地测试了

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Google Chrome 57.0.2987.110 Google Chrome 57.0.2987.110 Windows 10 64位版 Windows 10 64位版

      你自己电脑设置的问题 我已经再三测试 先打开https版 再改成子域名 http版 正常 没有任何跳转

  2. 如果
    如果发布于: 
    Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

    难道是我301重定向闹得?所有非WWW.***.com 都跳转到HTTPS:WWW.***.com 难道是这个原因? 跟HSTS没关系么,HSTS是不是所有的都自动跳

  3. 如果
    如果发布于: 
    Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

    nginx 求助怎么办啊 我在WWW域名地下输入上面那个规则,为什么其他二级会收到影响

  4. 如果
    如果发布于: 
    Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

    我已经做好HSTS了,网站提交到这个Preload清单了

    但是我的子域名不支持HTTPS,他也强制HTTPS了,那样怎么办

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Google Chrome 57.0.2987.110 Google Chrome 57.0.2987.110 Windows 10 64位版 Windows 10 64位版

      设置错了吧。。。a.landian.com和www.landian.com都是子域名,你配置任意一个也不会影响到另一个的呀 除非你配置文件写错了 子域名和其他域名写在同一个文件里 结果。。是不是Apache?

  5. 如果
    如果发布于: 
    Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

    HSTS就是浏览器告诉你必须使用HTTPS, 那我HTTP重定向HTTPS 会被劫持么?

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Safari 10.0.2 Safari 10.0.2 Mac OS X 10.12.2 Mac OS X 10.12.2

      不一定 如果你这样 https://www.landiannews.com/ 301或者302到https://www.landiannews.com就可以劫持,攻击者可以在重定向之前劫持。HSTS要解决的其实就是这个情况,当开启HSTS后用户第一次访问之后浏览器保存HSTS声明,在你访问访问https://www.landiannews.com时 发出请求前,直接将地址替换了https开头,实际上就没有经过重定向这一步了

  6. 如果
    如果发布于: 
    QQbrowser QQbrowser Android 6.0.1 Android 6.0.1

    我自己做的http 301到https

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Google Chrome 57.0.2987.110 Google Chrome 57.0.2987.110 Windows 10 64位版 Windows 10 64位版

      那就可以了 反正用CDN HSTS也没用

  7. 如果
    如果发布于: 
    QQbrowser QQbrowser Android 6.0.1 Android 6.0.1

    我看到站长你也用了cdn不是也可以吗,搞不明白为什么重定向加上HSTS就打不开了

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Google Chrome 57.0.2987.110 Google Chrome 57.0.2987.110 Windows 10 64位版 Windows 10 64位版

      我是用了CDN 但实际你访问的并不是HSTS 因为CDN不支持 你打开的时候是不是提示循环重定向?

  8. 如果
    如果发布于: 
    QQbrowser QQbrowser Android 6.0.1 Android 6.0.1

    haoyangmao8.com 现在是没有配置HSTS 源站配置了https 又用了百度云加速专业版证书

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Safari 10.0 Safari 10.0 iPhone iOS 10.1.1 iPhone iOS 10.1.1

      那你还得发源站ip cdn是没有这个功能的 所以你如果也用了cdn那么就不用配置了。。

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Google Chrome 57.0.2987.110 Google Chrome 57.0.2987.110 Windows 10 64位版 Windows 10 64位版

      我访问测试了 HTTP 302 到 HTTPS 应该是CDN那边设置的吧 CDN不支持HSTS没有办法的

  9. 如果
    如果发布于: 
    Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

    而且我设置这个规则了:rewrite ^(.*)$ https://$host$1 permanent;

    必须HTTPS访问,为什么在用HSTS行不通了,或者只用HSTS会乱码

  10. 如果
    如果发布于: 
    Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

    我带WWW的已经开启https,并且不带WWW的也重定向到带WWW得了

    直接放Https 网站会打不开了,如果把重定向去掉,网站是可以打开,但是模版乱码了,乱套了

  11. 如果
    如果发布于: 
    Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

    之前用了重定向了,为什么用HSTS网站就打不开了

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Safari 10.0 Safari 10.0 iPhone iOS 10.1.1 iPhone iOS 10.1.1

      HSTS告诉浏览器必须使用Https 你重定向的原域名肯定没开https

  12. 如果
    如果发布于: 
    Firefox 52.0 Firefox 52.0 Windows 10 64位版 Windows 10 64位版

    如果设置HSTS 还需要在做重定向么

    • 山外的鸭子哥
      山外的鸭子哥发布于: 
      Safari 10.0 Safari 10.0 iPhone iOS 10.1.1 iPhone iOS 10.1.1

      重定向和hsts是两码事 hsts仅仅只适用于同时支持http和https访问的站点

  13. abc
    abc发布于: 
    Google Chrome 57.0.2987.110 Google Chrome 57.0.2987.110 Mac OS X 10.12.3 Mac OS X 10.12.3

    据说已经移除0元购了

发表评论