Let's Encrypt Wildcard 申請流程

Let's Encrypt

Let's Encrypt 在去年 (2018) 年 3 月時宣佈了 ACMEv2 版本及子網域萬用字元的支援,這樣就不用對所有子網域申請各別的憑證,只要申請一個就可以了。

如果你不知道這是什麼,請參考我之前寫的HTTPS 連線,使用 Let's Encrypt

在申請 Wildcard 憑證之前,請先確認你的 Certbot 是最新版本 (不能低於 0.22.0 版):

certbot --version
# 顯示 certbot 0.31.0

如果你之前有申請過憑證,請先確認到期日:

certbot certificates
# 會列出所有憑證及到期日

注意!到期日必須少於 30 天才能再次申請。

取得 Wildcard 憑證

請輸入以下 shell 指令:
certbot certonly --manual --agree-tos \
-d "*.你的網域.com" \
-d 你的網域.com \
--email 你的電子郵件信箱 \
--preferred-challenges dns \
--manual-public-ip-logging-ok \
--server https://acme-v02.api.letsencrypt.org/directory \
  • --manual:手動安裝憑證。
  • --agree-to:同意 ACME 用戶協議,不指定的話會在執行時問你。
  • -d 接上要申請的網域:萬用字元(*)是給子網域用,父網域要單獨申請。
  • --email:接收到期通知的 email。
  • --preferred-challenges dns:使用 DNS 方式申請(Wildcard 只能用此方式)。
  • --manual-public-ip-logging-ok:自動接受「詢問是否記錄 IP」,不指定的話會在執行時問你。
  • --server:使用 Let's Encrypt ACME2 的伺服器 (必須使用 v2 伺服器)。

註:倒斜線是 shell 指令的換行符號,避免指令太長不容易閱讀。

執行後會得到一個網址及一段 hash code,它們是一對的,記得現在不要按到 Enter

_acme-challenge.你的網域.com
一段 hash code 

注意!有幾個 -d 就會有幾組 hash code,一次只會顯示一組。



接下來請到你的 DNS 上去增加 TXT 紀錄,名稱為 _acme-challenge,類型為 TXT,值為那段 hash code

_acme-challenge  TXT  它給的 hash code 

等一陣子 (可能少於一分鐘,也可能比這個久,看你的 DNS),確認 _acme-challenge 可以連上了才回到 certbot 按繼續,可以使用以下指令來確認:

dig TXT _acme-challenge.你的網域.com

註:dig是網域名稱指令,請確認有安裝,或用 nslookup

看到以下內容 (hash code 有出現) 就可以回去按 Enter

;; ANSWER SECTION:
_acme-challenge.你的網域.com. 1799 IN TXT 它給的 hash code 

如果你有多個 -d ,這時會出現第二組 hash code,請重覆以上動作,TXT 的名稱可以重覆。

當你按下最後一個 Enter 後就完成了,結果會顯示你的憑證被安裝在哪裡及到期日。記得把 DNS 上的 TXT 紀錄刪掉。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/你的網域.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/你的網域.com/privkey.pem
   Your cert will expire on 2019-05-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"

最後就是把它加到你的伺服器的 SSL 設定,這樣就完成了。

ssl_certificate /etc/letsencrypt/live/你的網域.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/你的網域.com/privkey.pem;

記得讓伺服器重新載入

nginx -s reload

下次到期時,可以使用以下指令來更新:

certbot renew

註:我也是第一次使用,不確定 renew 時需不需要重做一次 DNS 的驗證,如果需要,就必須重做一次上面的動作;如果不需要,可以直接加入排程器,定時更新。

刪除不要的憑證

如果你像我一樣,之前已經申請了好幾個子網域的憑證,現在這些都不需要了,可以將它們刪除。先來看看之前申請了哪些憑證:

ls /etc/letsencrypt/live

列出的目錄名稱即是等下要用到的 --cert-name 參數的值:

certbot delete --cert-name 子網域.網域.com

執行後就會刪除該子網域的所有資料;刪除指令執行的實際動作,其實只是去刪除 3 個目錄下的網域目錄,所以你也可以手動刪除:

rm -rf /etc/letsencrypt/archive/網域名稱/
rm -rf /etc/letsencrypt/live/網域名稱/
rm -rf /etc/letsencrypt/renewal/網域名稱.conf


本文網址:https://blog.tonycube.com/2019/02/lets-encrypt-wildcard.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。