解決缺陷,讓HSTS變得完美

LinStanley 8年前發布 | 50K 次閱讀 瀏覽器 Web服務器

來自: https://blog.wilddog.com/?p=997

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,并重新建連。

但是這個過程明顯存在兩個不足之處:

  • 整個通信過程中的前兩個RT是沒有意義的;
  • 使用了不安全的HTTP通信,萬一你是在提交敏感數據呢。

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

  • 阻止基于SSLStrip的中間人攻擊;
  • 萬一證書有錯誤,則顯示錯誤,用戶不能回避警告。

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。

</div>

 本文由用戶 LinStanley 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!