解決缺陷,讓HSTS變得完美

做者:王繼波
野狗科技運維總監,曾在360、TP-Link從事網絡運維相關工做,在網站性能優化、網絡協議研究上經驗豐富。
野狗官博:https://blog.wilddog.com/
野狗官網:https://www.wilddog.com/
公衆訂閱號:wilddogbaaschrome

圖片描述

HSTS是HTTPS性能和安全優化中最重要的一環,可以給HTTPS帶來巨大好處,但也存在一個小缺陷。本篇文章會介紹HSTS的工做原理及如何經過HSTS preload list解決HSTS的小缺陷。瀏覽器

HSTS是什麼?

HSTS是HTTP Strict Transport Security的縮寫,即:「HTTP嚴格傳輸安全」。在介紹HSTS以前,咱們先來看HTTPS最典型的用戶訪問過程:一般咱們訪問一個網站時,只在瀏覽器中輸入網站地址,而不輸入協議名。好比訪問野狗的官網,咱們最常使用www.wilddog.com,即便該網站是全站HTTPS,咱們也不多使用https://www.wilddog.com這樣的方式。 HTTPS網站的作法是對用戶的HTTP訪問作302跳轉到HTTPS,並從新建連。安全

圖片 1

可是這個過程明顯存在兩個不足之處:性能優化

  • 整個通訊過程當中的前兩個RT是沒有意義的;服務器

  • 使用了不安全的HTTP通訊,萬一你是在提交敏感數據呢。網絡

HSTS的出現就是解決這些問題的。HSTS的做用除了節省HTTPS通訊RT和強制使用HTTPS,還包括:app

  • 阻止基於SSLStrip的中間人攻擊;運維

  • 萬一證書有錯誤,則顯示錯誤,用戶不能迴避警告。dom

HSTS的具體工做機制可描述以下:服務器端配置支持HSTS後,會在給瀏覽器返回的HTTP首部中攜帶HSTS字段。瀏覽器獲取到該信息後,會將全部HTTP訪問請求在內部作307跳轉到HTTPS。而無需任何網絡過程。性能

目前大部分瀏覽器對HSTS的支持已經至關完美,具體各瀏覽器和版本的支持狀況能夠在http://caniuse.com/#search=HSTS上查看。 可是HSTS是有缺陷的,第一次訪問網站的客戶端,HSTS並不工做。 要解決這個問題,就要了解咱們下面要講解的HSTS preload list。

HSTS preload list

HSTS preload list是什麼?

HSTS preload list是Chrome瀏覽器中的HSTS預載入列表,在該列表中的網站,使用Chrome瀏覽器訪問時,會自動轉換成HTTPS。Firefox、Safari、Edge瀏覽器也在採用這個列表。

如何加入HSTS preload list?

加入HSTS preload list不但不麻煩,並且Chrome也鼓勵HTTPS網站可以主動加入。申請的方法和須要知足的條件在https://hstspreload.appspot.com網站上都有具體說明。

我將加入HSTS preload list的條件摘錄以下:

  • 有效的證書(若是使用SHA-1證書,必須是2016年前就會過時的);

  • 將全部HTTP流量重定向到HTTPS;

  • 確保全部子域名啓用HTTPS,特別是www子域名

同時輸出的HSTS響應頭部須要知足如下條件:

  • max-age至少須要18周,10886400秒

  • 必須指定includeSubdomains參數

  • 必須支持preload參數

因此,一個典型知足HSTS preload list的響應頭部爲:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload";

從申請到審覈經過,時間在幾天到幾周不等。野狗的域名wilddog.com申請總共耗時3天。 申請後,你能夠在https://hstspreload.appspot.com網站中查詢最新的狀態, 也能夠在Chrome瀏覽器的地址框中輸入「chrome://net-internals/#hsts」查看。下圖是對wilddog.com域名查詢的輸出結果。

圖片描述
圖片描述

值得一提的是,從審覈經過到正式加入到Chrome的stable release版本中還須要一段時間,由於要通過canary、dev、beta以及stable progression。

相關文章
相關標籤/搜索