fbpx

CloudFlare DNS 申請 Let’s Encrypt Wildcard SSL 憑證

佛系 Let’s Encrypt Wildcard SSL 憑證

以前我都用官方提供的 certbot 工具,後來也嘗試用 PHP 第三方 Library 整合了可以自動申請 Let’s Encrypt SSL 憑證的 Docker (ssl-proxy)。今年 2018 開始佛系 Let’s Encrypt 有提供 Wildcard SSL 憑證,但是目前只有透過 DNS 設定 Text Record 來驗證網域,每三個月都要重新驗證來換發新的憑證(renew),如果沒有自動化一點也不想嘗試。最近想要試用看看 Wildcard SSL,發現已經很多人實做了整合 CloudFlare 的驗證工具,官方的 certbot 也有 CloudFlare DNS Plugin 可以用。剛好我也是 CloudFlare 的使用者,只要可以自動化那就 OK 囉,我們來看看如何安裝吧。

安裝第三方工具 acme.sh

acme.sh 是一個第三方的 Let’s Encrypt 申請工具,我本來都是用官方提供的 certbot 工具。最近發現這個工具申請 Wildcard SSL 也不錯用,順便介紹給大家使用看看。直接線上安裝:

curl https://get.acme.sh | sh

由於 Let’s Encrypt Wildcard SSL 需要透過更改 DNS Text Record 來驗證網域所有權,因此我們先登入 CloudFlare 取得 API Key,好讓 acme.sh 可以自動更新 DNS 資訊來通過驗證。登入 CloudFlare 後險選擇右上角的 Profile,如下:

lets-encrypt-wildcard-profile

選擇 Global API Key 按下後面的「View」按鈕:

lets-encrypt-wildcard-api

接著輸入密碼:

lets-encrypt-wildcard-api-pwd

顯示個這一串就是 API Key,請非常小心保存,這組 Key 可以做什麼不要問,很恐怖。被惡意盜用會讓你作惡夢的.......

eat-hand

先複製起來後關閉,如下:

lets-encrypt-api-key

透過 acme.sh 申請 Wildcard SSL 憑證

先透過以下方式設定 acme.sh 驗證需要的 CloudFlare 登入 Email 與剛剛取得的 Key,有了這組 Key 你的 CloudFlare 上面管理的 DNS 都可以進行驗證,如下:

export CF_Key="YOUR_CLOUD_FLARE_API_KEY"
export CF_Email="YOUR_CLOUD_FLARE_LOGIN_EMAIL"

接著我們設定需要驗證的網域到變數中:

export DOMAIN=your-domain.com

我習慣憑證與官方 certbot 所產生的資料放在一起,所以先手動建立一下目錄:

mkdir -p /etc/letsencrypt/keys
mkdir -p /etc/letsencrypt/live/${DOMAIN}

然後就可以輸入以下命命開始申請了,整個驗證過程差不多兩分鐘多:

/root/.acme.sh/acme.sh --issue -d "${DOMAIN}" -d "*.${DOMAIN}" --dns dns_cf \
  --key-file /etc/letsencrypt/keys/${DOMAIN}.key \
  --cert-file /etc/letsencrypt/live/${DOMAIN}/cert.pem \
  --fullchain-file /etc/letsencrypt/live/${DOMAIN}/fullchain.pem \
  --ca-file /etc/letsencrypt/live/${DOMAIN}/chain.pem \
  --reloadcmd "service haproxy restart"

記得每三個月 cron 跑一下重新刷新憑證就好,刷新時候透過 --renew 即可,如下:

/root/.acme.sh/acme.sh --renew -d "${DOMAIN}" -d "*.${DOMAIN}" --dns dns_cf

上述 Script 也可以在 Blog 廢文 GitHub 取得,啊掰~