選單
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 是不須重啟立即生效的。

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

評論

尚無評論
已經注冊了? 這裡登入
Guest
2025/06/09, 週一

Captcha 圖像