WordPress / 多重架站三:設定 SSL 加密連線 (以 Apache 為例)

WordPress / 多重架站三:設定 SSL 加密連線 (以 Apache 為例)

設定完各網站的網址之後,接著就要來設定 SSL 連線。他的設定方式與單一 WordPress 的設定方式幾乎相同,關於 SSL 的詳細說明可以參考 WordPress / 架站教學五:設定 SSL 加密連線,讓網站連線更安全 (以Apache為例) ,本篇就不再多做說明。

申請 SSL 憑證

本篇教學是用免費的 Let’s Encrypt 申請 SSL 憑證。

▍安裝 Lego Client

cd /tmp
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 安裝檔,放在 /tmp 當中。
並以 ls 指令確認下載回來的版本,像我下載的是 lego_v3.0.2_linux_amd64.tar.gz。

tar xf lego_vX.Y.Z_linux_amd64.tar.gz
sudo mkdir -p /opt/bitnami/letsencrypt
sudo mv lego /opt/bitnami/letsencrypt/lego

記得把 X.Y.Z 換成你所下載的版本、解壓縮,建立資料夾並將 Lego 移過去。

▍停用 Apache server

sudo /opt/bitnami/ctlscript.sh stop apache

▍產生密鑰並向 Let’s Encrypt 申請憑證

sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --domains="www.DOMAIN" --path="/opt/bitnami/letsencrypt" run

EMAIL-ADDRESS 改成你的 email。將 DOMAIN 改成你要申請的網址,可以同時申請多個 domains,以--domains="DOMAIN" 作為參數放進去即可。Lego 會產生 SAN (Subject Alternate Names) 多網域憑證,也就是一張憑證內含多個網域名稱,多網域憑證也方便我們同時管理多個網址。

執行指令 → 同意使用規章 (Y),憑證就會自動生成啦!
生成的憑證,預設會儲存在這個位置:

/opt/bitnami/letsencrypt/certificates

裡面包含了憑證 (.crt)、密鑰 (.key) 及憑證資訊 (.isser.crt, .json),檔名都是你的第一個 domain name。

wp-tutorial-5-1-generate-ssl-certificate

設定 Apache 參數

為了方便管理,我們直接採用 Bitnami 的建議使用 SAN (Subject Alternate Names) 多網域憑證,也就是所有網址都包含在一個憑證裡面,然後所有的網站都指向同一個憑證,這樣可以方便後續管理網站和更新憑證。

在 Bitnami 的預設,憑證位置分別是 /opt/bitnami/apache2/conf/server.crt/opt/bitnami/apache2/conf/server.key 這兩個檔案。而 Lego 產生的憑證則是位在 /opt/bitnami/letsencrypt/certificates/DOMAIN.crt/opt/bitnami/letsencrypt/certificates/DOMAIN.key 這兩個位子。

▍所以我們必須分別將前面的 server.crt 和 server.key 鏈結到真正的憑證

輸入以下指令:

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*

▍開啟並強制使用 SSL 連線

檢查一下每一個 WordPress 的參數檔,將 SSLEngine 設定為 on,也把 SSLCertificateFileSSLCertificateKeyFile 的註解拿掉 (啟用它)。

  • Apache 參數:
sudo nano /opt/bitnami/apache2/conf/bitnami/bitnami.conf
  • WordPress 參數:
sudo nano /opt/bitnami/wordpress/conf/httpd-vhosts.conf

▍強制使用 https 連線

為了強制使用 SSL 連線,也必須把 http 連線強制轉址到 https。同樣檢查 Apache 和 WordPress 的參數檔,在 port 80 裡面加入下列 redirect 參數:

  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} !^(localhost|127.0.0.1)
  RewriteCond %{REQUEST_URI} !^/\.well-known
  RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]

以後只要有人使用 http 連線過來,就會被強制轉址 (redirect) 到 https 的網址去囉!

wp-tutorial-5-3-redirect

▍最後記得要重新啟動 Aapche server

sudo /opt/bitnami/ctlscript.sh start apache

自動更新憑證設定,使用 crontab 排程

Let’s Encrypt 的憑證只有 90 天的效期,但每三個月都要重新申請一次憑證也真的是挺累人的。好在我們可以利用 Linux 本身的自動排程功能幫我們定期的更新憑證,把更新憑證的指令都寫在一個 script 當中,定期的執行一次這個腳本。

▍建立更新憑證的腳本

假設我們要把腳本存放在 /opt/bitnami/letsencrypt/scripts/renew-certificate.sh

sudo nano /opt/bitnami/letsencrypt/scripts/renew-certificate.sh

並且將更新憑證的指令依照步驟放進腳本中:

#!/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

記得換成自己的 email 和 domain name。

wp-tutorial-5-3-crontab

▍將腳本權限設定為可執行

chmod +x /opt/bitnami/letsencrypt/scripts/renew-certificate.sh

▍設定 Crontab 自動排程

Crontab 可以設定 Linux 的自動排程,定期的執行指令。首先開啟 Crontab:

sudo crontab -e

在 Crontab 中加入這一行指令:

0 0 1 * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 1>> /opt/bitnami/letsencrypt/logs/renew-log 2>> /opt/bitnami/letsencrypt/logs/renew-error

儲存檔案,憑證更新就會自動加入例行性排成當中啦!

 

WordPress 網站架設與搬家教學系列

WordPress 快速架站教學 (濃縮版):
在 Google Cloud (GCP) 台灣主機上免費架設 WordPress Bitnami

WP 架站教學一:使用 Google 台灣主機免費架設自己的網站 (Mac/Win版)
WP 架站教學二:透過 SSH 連線遠端控制 GCP 並設定 FTP 伺服器 (使用 WordPress Bitnami)
WP 架站教學三:更改 MySQL Administrator 密碼、設定外部靜態 IP 位址
WP 架站教學四:設定 Domain Name 及 Apache 參數
WP 架站教學五:設定 SSL 加密連線,讓網站連線更安全 (以Apache為例)
WP 架站教學六:WordPress 檔案及目錄的結構簡介與預設檔案權限
WP 架站教學七:修改網站外觀樣式,如何建立子主題 (child theme)
WP 多重架站一:如何在同一個伺服器架設第二個 WordPress (Multiple WordPress)
WP 多重架站二:設定 Domain Name,指定多個 WordPress 的網址 (使用subdomain)
WP 多重架站三:設定 SSL 加密連線 (以 Apache 為例)
WP 搬家教學:一個按鍵幫網站搬家,使用 All-in-One Migration

WordPress / 網站架設與搬家教學系列簡介及目錄
https://note.charlestw.com/wordpress-tutorial-category/