網站明明有SSL了,為什麼有時候還是連不上?是不是有遇過類似的問題呢?

前言

前一章節我們提到HTTPHTTPS兩者的差異,HTTPS在連線溝通時增加了安全性(Secure),也就是增加了SSL憑證,但通常開啟一個網頁時,有可能採用的是HTTP傳輸,不一定會強制使用HTTPS,此時瀏覽器就有可能會出現「您的連線不是私人連線」或者「此網站的安全性憑證有問題」等頁面,所以當我們新建一個網頁或網站後,就會希望網站的連線可以穩定以及安全。

HTTP強制安全傳輸技術(HSTS)

HSTS技術就是讓瀏覽器瀏覽網站時,強制使用HTTPS進行連線傳輸,因為HTTPS有SSL的關係,所以可以減少Client和Server連線時被攻擊的可能性,增加網站傳輸的安全性,而當網站開啟HSTS之後,瀏覽器在收到一個HTTP網站的載入請求時,就會自動轉換成HTTPS的方式載入,即使後來SSL失效,導致HTTPS無法使用,使用者也無法繼續瀏覽。

開啟HSTS的前置作業

1. 安裝SSL
安裝好的SSL可以透過瀏覽器的網址列觀看,前面會有一個鎖頭符號,點擊即可觀看網站的SSL憑證狀態,包含簽發者及到期日,至於如何安裝SSL的部分,可以參考前一章節。

2. 確定網站可以以HTTPS進行瀏覽

這邊以我瘋的官網當範例,在WordPress的後台中設定HTTP轉址為HTTPS,此時,就可以打開瀏覽器,並在網址列輸入https://www.wowfuncode.com/,如果可以連線成功,就表示網站可以透過HTTPS進行傳輸。

3. 沒有混合內容(mixed content)問題

一個含有HTTP明文內容的HTTPS頁面稱為混合內容(mixed content)。簡言之,就是一個HTTPS的網站內容裡,有使用HTTP作為傳輸的內容。(其他的資訊可以參考:https://developer.mozilla.org/zh-TW/docs/Web/Security/Mixed_content)

開啟HSTS

這邊以我瘋的官網作範例,使用WordPress Plugin的套件HSTS Ready進行HSTS的設定,套件建議安裝方式有兩種:

  1. Upload the plugin files to the /wp-content/plugins/ directory, or install the plugin through the WordPress plugins screen directly.
  2. Activate the plugin through the ‘Plugins’ screen in WordPress.

可設定的參數為HSTS的期限,以及是否包含子網域。

開啟HSTS後,如何檢測網站是否有正確運行HSTS?

當我們進入一個網站時,可以按「F12」或者滑鼠右鍵選單點擊「檢查」,就可以開啟開發人員工具,這時候點選上面選單「Network」,重新整理網頁後,這時候我們來看看網站的Headers,在Response Headers裡面有沒有strict-transport-security的標頭。

strict-transport-security的形式通常為以下幾種:

Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload

其中

max-age=<expire-time>

表示以秒計算的時間,告知瀏覽器應該保持強制HTTPS存取的時間有多長。

includeSubDomains

若該標頭被聲明,則瀏覽器應該將強制使用HTTPS的狀態套用至該域名的所有子域。

preload

參考 Preloading Strict Transport Security。 此非規範的一部份。
(詳細資訊可以參考:https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Headers/Strict-Transport-Security)

而以我瘋網站為例,Header有宣告max-age及includeSubDomains,所以在瀏覽我們網站的子網域時,也都會透過HTTPS的方式進行傳輸。

這樣就完美了嗎?

其實在架站初期,我瘋的官網其實已經設定好HSTS的前置作業,後續也開啟了HSTS,但有時連線時還是會不穩定,偶爾會出現了「您的連線不是私人連線」頁面,一個網站的網址有HTTP、HTTPS及Domain的部分,在設置完確認HTTP及HTTPS沒問題後(WordPress端),就可以看看是不是Domain的問題,有時候還需要Domain供應商的設定才能完成整體的HTST,使用HTTPS除了較安全外,以GOOGLE的搜尋演算來說,也會考慮到網站是否使用HTTPS傳輸方式,所以如果想要提高網站曝光度,HTTPS及HSTS也會是重要的課題。