Yungen's blog

traefik & let’s encrypt

前言

在上一篇文章中介紹如何設置 reverse proxy ,這篇將會介紹如何使用 let’s encrypt 讓 traefik 支援 HTTPS 連線。

簡單介紹 let’s encrypt

let’s encrypt 是個憑證頒發機構,與其他憑證頒發機構不同的是 let’s encrypt 提供免費的憑證,只要客戶端達成某些條件,向 let’s encrypt 證明其擁有某個網域名時,let’s encrypt 就會免費提供數位憑證給客戶端。

traefik & let’s encrypt

traefik 本身支援使用最常見的 TLS 憑證,也支援透過 ACME 的方式向支援 ACME 頒發憑證的機構自動獲取數位憑證(此範例使用 let’s encrypt)。此外,let’s encrypt 所頒發的數位憑證有有效期限,traefik 會在到期時自動更新數位憑證。

let’s encrypt 運作機制

在申請憑證時,最重要的步驟就是向 let’s encrypt 證明你擁有此網域。let’s encrypt 有提供三種方式:

  1. HTTP-01 考驗:let’s encrypt 會給客戶端一個 token ,客戶端要將 此 token 放在網頁伺服器 http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN> 中,let’s encrypt 之後就會向該網址發送請求,若 let’s encrypt 成功拿到 token 後就會認定此網域的確為客戶所擁有,並頒發數位憑證。
  2. DNS-01 考驗:let’s encrypt 會給客戶端一組字串 ,客戶端將此字串以 TXT 紀錄放在 DNS 中,接著 let’s encrypt 就會去查詢相對應的 DNS TXT 紀錄。若有成功查詢到 TXT 紀錄,就會認定此網域的確為客戶所擁有,並頒發數位憑證。
  3. TLS-ALPN-01 考驗:此方法較為少見,詳細可參考 官網

traefik 支援以上三種驗證方式,且會在快到期時自動更新憑證。接下來的範例中會使用 HTTPS-01 以及 DNS-01 考驗。

traefik 設定範例

以下文章將會接續上一篇文章,設置 whoami 以及 podinfo 使我們能透過 HTTPS 連線。

在開始教學前,請先確認你的環境滿足以下條件

準備步驟

traefik 是透過 ACME 的方式去獲取憑證,所以我們要事先準備好一個檔案存放這些憑證。

當我們設定好 HTTPS 後使用者會通過 port 443 與 traefik 連線,所以我們先在 docker-compose 中打開 port 443

別忘了新增一個 entrypoint

透過 HTTP-01 考驗

透過 DNS-01 考驗

透過 DNS-01 考驗申請憑證的好處就是 DNS-01 考驗支援 wild card 憑證,舉例來說如果我申請了 *.ainimal.io 的憑證,podinfo.ainimal.iowhoami.ainimal.io 就可以直接使用,不需要另外申請。

在設置前請先確認你的 DNS 機構是否在 支援名單中

若我們想要用到 DNS-01 考驗才有的功能 wild card 憑證就會需要修改 entrypoint 的 tls 設定,此處的 tls 設定為預設設定,若使用者在 router 中有自定義 tls 設定則會自動忽略此設定。

#Posts