使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

這篇文章在我的待辦清單之中已經堆積已久,遲遲沒寫出來。

想當初我玩架站的時候,就是在 Google Cloud 上面開 Bitnami WordPress,後來朋友請我幫忙架設網站,用的也是這套。一直到最近,又有位朋友需要幫忙,索性就把以前的筆記,連同在 Gandi 上用使用 SSL 憑證的方式記錄下來,希望能幫助到有架站需求的朋友們。

在這篇文章中,我將會分享:

  1. 如何在 Gandi 購買 SSL 憑證
  2. 如何在 Linux 環境中使用 OpenSSL 產生 CSR 憑證請求檔
  3. 如何將憑證放入 Google Cloud 上面的 Bitnami WordPress 並啟用 HTTPS

如果你沒有 Gandi 帳戶、或者是 WordPress 網站的話,請記得去註冊或安裝一下喔。


在 Gandi 購買 SSL 憑證

登入你的 Gandi 帳戶,進入 SSL 憑證區塊,點選右上角的「購買 」按鈕。

gandi ssl1 - 使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

只要是新購買的網域名稱,Gandi 都會送你一年份的「單一位址標準型 SSL 憑證」。所以在接下來的選項中,我們會選擇這個方案。以下是 Gandi 的說明:

若您在 Gandi 購買域名,或是將域名移轉至 Gandi,則我們會免費提供您為期一年的單一位址標準型 SSL 憑證。更多相關資訊,請參照 單一位址標準型 SSL 憑證:註冊新域名時所提供的首年免費憑證

由於我的 WordPress 安裝在 Google Cloud 上的主機,這邊就選擇「其他主機」

gandi ssl2 - 使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

憑證類型選擇「標準」 與「單一位址」,費用是 410 元。

如果你符合 Gandi 的免費優惠條件,在後面的步驟會發現金額變成 0 元免費。

gandi ssl3 - 使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

接著,我們要提供 CSR (Certificate Signing Request) 憑證請求檔。簡單的說就是要提供一些資訊來向 Gandi 申請 SSL 憑證,而這些資訊我們會透過 OpenSSL 來製作。

gandi ssl4 - 使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

使用 OpenSSL 產生 CSR 憑證請求檔

憑證請求檔產生的方式很簡單,Gandi 提供的教學網頁中也有詳細的說明,透過下方指令就可以完成囉。我是直接在 Linux 環境直接操作,如果你的環境沒有 Open SSL,建議下載安裝一下。

openssl req -nodes -newkey rsa:2048 -sha256 -keyout server.key -out server.csr
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []: 
  1. Country Name 是兩碼縮寫,台灣填寫 TW
  2. State Name 填寫 Taiwan
  3. Locality Name 填寫你所在的縣市名
  4. Organization Name、 Organizational Unit Name 填寫你所在的組織機構名稱
  5. Common Name 填寫你的憑證名稱。因為我們是伺服器憑證,所以直接填寫我們的網域名稱 (domain.com)
  6. E-mail Address 連寫聯絡用的 E-mail
  7. 後面兩個選項就看你要不要填,我是直接留空白

製作好 CSR 檔案後,請把檔案內容貼到網頁上,「簽署名稱 (CN)」應該要是你的網域名稱。如果不是的話,請檢查剛剛填寫 Common Name 的時候,是不是有打錯。

因為網域與憑證都是在 Gandi 上購買的,驗證程序會自動開始,大概等個幾分鐘就好了。Gandi 會自動幫我們透過 DNS 的方式來驗證網域所有權。

gandi ssl5 - 使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

接著我們來到購物車,發現購買 1 年的金額確實是 0 元。

gandi ssl6 - 使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

完成付款後,請等待 SSL 憑證認可並核發。

gandi ssl7 - 使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

憑證核發完成後,請進入你的憑證頁面下載「CRT 憑證檔」以及「Gandi 中繼憑證 」,這兩個檔案待會會用到。

gandi ssl8 - 使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

安裝憑證

憑證的安裝很簡單,換個檔案改設定就可以了。由於我是透過 SSH 連接 Google Cloud 上面的 Instance,可以直接過內建的上傳功能傳檔案到遠端的伺服器。

gandi ssl9 - 使用 Gandi 附贈的免費 SSL 憑證,並在 Bitnami WordPress 設定啟用 Https

我們需要準備三個檔案,分別如下:

  1. server.key (產生 CSR 檔案一同生成的 private key)
  2. domain.com.crt (Gandi 簽署過的憑證檔,剛下載下來的檔案)
  3. GandiStandardSSLCA2.pem (Gandi 中繼憑證, 剛下載下來的檔案)

請把他們放到 apache 的 conf 資料夾之下

/opt/bitnami/apache2/conf

接著我們要來編輯 Apache 設定檔,透過 vim 打開這個檔案。

sudo vim /opt/bitnami/apache2/conf/bitnami/bitnami.conf

設定檔中原本就有 SSLCertificateFile 和 SSLCertificateKeyFile 這兩個設定值,我們還需要再加上 SLCACertificateFile 來描述中繼檔案的位置。請注意一下檔案名稱是對的喔,不要直接複製貼上填錯了。

SSLCertificateFile "/opt/bitnami/apache2/conf/domain.com.crt"
SSLCertificateKeyFile "/opt/bitnami/apache2/conf/server.key"
SSLCACertificateFile "/opt/bitnami/apache2/conf/GandiStandardSSLCA2.pem"

接著透過以下指令重啟 Apache 就大功告成囉!你的網站就可以透過 HTTPS 開啟了。

sudo /opt/bitnami/ctlscript.sh restart

疑難排解

如果遇到問題的話,可以查看 apache 的 log

tail -n 100 /opt/bitnami/apache2/logs/error_log

你或許會看到這樣的錯誤訊息,這看起來就是憑證檔案放錯

AH00016: Configuration Failed
[Sun Jan 05 09:34:59.100228 2020] [ssl:emerg] [pid 6107:tid 140195592560256] AH02562: Failed to configure certificate localhost:443:0 (with chain), check /opt/bitnami/apache2/conf/server.crt
[Sun Jan 05 09:34:59.100285 2020] [ssl:emerg] [pid 6107:tid 140195592560256] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: TRUSTED CERTIFICATE) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
[Sun Jan 05 09:34:59.100315 2020] [ssl:emerg] [pid 6107:tid 140195592560256] SSL Library Error: error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib
Jerry
Jerry

樂於分享的軟體工程師,曾在新創與大型科技公司實習,獲得黑客松競賽冠軍,擔任資安研討會講者。長期熱衷於資訊安全、雲端服務、網路行銷等領域,希望將科技知識分享給更多人。內容轉載請來信:jlee58tw@gmail.com

發表回應