HSTS工做机制:html
服务端配置支持HSTS后,用户访问HTTPS网站,服务器会给返回给浏览器的header头中添加一个Strict-Transport-Security字段(非加密传输时此字段无效),支持HSTS的浏览器接收到此字段,会将全部的HTTP访问请求在内部作307跳转到HTTPS,而不会产生任何网络请求(区别没有设置HSTS的网站是作302跳转将http请求转为https),而后将此网站加入到浏览器的HSTS 列表中。git
遇到的问题:github
上面这种状况就遇到了一种尴尬的问题,当作proxy代理时,由于要抓去https传输的数据,就须要本身伪造证书进行服务器与本地交互数据的解封包,服务器设置了HSTS,此时就没法经过浏览器的验证了浏览器
而没有设置HSTS的网站没有任何问题,添加到例外中便可缓存
解决问题:服务器
方法一:火狐访问"about:config" --> 右键建立->整数->整数值:test.currentTimeOffsetSeconds ->内容:11491200 而后清除浏览器缓存 再使用代理的时候就没问题了网络
方法二:由于HSTS的设置都有必定的时效性,能够经过修改本地时间大于一年解决(修改时间后不代理状况下有个bug,当证书过时时间小于本地修改后的时间的时候会形成不少https的资源没法加载,甚至提示证书错误没法访问)网站
方法三:DNS方式,如MITMf (https://github.com/byt3bl33d3r/MITMf)加密
最后:3d
方法各有优缺,针对特殊场景灵活利用,最简单的莫非改本地时间。
参考:
https://blog.wilddog.com/?p=997 等.
https://raymii.org/s/tutorials/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.html HTTP Strict Transport Security for Apache, NGINX and Lighttpd
2017/1/16更新:https://finnwea.com/blog/bypassing-http-strict-transport-security-hsts 含两种方法,一:NTP 二:DNS欺骗劫持