在西元2015年之後,我們所熟悉的HTTP網站已經被大多數人認為是不安全的網站了,許多瀏覽器甚至會直接針對沒有使用HTTPS協定的網站打上「不安全」的標籤,就連搜尋引擎也會降低HTTP網站的排名。因此讓網站支援SSL,並使用HTTPS協定進行傳輸,已經是再基本不過的事了。然而,網站用了HTTPS協定後,就一定是安全的嗎?



替網站加上SSL的方式有很多種,除了讓Web應用程式本身就使用HTTPS進行傳輸之外,也可以給Nginx或Apache等網站伺服器程式指定SSL憑證,使它們能夠使用HTTPS協定。或者如果您有用Cloudflare等CDN服務的話,也可以使用他們的SSL功能,讓網站能夠躲在SSL的背後運行。

但是,HTTPS協定的設定其實不是加上SSL憑證,然後把HTTP改成HTTPS就好了,還有很多細節要處理,比如要使用的SSL/TLS版本、允許的加密演算法、是否要使用HTTP嚴格傳輸安全(HTTP Strict Transport Security, HSTS)機制、是否有使用自訂的dhparam(Diffie-Hellman Parameter)等等。

SSL Server Test

「SSL Server Test」是「Qualys SSL Labs」這個網站提供的一個免費線上服務項目,可以分析一個網站的SSL的設定是否正確以及存在的弱點,最後會替這個網站的SSL各項安全性評分,並以打上一個平均等第成績,最高為「A+」。成績有到「A」以上基本都算是沒什麼問題的網站。

ssl-server-test

SSL Server Test的使用方式很簡單,只要填入想要評分的網站網址或是網域名稱即可。例如填上本站網域「magiclen.org」,在經過一段時間的分析之後,可以得到「A+」的結果。

ssl-server-test

除了能看成績之外,SSL Server Test在結果的頁面也詳細地列出了網站的SSL相關設定值,並會標出有風險的項目。

ssl-server-test

ssl-server-test

如何才能達到A+?HTTP嚴格傳輸安全是什麼?

大部份能讓網站支援HTTPS協定的工具,不用做額外設定就可以讓成績達到「B」以上,但通常會卡在「A」,這多半是由於沒有啟用HTTP嚴格傳輸安全(HSTS)機制的關係。當一個網站啟動HSTS機制後,網頁瀏覽器就會強制使用HTTPS協定與該網站進行連線,就不會有不小心使用到HTTP協定的問題。

啟動HSTS機制的方式很簡單,只要替HTTP資料加入「Strict-Transport-Security」標頭來設定即可。例如將「Strict-Transport-Security」標頭設定為以下的值:

max-age=31536000; includeSubDomains; preload

如此一來,一旦網頁瀏覽器讀取到網站有回應這個標頭,網頁瀏覽器就會在31536000秒(365天)內,強制使用HTTPS協定來瀏覽該網站,以及所有其子網域的網站(「includeSubDomains」設定值)。而「preload」設定值是要讓強制使用HTTPS協定的設定給記錄到Google的HSTS preload清單中,有點像是SSL的CA憑證,會直接內建在網頁瀏覽器中。如果要查詢網站有沒有被收錄到HSTS preload清單中,可以利用以下這個網站:

輸入要查詢的網站網址或是網域名稱即可。

ssl-server-test