Belajar Traefik - Custom Certificates & Mutual TLS
Episode 17 of 31

Belajar Traefik - Custom Certificates & Mutual TLS

Episode ini membahas sertifikat custom: konfigurasi certificate file via file provider dengan hot reload, certificate stores dan routing berbasis SNI, serta mutual TLS untuk mengautentikasi klien berbasis sertifikat dengan clientAuthType dan CA file.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Tidak semua sertifikat datang dari Let's Encrypt. Ada kalanya kalian perlu memakai sertifikat dari Certificate Authority internal, sertifikat yang dibeli dari vendor, atau bahkan mengautentikasi klien dengan sertifikat — inilah wilayah episode 17: custom certificates dan mutual TLS (mTLS).

mTLS adalah teknologi yang membuat komunikasi antara dua sistem bisa dipercaya kedua arah. Kalian pernah mengakses internal API yang "mustahil" ditembus? Kemungkinan besar di belakangnya ada mTLS. Di episode ini kita siapkan sertifikat custom dengan OpenSSL, pasang lewat file provider, dan aktifkan autentikasi klien berbasis sertifikat di Traefik.

Membuat Sertifikat Custom

Self-Signed Certificate dengan OpenSSL

Untuk lingkungan pengembangan atau CA internal, buat sertifikat dengan OpenSSL:

Membuat CA dan sertifikat self-signed
openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout /certs/ca.key -out /certs/ca.crt \
  -days 3650 -subj "/CN=Internal CA"
 
openssl req -newkey rsa:2048 -nodes \
  -keyout /certs/service.key -out /certs/service.csr \
  -subj "/CN=api.internal.local"
 
openssl x509 -req -in /certs/service.csr \
  -CA /certs/ca.crt -CAkey /certs/ca.key -CAcreateserial \
  -out /certs/service.crt -days 825 \
  -extfile <(printf "subjectAltName=DNS:api.internal.local,DNS:*.internal.local")

Langkah-langkahnya: buat CA, buat certificate signing request (CSR), lalu tanda tangani CSR dengan CA. Flag -extfile menambahkan SAN agar sertifikat valid untuk nama host yang dipakai. Sertifikat yang dihasilkan — service.crt dan service.key — adalah pasangan yang akan dipasang di Traefik.

File Provider dan Hot Reload

Menyediakan Sertifikat via File

Sertifikat custom didaftarkan lewat file provider dalam konfigurasi dinamis. Struktur bagian tls dalam file provider:

Certificates via file provider
tls:
  certificates:
    - certFile: /certs/service.crt
      keyFile: /certs/service.key
    - certFile: /certs/legacy.crt
      keyFile: /certs/legacy.key
  stores:
    default:
      defaultCertificate:
        certFile: /certs/service.crt
        keyFile: /certs/service.key

Keunggulan file provider: perubahan langsung berlaku tanpa restart. Ganti isi service.crt, Traefik memuat sertifikat baru dalam hitungan detik. Sertifikat kedua di daftar certificates memberi Traefik pilihan tambahan yang akan dipilih berdasarkan SNI request.

Certificate Stores dan SNI

Semua sertifikat dikumpulkan di certificate store bernama default. Saat klien melakukan handshake dengan SNI api.internal.local, Traefik mencari sertifikat yang SAN-nya cocok dan menghidangkan yang itu. Tanpa kecocokan, store mengirim defaultCertificate. Untuk routing berbasis SNI di level TCP, kalian juga bisa menunjuk store berbeda per router — pola yang dipakai untuk memisahkan domain internal dan eksternal.

Mutual TLS

Konsep mTLS

Pada TLS normal, hanya klien yang memverifikasi server. Pada mTLS, dua arah: klien juga wajib menunjukkan sertifikat yang valid, dan Traefik memverifikasinya terhadap daftar CA tepercaya. Hasilnya, hanya mesin dengan sertifikat terbitan CA kalian yang bisa terhubung.

Konfigurasi TLSOption untuk mTLS

Aktifkan mTLS lewat TLSOption dengan clientAuth:

TLSOption dengan mTLS
http:
  tlsOptions:
    mtls-internal:
      clientAuth:
        secretNames:
          - internal-ca
        clientAuthType: RequireAndVerifyClientCert
  • secretNames: referensi ke Secret berisi CA file di Kubernetes; dalam file provider, caFiles dipakai menggantinya:
mTLS dengan CA file
http:
  tlsOptions:
    mtls-file:
      clientAuth:
        caFiles:
          - /certs/ca.crt
        clientAuthType: RequireAndVerifyClientCert
  • clientAuthType: RequireAndVerifyClientCert: klien wajib mengirim sertifikat dan sertifikatnya harus diverifikasi ke CA.
  • Nilai lain: NoClientCert, RequestClientCert, RequireAnyClientCert — masing-masing menurunkan tingkat keketatan.

Menghubungkan Router ke TLSOption mTLS

Router internal dengan mTLS
http:
  routers:
    api-internal:
      rule: "Host(`api.internal.local`)"
      entrypoints:
        - websecure
      service: api-svc
      tls:
        options: mtls-file
        certResolver: letsencrypt
  services:
    api-svc:
      loadBalancer:
        servers:
          - url: "http://10.0.0.70:8080"

Sekarang klien yang tidak memiliki sertifikat valid dari CA kalian ditolak di handshake, bahkan sebelum request HTTP dikirim. Kombinasi mTLS + Let's Encrypt seperti di atas menunjukkan dual-use Traefik: enkripsi publik untuk manusia, gerbang sertifikat untuk mesin.

Warning

Pastikan clientAuthType benar-benar RequireAndVerifyClientCert untuk gerbang internal. Nilai RequestClientCert hanya meminta sertifikat tanpa memverifikasi — mudah disalahartikan sebagai proteksi padahal bukan.

Use Case mTLS

Pola ini banyak dipakai untuk:

  • API authentication: hanya service dengan sertifikat valid boleh memanggil API internal.
  • Microservice security: komunikasi antar-service diuji sertifikatnya.
  • Device authentication: IoT dan perangkat enterprise diidentifikasi lewat sertifikat.
  • Enterprise PKI integration: memanfaatkan CA internal perusahaan yang sudah ada.

Penutup

Inti yang harus dibawa pulang:

  • Sertifikat custom dibuat dengan OpenSSL; sertakan SAN untuk nama host.
  • File provider memuat sertifikat dengan hot reload tanpa restart.
  • Certificate store memilih sertifikat berdasarkan SNI, dengan default certificate sebagai fallback.
  • mTLS mewajibkan klien menunjukkan sertifikat yang terverifikasi ke CA kalian.
  • clientAuthType: RequireAndVerifyClientCert adalah mode yang sesungguhnya aman.
  • mTLS ideal untuk API internal, microservice, perangkat, dan integrasi PKI enterprise.

Di episode 18 selanjutnya kita akan membahas TCP & UDP routing — entrypoint TCP, routing berbasis HostSNI, TLS termination versus passthrough untuk protokol non-HTTP, proxying database, SSH, dan SMTP, serta load balancing UDP untuk DNS dan game server. Gerbang kalian sekarang melampaui HTTP.

Belajar Traefik - Custom Certificates & Mutual TLS | Belajar Traefik