Episode ini membahas otomasi sertifikat: protokol ACME, konfigurasi certificate resolver dengan email dan storage acme.json, tiga tipe challenge HTTP-01, TLS-ALPN-01, dan DNS-01, siklus hidup sertifikat termasuk renewal otomatis 30 hari sebelum kedaluwarsa, serta pemasangan TLS pada router.

Mengelola sertifikat manual — membeli, menaruh, memperbarui sebelum kedaluwarsa — adalah pekerjaan paling membosankan dan paling rawan bencana di dunia proxy. Episode 15 menghapus semua itu dengan ACME dan Let's Encrypt: sertifikat diterbitkan otomatis, dipasang otomatis, dan diperbarui otomatis tanpa intervensi manusia.
Ini adalah salah satu alasan terbesar orang memilih Traefik. Setelah konfigurasi sekali, HTTPS di seluruh domain kalian berjalan sendiri. Mari kita pahami protokol ACME, cara mengonfigurasi certificate resolver, ketiga jenis challenge, dan bagaimana Traefik mengelola siklus hidup sertifikat.
ACME (Automatic Certificate Management Environment) adalah protokol untuk otomasi sertifikat. Traefik bertindak sebagai klien ACME: mendaftar ke Let's Encrypt, membuktikan kepemilikan domain lewat challenge, lalu menerima sertifikat yang langsung dipasang. Sertifikat berumur 90 hari dan otomatis diperbarui sekitar 30 hari sebelum kedaluwarsa.
Certificate resolver adalah blok static config yang menghubungkan Traefik dengan server ACME:
certificatesResolvers:
letsencrypt:
acme:
email: admin@example.com
storage: /etc/traefik/acme.json
httpChallenge:
entryPoint: webemail: alamat untuk notifikasi kedaluwarsa dan perpanjangan dari Let's Encrypt.storage: lokasi file acme.json tempat semua sertifikat dan kunci disimpan.httpChallenge: membuktikan kepemilikan domain lewat entrypoint web (port 80).File acme.json adalah harta karun: berisi private key seluruh sertifikat. Setel permission ketat:
chmod 600 acme.jsonHTTP-01 paling sederhana: Let's Encrypt meminta file acak di http://domain/.well-known/acme-challenge/<token>, dan Traefik menyajikannya. Syaratnya: port 80 harus terbuka dari internet dan request harus sampai ke Traefik. Inilah mengapa entrypoint web di httpChallenge wajib ada.
TLS-ALPN-01 berjalan lewat port 443: Let's Encrypt menghubungi Traefik dengan ALPN khusus acme-tls/1, dan Traefik membuktikan kepemilikan domain di dalam handshake TLS. Tidak memerlukan port 80, tapi membutuhkan port 443 terbuka:
certificatesResolvers:
letsencrypt:
acme:
email: admin@example.com
storage: /etc/traefik/acme.json
tlsChallenge: {}DNS-01 membuktikan kepemilikan domain lewat record DNS TXT. Inilah satu-satunya cara mendapatkan wildcard certificate dan tidak memerlukan port inbound sama sekali. Kita bedah seluruh detailnya di episode 16.
Sertifikat diterbitkan untuk domain yang diminta router. Untuk mengaktifkan TLS, router harus berada di entrypoint HTTPS dan menyebut certResolver:
services:
app:
image: nginx:alpine
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=Host(`app.example.com`)
- traefik.http.routers.app.entrypoints=websecure
- traefik.http.routers.app.tls.certresolver=letsencrypt
- traefik.http.routers.app.tls.domains[0].main=app.example.com
- traefik.http.routers.app.tls.domains[0].sans=www.app.example.com
- traefik.http.routers.app.service=app-svc
- traefik.http.services.app-svc.loadbalancer.server.port=80Saat router ini muncul, Traefik memeriksa apakah sertifikat untuk app.example.com sudah ada di acme.json. Jika belum, dia langsung memproses challenge dan menerbitkannya. Label tls.domains[0].sans mendaftarkan SAN tambahan dalam satu sertifikat.
Traefik memantau sertifikat dan memperbaruinya otomatis sekitar 30 hari sebelum kedaluwarsa, dengan beberapa percobaan jika gagal. Yang wajib kalian lakukan sebagai operator:
acme.json secara rutin — kehilangan file ini berarti private key hilang.acme.json saat Traefik berjalan; tulis lewat mekanisme backup-restore.Untuk high availability dengan beberapa instance Traefik, acme.json harus dibagikan dengan hati-hati — kita bahas detailnya di episode 26.
Warning
Uji penyetelan Let's Encrypt menggunakan staging server terlebih dahulu. Let's Encrypt membatasi 5 kegagalan issuance per jam per hostname — gagal berulang di production akan membuat domain terkunci sementara.
Inti yang harus dibawa pulang:
acme.json, dan satu tipe challenge.tls.certresolver dan tls.domains.acme.json dan uji dengan staging server sebelum production.Di episode 16 selanjutnya kita akan membahas wildcard certificates & DNS challenge — sertifikat untuk semua subdomain, integrasi provider DNS seperti Cloudflare dan Route53, konfigurasi env var, SAN multi-domain, serta troubleshooting DNS propagation dan timeout.