在建立了WordPress之後,也設定了DNS網域名稱對應,但這樣還沒完成。我們還需要將你的網站設定為 HTTPS 。這篇文章使用的是單一網域的設定方式,如果你同時有多個網域則不適用於這個方式。
開始這篇文章的操作之前,請確認你是使用Bitnami安裝WordPress並已經申請網址名稱以及設定DNS對應。
建立你的WordPress網站,可以參考這一篇如何用Google Cloud架設WordPress建置你的第一個網站。
設定DNS網域名稱對應,可以參考這一篇使用NameCheap的網域名稱設定DNS對應(使用GCP主機)。
HTTPS 是什麼?
HTTPS全名為Hypertext Transfer Protocol Secure(超文本傳輸協議安全), 也稱為HTTP over TLS、HTTP over SSL或HTTP Secure。用意是在為網站(Servers)與瀏覽者(Clients)建立一個安全的傳輸通道,讓他們之間的傳輸資料保證安全性避免被監聽或串改。
簡單的說,就是避免當網站與瀏覽者雙方溝通的資料被竊取,建立一個安全機制。
那麼,既然HTTPS的網站可以保護瀏覽者與該網站的安全通道。身為一個網站管理者,把你的網站設定為HTTPS模式就非常的重要。
除此之外呢? 還有這些理由你應該為你的網站設定HTTPS機制
1. 讓網頁瀏覽器信任你
有很多的瀏覽器當訪客要造訪沒有安全加密的網站時候,會對於使用者提出安全性警告。或是當你進入網站後會出現這樣的資訊。

2.讓SEO效果更好
搜尋引擎會將網站是否有安全機制也作為一個排名的計算方式之一。
3.保護你的帳號密碼登入不被竊取
如前面所述,HTTPS保護你的資料不被竊取、串改。當網站沒有了安全通道,那麼你與主機間登入系統輸入的帳號密碼也有可能被攔截。
4.保護你的訪客私人資料不被竊取(如電話、email)
雖然你的網站可能沒有購物功能,或是金流功能。但應該至少會有讓訪客留下電子郵件或是電話的表單? 保護你的訪客就是保護你的網站信譽。
5.讓訪客更信任你的網站
有警覺的訪客也會挑選網站瀏覽,當訪客發現你的網站沒有安全機制願意停留的意願也自然大大的降低。
HTTPS是怎樣保護傳輸資料的?
剛剛提到保護網站與瀏覽者的安全通道,就是將你們之間傳輸的內容(報文)進行加密。
加密方式可以大分為兩種: 1. 對稱式加密傳輸 2. 非對稱式加密傳輸。對稱式加密方式是傳輸者與接收者都使用同一把金鑰,非對稱式加密則是所有使用者都有一對公鑰及密鑰。而SSL就是非對稱式加密的一種。他們運作方式就是將公鑰先提供給對方,當要傳送資料前先以對方的公鑰進行加密,而接受方使用自己的密鑰解析資料。這樣可以保障即使文件被竊取或公鑰被竊取也無法解密傳輸資料,因為只有密鑰可以做解密動作。
在Bitnami中建立SSL的公鑰與密鑰
要取得SSL的公鑰與密鑰會需要一個憑證簽發單位,憑證簽發有免費及付費兩種。本篇使用Bitnami推薦使用的免費簽發單位為Let’s Encrypt。有關Let’s Encrypt更多說明可以參考官網。
在開始之前,需要確保以下幾點:
- 你的網站IP位置可以被搜尋到
- 你已經設定好你的網域名稱
在以下操作步驟又區分了你是屬於哪一種方式部屬你的應用程式,你可以透過Bitnami的指令來了解你的模式。
透過Bitnami控制台進入你的SSL控制台,輸入以下指令Enter
test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A: Using system packages." || echo "Approach B: Self-contained installation."
你會看到輸出的結果,我的是Approach A

結果只會有兩種,Approach A 或是 Approach B。
其實還有簡單的確認方式,查看你的網址目前是透過http://domainname/就可以查看 或是 需要網域後面再多輸入一個類似Project的名稱 (如: https://www.angelspace.ai/project)
只要是可以直接透過網域名稱就存取,則是Approach A,否則就是Approach B。
那麼接下來我們就可以開始來設定了
第一步、安裝Lego Client程式
Lego是提供讓我們設定Let’s Encrypt的程式,一樣於SSH控制台操作。逐一輸入以下的指令Enter
到/tem目錄下
cd /tmp
取得lego最新的程式打包檔
curl -Ls https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i -
我的檔名是lego_v4.4.0_linux_amd64.tar.gz

解壓縮你剛剛下載的檔案 (我的名稱為lego_v4.4.0_linux_amd64.tar.gz,由於版本可能不同這裡請確認你的檔名)
tar xf lego_v4.4.0_linux_amd64.tar.gz
建立檔案資料夾/opt/bitnami/letsencrypt
sudo mkdir -p /opt/bitnami/letsencrypt
將解壓縮的lego移到/opt/bitnami/letsencrypt目錄下
sudo mv lego /opt/bitnami/letsencrypt/lego
第二步、產生Let’s Encrypt證書
將Bitnami服務關閉
sudo /opt/bitnami/ctlscript.sh stop
建立憑證,需要替換EMAIL-ADDRESS為你的信箱,替換DOMAIN為你的網域名稱。
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --domains="www.DOMAIN" --path="/opt/bitnami/letsencrypt" run
以我的網站為例,則為
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="angelspace.ai" --domains="www.angelspace.ai" --path="/opt/bitnami/letsencrypt" run
他會請求你同意使用條款
Do you accept the TOS? Y/n
請輸入Y,按Enter
這時你的憑證就產生到/opt/bitnami/letsencrypt/certificates目錄下了
第三步、設定主機(Server)使用HTTPS
我們建立了SSL憑證,接著還需要設定主機使用HTTPS服務
還記得剛剛前面確認你是屬於Approach A或是Approach B嗎? 如果忘記了請回到上面步驟確認
以下步驟需要依照你的部屬模式以及你的主機類別輸入不同指令。請確認你的主機是Apache或是NGINX。
如果不確認你的主機服務請輸入以下指令確認
sudo /opt/bitnami/ctlscript.sh status

以下是Apache主機的Approach A安裝模式
sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.key /opt/bitnami/apache2/conf/bitnami/certs/server.key.old
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/apache2/conf/bitnami/certs/server.key
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt
sudo chown root:root /opt/bitnami/apache2/conf/bitnami/certs/server*
sudo chmod 600 /opt/bitnami/apache2/conf/bitnami/certs/server*
以下是Apache主機的Approach B安裝模式
sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old
sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.old
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/apache2/conf/server.key
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/apache2/conf/server.crt
sudo chown root:root /opt/bitnami/apache2/conf/server*
sudo chmod 600 /opt/bitnami/apache2/conf/server*
以下是NGINX主機的Approach A安裝模式 (如果你是參考我的文章安裝網站,則使用以下指令)
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.key /opt/bitnami/nginx/conf/bitnami/certs/server.key.old
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.csr /opt/bitnami/nginx/conf/bitnami/certs/server.csr.old
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/nginx/conf/bitnami/certs/server.key
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt
sudo chown root:root /opt/bitnami/nginx/conf/bitnami/certs/server*
sudo chmod 600 /opt/bitnami/nginx/conf/bitnami/certs/server*
以下是NGINX主機的Approach B安裝模式
sudo mv /opt/bitnami/nginx/conf/server.crt /opt/bitnami/nginx/conf/server.crt.old
sudo mv /opt/bitnami/nginx/conf/server.key /opt/bitnami/nginx/conf/server.key.old
sudo mv /opt/bitnami/nginx/conf/server.csr /opt/bitnami/nginx/conf/server.csr.old
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/nginx/conf/server.key
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/nginx/conf/server.crt
sudo chown root:root /opt/bitnami/nginx/conf/server*
sudo chmod 600 /opt/bitnami/nginx/conf/server*
然後就可以使用你的主機服務了
sudo /opt/bitnami/ctlscript.sh start
接著可以到網址輸入你的https的網域名稱驗證是否已經安裝成功。
這裡特別提醒,由於Let’s Encrypt是免費的憑證簽發,所以他只有發給90天有效期的憑證。請跟著以下步驟來將重新簽發憑證的動作自動化。
第四步、設定重新簽發憑證
為了避免Let’s Encrypt簽發的憑證過期忘了重新申請,我們可以寫一個shell檔案來讓他自動執行。
建立shell檔案
sudo mkdir -p /opt/bitnami/letsencrypt/scripts
sudo nano /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
NGINX主機> 於編輯器中輸入以下指令並存檔 (請記得修改成為你的EMAIL以及DOMAIN)
如果你是參考我的文章進行安裝,則適用於以下指令
#!/bin/bash
sudo /opt/bitnami/ctlscript.sh stop nginx
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start nginx
Apache主機> 於編輯器中輸入以下指令並存檔(請記得修改成為你的EMAIL以及DOMAIN)
#!/bin/bash
sudo /opt/bitnami/ctlscript.sh stop apache
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start apache
修改shell檔案權限用以被crontab執行
sudo chmod +x /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
設定定時排程執行這個shell檔案
sudo crontab -e
於檔案中輸入以下指令並存檔
0 0 1 * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null
這樣就成功設定了自動重新申請憑證了,如果你擔心失敗可以將上面的指令做微調。改為1天執行一次,隔天去看你的憑證檔案是否日期往後延了一天就知道是否該機制是可正常的。
以下步驟指令不一定要執行,這是讓你驗證是否有生效的方式。執行後,等24小時候到瀏覽器輸入你的網址,點選瀏覽器上的鑰匙去查看你的憑證資料
0 0 * * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null
以下示範測試步驟1 (因為我要做DEMO所以排程時間不一樣,你們可以依照上面指令輸入)

接著等時間到之後,到瀏覽器點選鑰匙查看你的憑證資訊

這裡會顯示你的憑證開始與結束日期,確認這檔案產生是否最新。

確認完成後,我們要將排程時間改回來。這時只需要再輸入一樣的指令並存檔
sudo crontab -e
0 0 1 * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null
之後將會針對多網域環境另外做說明。
