[GCloud] 在 Bitnami WordPress 網站上啟用 HTTPS
一開始在 Google Cloud Platform 上架設 Bitnami WordPress 網站時,
雖然有同時勾選 HTTP/HTTPS 支援,
但其實那只是讓防火牆允許 HTTP/HTTPS 的連線,
但如果實際去連像 https://ephrain.net 的話,
當時是會出現 Not Secure 的訊息的…
這是因為 Bitnami 預設放了一組 SSL 憑證 (certificate) 在網站上,
因此連到 https://ephrain.net 的時候,是使用這個憑證,
但其實這個憑證認的網址是 www.example.com,
跟 ephrain.net 對不起來,所以瀏覽器會認為這個憑證是無效的:
想要讓網站真正支援 HTTPS 的話,就得有自己的 SSL 憑證~
之前就知道有 Let’s Encrypt 這家公司提供免費的 SSL 憑證,
但是得自已使用 shell command 操作,才得取得憑證。
後來又看到 SSL For Free 這個網站,它把 shell command 的操作隱藏起來,
只要在網站上輸入些資料,它就能自動去 Let’s Encrypt 幫我們把憑證產生出來,
方便許多,因此今天就來用它,讓我們的 WordPress 網站支援 HTTPS 吧~
1. 取得 SSL 憑證
到 SSL For Free 網站上,輸入自己網站的網址,
像我輸入的是本部落格的網址 ephrain.net,
再按下 Create Free SSL Certificate:
(2017/09/01 註:這邊也可以輸入多筆網址,
像我後來的網址改成 ephrain.net,同時又多了一個網站 travel.ephrain.net,
就可以同時輸入 ephrain.net travel.ephrain.net,
多筆網站用空白隔開就行了~
聽說明天一月之後 Let’s Encrypt 會開放 wildcard certificate,
之後就可以用像 ephrain.net *.ephrain.net 這種格式了)
接下來要驗證我們確實是這個網站的擁有者,
不然阿貓阿狗都可以來申請我們網站的憑證的話,就天下大亂了~
有幾種驗證方式可以選擇,我選擇的是 Manual Verification,
就是自己放指定的檔案到網站上,
代表自己是網站擁有者,才能做這件事:
按下 Manually Verify Domain:
接著點下 Download File #1 的連結,會下載一個隨機檔案,
我們會需要將這個檔案放到網站上:
舉例來說,我下載下來的檔名是 ChLFVVTMUCym43RW5dTzUxNUTtkvKikYa0jLYueu1ZU,
這個檔案需要被上傳到網站下的 .well-known/acme-challenge 目錄下。
這個動作可以用 gcloud scp 指令完成,不過我那時候還沒裝好 gcloud,
所以是直接透過 Google Cloud Platform 網頁,用網頁版的 SSH 進去 VM 裡面。
先在 ~/apps/wordpress/htdocs 目錄下,建立 .well-known/acme-challenge 目錄:
testuser@wordpress-ephrain-vm:~/apps/wordpress/htdocs$ sudo mkdir -p .well-known/acme-challenge
接著用 vi 建立 ChLFVVTMUCym43RW5dTzUxNUTtkvKikYa0jLYueu1ZU 這個檔案,
檔案的內容我是直接複製貼上:
testuser@wordpress-ephrain-vm:~/apps/wordpress/htdocs$ sudo vi .well-known/acme-challenge/ChLFVVTMUCym43RW5dTzUxNUTtkvKikYa0jLYueu1ZU
建立好之後,用 cat 確認一下內容和我下載下來的檔案內容一致:
testuser@wordpress-ephrain-vm:~/apps/wordpress/htdocs$ cat .well-known/acme-challenge/ChLFVVTMUCym43RW5dTzUxNUTtkvKikYa0jLYueu1ZU ChLFVVTMUCym43RW5dTzUxNUTtkvKikYa0jLYueu1ZU.dDddWtd2ohxASRSvUutlZCVBZ7Tc7-6utwkHD1b12Dg
這邊要注意的是每次下載下來的檔名和內容都不同,
所以要依據自己下載下來的檔案,修改上面操作的指令~
檔案放好之後,點下 SSL For Free 網站上提供的檔案驗證連結,確認檔案放置正確。
確認沒問題之後,就可以點下 Download SSL Certificate 按鈕了,
若是一切正常,就可以看到憑證建立成功的畫面:
由於 Let’s Encrypt 提供的憑證只有 3 個月的效期,
因此 SSL For Free 網站很貼心的提供憑證到期提醒的功能,
只要在 Get Notified of Expiration 區,
輸入 Email 和密碼來註冊一個帳號,就可以在到期前一星期收到通知:
下面可以找到 Download All SLL Certificate Files 的按鈕,
按下它下載我們網站的憑證與私鑰:
下載下來的是一個 sslforfree.zip,裡面包含了三個檔案:
- certificate.crt:這是網站的公開憑證
- private.key:這是憑證的私鑰,要好好保存不能公開
- ca_bundle.crt:這是發行憑證的 CA chain 的公開憑證
如果把 certificate.crt 打開來看,可以看到這個憑證是給 ephrain.net 用的,
對比之前 Bitnami 網站上預設的憑證是給 www.example.com 用的:
2. 將 Bitnami WordPress 網站上加上 SSL 憑證
接下來要做的,就是將原本 Bitnami 上預設的憑證,
替換成我們剛申請好的正確憑證~
我們可以使用 gcloud 指令來操作 (安裝 gcloud 可參考這篇)~
首先先將 sslforfree.zip 解開,將解開的檔案名稱改成 Bitnami 上使用的名稱:
mv certificate.crt server.crt mv private.key server.key mv ca_bundle.crt server-ca.crt
接著將這些檔案用 gcloud scp 傳到 ~/ 目錄下
(請將 wordpress-ephrain-vm 換成你的 VM 的名稱):
gcloud compute scp server.crt server.key server-ca.crt wordpress-multisite-1-vm:~/
接著用 gcloud compute ssh <VM 名稱> 連上 VM,
先將舊的 SSL 憑證都先改名字,以防操作錯誤時,還能回復舊的:
cd /opt/bitnami/apache2/conf sudo mv server.crt server.crt_ori sudo mv server.key server.key_ori sudo mv server-ca.crt server-ca.crt_ori
接著將剛剛傳上來的新的憑證檔,移到 /opt/bitnami/apache2/conf 目錄下:
sudo mv ~/server* ./
用 sudo vi 編輯一下 /opt/bitnami/apache2/conf/bitnami/bitnami.conf,
裡面原本就有 SSLCertificateFile 和 SSLCertificateKeyFile,
但我們得把 SSLCACertificateFile 的設定也加上去:
SSLCertificateFile "/opt/bitnami/apache2/conf/server.crt" SSLCertificateKeyFile "/opt/bitnami/apache2/conf/server.key" SSLCACertificateFile "/opt/bitnami/apache2/conf/server-ca.crt"
儲存好之後,重新啟動 Apache 服務:
sudo /opt/bitnami/ctlscript.sh restart
3. 驗證網站的 SSL 憑證
用瀏覽器打開 https://<網站網址>,像我的是 https://ephrain.net,
可以發現網址列上,有出現 Secure 的圖示:
點開來看的話,可以確認這是 Let’s Encrypt 發給 ephrain.net 的憑證:
以上,就已經將 SSL 憑證成功套用在網站上了,
不過這還只是可以讓使用者用 https://<網址> 的方式連進來,
之後再來研究一下讓 http://<網址> 自動跳轉到 HTTPS 網站的方法吧~
參考資料:
Bitnami: How To Enable HTTPS Support With SSL Certificates?
SSL For Free 免費 SSL 憑證申請,使用 Let’s Encrypt 最簡單方法教學!
Google Cloud Platform: Transferring Files to Instances