想當年沒有HTTPS的是時候,咱們在瀏覽器輸入一個域名,請求服務器內容,正常狀況下能夠進行數據的返回。可是若是在瀏覽器和服務器之間出現劫持者,也就是中間人劫持或者中間人攻擊,咱們的數據就會被劫持篡改。自從有了HTTPS,感受放心很多,可是有了HTTPS咱們的請求難道就高枕無憂了嗎?web
在咱們平時訪問網頁時。咱們通常不會在地址欄輸入 www.fenqile.com而是習慣性輸入 fenqile.com,此時瀏覽器走的是 http,請求到達服務器以後,服務器告訴瀏覽器 302 跳轉。而後瀏覽器從新請求,經過 HTTPS 方式,443 端口通信。 chrome
而正由於用戶不是直接輸入 // 連接,劫持者利用這一點:也能夠進行一個劫持的操做 首先劫持用戶的 80 端口,當用戶向目標頁發起請求時,劫持者模擬正常的 https 請求向源服務器獲取數據,而後經過 80 端口返回給用戶。 瀏覽器
這種劫持出如今兩種狀況下:緩存
HTTP Strict Transport Security (一般簡稱爲HSTS) 是一個安全功能,它告訴瀏覽器只能經過HTTPS訪問當前資源, 禁止HTTP方式。安全
HTTP Strict Transport Security (HSTS) is an opt-in security enhancement that is specified by a web application through the use of a special response header. Once a supported browser receives this header that browser will prevent any communications from being sent over HTTP to the specified domain and will instead send all communications over HTTPS. It also prevents HTTPS click through prompts on browsers. The specification has been released and published end of 2012 as RFC 6797 (HTTP Strict Transport Security (HSTS)) by the IETF.服務器
HSTS這個過程有效避免了中間人對 80 端口的劫持。可是這裏存在一個問題:若是用戶在劫持狀態,而且沒有訪問過源服務器,那麼源服務器是沒有辦法給客戶端種下 Strict-Transport-Security 響應頭的(都被中間人擋下來了)。app
步驟1:訪問域名http://passport.oa.fenqile.com,兩次請求,地址進行302重定向。 運維
爲何咱們要求在未清空chrome瀏覽器的緩存前訪問呢? 由於若是清空了chrome瀏覽器的緩存以後,咱們手動加入到hsts緩存中的域名就會被清除,也就不會看到預期的效果了。dom
手動設置域名的HSTS,這裏你們可能會問,passport.oa.fenqile.com 這個域名你自己就會設置HSTS並跳轉到HTTPS上呀,你的截圖是假的。這裏我須要解釋一下,爲了進行這個測試,我求了運維大哥,請求他短暫的進行了設置(不進行HSTS的設置和HTTPS的強跳轉),才成功的進行了實驗。測試
謝謝你們!但願和你們一塊兒成長!