GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
字體大小: +
3 分鐘閱讀時間 (660 個字)

Traefik SSL Termination

ssl-termination-diagram

首先藉由 VMware 很漂亮的一張圖做為封面,帶入 SSL Termination 的觀念:不像傳統上把 SSL 憑證塞在 Web Server,而是用前面的反向代理或負載平衡處理上傳解密。再來就是以往在 Docker Compose 都是由 Nginx 擔任這角色,但現在 K3s 用得多,內定是 Traefik,硬換回 Nginx 似乎有點跟不上時代,所以這邊就想來探究一番如何更新。

在邀請 Nginx 或 Traefik 這類工具大展身手前,我們得先準備一個 Web Application,再拉我們的對象來當擋箭牌。如果是常見的 Linux 發行版應該是內建 Python3 的,那就只要一行指令:

python3 -m http.server

不過我們同事大多數是微軟愛用者,那也沒關係,是開發人員吧?(不是的應該對這篇沒興趣?)有裝 DotNET 吧?有的話,也只要四行:

mkdir myProj
cd myProj
dotnet new web
dotnet run

http.server 預設的埠號是 8000,dotnet 則是五千多的一個亂數,所以我們先驗證一下:curl localhost:8000 或者喜歡用瀏覽器?如果是 dotnet 也別忘了改埠號,到此為止若一切正常的話,那就繼續囉。

Traefik 也是跨平台的,請參考這邊的資訊下載安裝。裝好後就是一個執行檔,可以帶參數或吃設定檔,我們先在同目錄準備簡單的 traefik.toml:

[providers.file]
  filename = "traefik.toml"

[[entryPoints]]
  address = ":8080"

[[http.routers]]
  rule = "Method(`GET`)"
  service = "my-service"

[[http.services.my-service.loadBalancer.servers]]
  url = "http://localhost:8000"

執行看看,如果 8000 與 8080 的回傳結果一致,就代表我們的反向代理設成功了!再把憑證的相關檔案也放在同目錄,設定檔也要改一下:

[providers.file]
  filename = "traefik.toml"

[[entryPoints]]
  address = ":443"

[[http.routers]]
  rule = "Method(`GET`)"
  service = "my-service"
  tls = {}

[[http.services.my-service.loadBalancer.servers]]
  url = "http://localhost:8000"

[[tls.certificates]]
  certFile = "gss.com.tw-sha256.crt"
  keyFile = "gss.com.tw.key"

因為這次用的是 https 預設的 443,在 1024 以下,要 sudo 或系統管理員權限才能把 traefik 跑起來,驗證之前也要先賦予一個 FQDN,可以修改 /etc/hosts 或是 C:\Windows\System32\drivers\etc\hosts,又或者請 curl 暫時代勞一下:

curl --resolve a.gss.com.tw:443:127.0.0.1 https://a.gss.com.tw

若能得到 8000 一樣的回傳結果,就是 SSL Termination 設定成功了!再加碼一個技巧,上面的設定檔通常建議是拆成兩個:

#traefik.toml
[providers.file]
  filename = "dynamic.toml"

[[entryPoints]]
  address = ":443"
#dynamic.toml
[[http.routers]]
  rule = "Method(`GET`)"
  service = "my-service"
  tls = {}

[[http.services.my-service.loadBalancer.servers]]
  url = "http://localhost:8000"

[[tls.certificates]]
  certFile = "gss.com.tw-sha256.crt"
  keyFile = "gss.com.tw.key"

 這將帶來一個明顯地好處,一般來說,異動大多集中在第二個檔案,當 dynamic.toml 修改存檔後,traefik 是不須重啟立即生效的。

×
Stay Informed

When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.

Traefik 也可以接受 JSON Web Token 驗證外包
【讀書心得】軟體測試實務II Chapter 08 網站應用程式安全測試
 

評論

尚無評論
已經注冊了? 這裡登入
2025年10月28日, 星期二

Captcha 圖像