啟用HSTS並加入HSTS Preload List讓網站Https訪問更加安全-附刪除HSTS方法


之所以想起要啟用HSTS,主要是最近不少的朋友說網站打不開了,雖然Ping值一切正常,但是就是網頁無法訪問。猜測可能是DNS解析這一環節出了問題。另外自己本地的DNS劫持已經到了“喪心病狂”的地步了,不加Https訪問京東淘寶等全部被加入各種推廣。

啟用HSTS后自然想要加入HSTS Preload List了,這是各大瀏覽器都遵循的一個強制使用Https訪問的網站列表,只要加入到這個列表中,所有的通過瀏覽器訪問請求都會強制走Https,這在很大程度上可以杜絕“第一次”訪問的劫持,最大限度地提高Https訪問的安全性。

需要注意的是加入HSTS Preload List需要以根域名的形式加入,如果你啟用了www.abc.com這樣的二級域名形式訪問,你需要先停止301跳轉,即要保證abc.com這樣的根域名是用Https可以訪問到的。(PS:之前我有一個網站就是這樣的情況,如有變化大家在申請時結合具體情況分析)。

啟用HSTS並加入HSTS Preload List讓網站Https訪問更加安全-附刪除HSTS方法

HSTS是在服務器強化Https安全,如果你的網站還沒有啟用Https,可以試試免費的SSL證書Let’s Encrypt

一、服務器啟用HSTS

HSTS是國際互聯網工程組織 IETE 正在推行一種新的 Web安全協議HTTP Strict Transport Security(HSTS)。采用 HSTS 協議的網站將保證瀏覽器始終連接到該網站的 HTTPS 加密版本,不需要用戶手動在 URL 地址欄中輸入加密地址。

1.1  Apache2 配置 HSTS

編輯你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),並加以下行到你的 HTTPS VirtualHost:

1 # Apache需加載mod_header庫,一般位於httpd.conf文件,搜索mod_headers並取消注釋。(已加載可跳過)
2 LoadModule headers_module modules/mod_headers.so   #然后對應站點VirtualHost里面插入HSTS響應頭信息
3 
4 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

 

保存 Apache 配置文件,然后重啟。現在你的 web 站點在每次訪問時都會發送該請求頭,失效時間是兩年(秒數),這個失效時間每次都會設置為兩年后。

1.2  Nginx 配置 HSTS

Nginx 服務器中的配置最為簡單,只需要編輯 Nginx 配置文件(如:/usr/local/nginx/conf/nginx.conf)將下面行添加到你的 HTTPS 配置的 server 塊中即可:

1 add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

 

如果你發現直接添加在 server 塊中無效的情況,你可以試試直接插入到 location ~ *php 內:

1 location ~ [^/]\.php(/|$) {
2     add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
3 }

 

配置保存后重啟 Nginx 服務。

1.3  在 Lighttpd 中配置 HSTS

將下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):

1 server.modules += ( "mod_setenv" )
2 $HTTP["scheme"] == "https" {
3     setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
4 }

 

編輯保存后記得重啟一下。

1.4  PHP通用配置 HSTS 方法

將以下代碼添加到網站根目錄 index.php 中或者header.php中

1 header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

 

開啟了HSTS后,你部署SSL/TLS的服務檢測得分就可能是A+以上了。ssllabs官網以及演示如下:

  1. 官網:https://www.ssllabs.com/
  2. 中文版:https://myssl.com
  3. 演示:https://www.ssllabs.com/ssltest/analyze.html?d=wzfou.com

HSTS Preload List達到A+等級

二、加入HSTS Preload List

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

  1. https://hstspreload.org/
  2. https://wzfou.com/cloudflare/

2.1  測試HSTS是否生效

直接打開Chrome查看網絡,就可以看到頭部已經包含了HSTS信息了。

HSTS Preload List頭部信息

2.2 做好Http跳轉Https

將wzfou.com以及任意二級域名都要做好Http跳轉到Https,啟用了HSTS后請求地址為 header 頭中的 Location會顯示307 ,即要求瀏覽器繼續向 Location 的地址 POST 內容。

HSTS Preload List跳轉成功

2.3  加入HSTS Preload List

進入hstspreload官網,輸入你的域名,然后檢測結果會告訴是否符合加入HSTS Preload List,沒有問題的話勾選確定。(點擊放大)

申請加入HSTS Preload List

HSTS Preload List審核的時間有長有短,一旦提交后你就只能等待。

HSTS Preload List耐心等待

三、HSTS Preload List問題

3.1  是否成功加入HSTS Preload List

直接到下列網址搜索是否有你的域名即可:

  1. https://cs.chromium.org/chromium/src/net/http/transport_security_state_static.json

當然,加入到了HSTS Preload List后,你可能還需要等待1-2月,待新版本的Chrome和Chromium、Firefox、IE等發布后,你的域名算是正式被各大瀏覽器承認並強制使用Https訪問了,你可以在Chrome瀏覽器的地址框中輸入“chrome://net-internals/#hsts”查看。

HSTS Preload List搜索查看

3.2  如何撤銷HSTS Preload List

  1. https://hstspreload.org/removal/

官方也提供了一個申請刪除HSTS Preload List,不過需要注意的是撤銷HSTS Preload List和加入HSTS Preload List一樣,花費的時間可能需要幾個月以上,所以申請HSTS Preload List前一定要謹慎。

HSTS Preload List刪除

四、總結

由於HSTS Preload List是一個內置於各大瀏覽器的Https網站列表,所以能否加入成功除了審核通過外,還得看瀏覽器版本的更新。一旦加入HSTS Preload List了想要退出就比較麻煩了,所以加入前一定要考慮好。

那么哪些網站適合加入HSTS Preload List?個人博客或者網站可以來玩一玩,對於安全性要求比較高的電商網站,會員管理后台等完全可以使用HSTS Preload List,對於一些有Http需要的還是不加入得好。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM