幫網站掛上 HTTPS,使用 Certbot 向 Let's Encrypt 申請憑證

程式技術
•

在之前的一篇文章中,介紹了什麼是 HTTPS,相信大家會從中了解為什麼現今網站都建議掛上 HTTPS。

本篇文章要來介紹如何使用 Certbot 來向免費的憑證頒發機構 Let's Encrypt 申請憑證,並使用憑證幫自己的網站掛上 HTTPS。

在申請憑證前,必須先向域名註冊商 (例如 AWS Route53) 購買一個域名 (Domain)

安裝 Certbot

各系統的安裝方式可以參考官方文件,下方的安裝環境是 Ubuntu 20.04,Web Server 使用 Nginx。

官方建議使用 Canonical 的 snapcraft 來進行安裝。Ubuntu 通常都已預裝好 snapcraft (因為 Ubuntu 的爸爸就是 Canonical),可以使用下方的指令確保使用最新的 snapcraft 版本。

sudo snap install core && sudo snap refresh core

安裝 Certbot。

sudo snap install --classic certbot

設定軟連結讓 Certbot 指令可以執行。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

向 Let's Encrypt 申請憑證

首先我們先設定環境變數,將環境變數 DOMAIN 設定成你購買的網域。

DOMAIN=example.com

還有頂層網域的設定,例如 admin.example.com 或是 blog.example.com。

WILDCARD=*.$DOMAIN

設定完畢可以打印出來試試看。

echo $DOMAIN && echo $WILDCARD

啟動 Certbot,使用手動授權方法搭配 DNS 查問以驗證網域所有權,這會為您的頂層網域及其子網域請求萬用字元憑證。

sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly

上述指令中各個參數意思如下。

  • --manual:使用手動驗證。
  • --preferred-challenges dns:使用 dns 的方式 challenge。
  • certonly:只產生憑證,讓 Certbot 不要自動產生或修改 Nginx 的設定檔案。

接下來會有一連串的提示,過程中輸入您的電子郵件地址,這會用於續約和安全性注意事項,閱讀 Let's Encrypt 服務條款。如果您不同意,就無法取得 Let's Encrypt 憑證。

接下來 Certbot 會請你完成一個小測試,來驗證你持有網域的所有權。

2021_07_24_15_27_41_60fbc0ed3ea08.jpg
通過測驗證明 Domain 的擁有權

主要是請你在子域名中設定 DNS TXT record,那什麼是 TXT record?

簡單來說,以上面的圖片為例。

你需要在 _acme-challenge.example.com 這個子網域中,設定 S-RbwaZKpm… 與 moncVAcSp91… 這兩個 TXT record。

當你設定好 TXT record,Certbot 訪問 _acme-challenge.example.com 時就能取得上述兩個亂數字串,並確定這個網域的所有權在你身上。

TXT record 需要在域名註冊商那邊進行設定,設定完畢可以至 DNS Text lookup 網站,確認 DNS 是否已傳播。

2021_07_14_19_41_38_60eecd7241326.png
查詢 DNS TXT record 是否已傳播
2021_07_14_19_41_51_60eecd7f0c86b.png
傳播成功!

確認 DNS TXT record 已傳播之後,就可以完成 Certbot 的申請流程,並取得憑證。
申請的憑證會放在下方的路徑中。

/etc/letsencrypt/live/example.com/

接下來只要在 Nginx 中設定憑證,就可以順利的幫網站掛上 HTTPS。

ssl_certificate    /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key    /etc/letsencrypt/live/example.com/privkey.pem;

附註:如果 certbot 出現錯誤,會記錄在 /var/log/letsencrypt/letsencrypt.log。

自動更新憑證

向 Let's Encrypt 申請的憑證都只有三個月 (90 天) 的時效性,時間到了,憑證過期就需要重新申請新的憑證。

Certbot 可以很方便的自動幫你更新憑證。

可以使用下方的指令查看 Certbot 是否已經自動設定 cronjob 來檢查憑證是否過期。

systemctl list-timers

有的話在 UNIT 欄位上應該會出現。

snap.certbot.renew.timer

可以使用下方的指令測試憑證是否會自動更新。

sudo certbot renew --dry-run

參考資料

Allen
written by
Allen

持續努力中的後端打工仔,在下班後喜歡研究各種不同的技術。稍微擅長 PHP,並偶爾涉獵前端開發。個性就像動態語言般隨興,但渴望做事能像囉嗦的靜態語言那樣嚴謹。

則留言
顯示更多留言
新增留言
訪客 2026 年 10 月 16 日