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欺騙劫持