Belajar Traefik - Wildcard Certificates & DNS Challenge
Episode 16 of 31

Belajar Traefik - Wildcard Certificates & DNS Challenge

Episode ini membahas sertifikat wildcard untuk seluruh subdomain dengan DNS-01 challenge: cara kerja record TXT, integrasi provider DNS seperti Cloudflare dengan API token, konfigurasi environment variable, SAN multi-domain, serta troubleshooting propagation timeout dan resolvers.

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

Pendahuluan

Sertifikat wildcard *.example.com melindungi semua subdomain sekaligus — satu sertifikat, tanpa perlu mendaftarkan setiap nama. Episode 16 membahas cara mendapatkannya lewat DNS-01 challenge, satu-satunya challenge yang mendukung wildcard, serta integrasi dengan provider DNS seperti Cloudflare dan Route53.

Tantangannya: DNS-01 butuh kemampuan menulis record TXT di DNS domain kalian secara programatik. Traefik melakukannya lewat library lego, yang mendukung puluhan provider. Di episode ini kita praktikkan dengan Cloudflare sebagai contoh, lengkap dengan konfigurasi environment variable dan troubleshooting.

Wildcard Certificate dan DNS-01

Kenapa DNS-01 Wajib untuk Wildcard

Challenge HTTP-01 dan TLS-ALPN-01 berjalan per-domain: untuk *.example.com, tidak ada host tunggal yang mewakili wildcard. DNS-01 bekerja di level nama domain: Let's Encrypt meminta kalian meletakkan token di record TXT _acme-challenge.example.com. Dengan mengontrol DNS, kalian membuktikan kepemilikan seluruh domain sekaligus.

Alur lengkapnya:

  1. Traefik meminta sertifikat untuk *.example.com.
  2. Let's Encrypt memberi token.
  3. Traefik (via lego) membuat record TXT _acme-challenge.example.com di provider DNS.
  4. Let's Encrypt memeriksa record TXT tersebut.
  5. Sertifikat wildcard diterbitkan; Traefik menghapus record TXT.

Karena tidak ada koneksi inbound yang dibutuhkan, DNS-01 juga bisa dipakai untuk server di belakang NAT penuh.

Integrasi Cloudflare

API Token dan Environment Variable

Untuk memakai provider Cloudflare, buat API Token dengan izin Zone.DNS:Edit pada zone yang dituju. Simpan token sebagai environment variable — jangan pernah menuliskannya di file konfigurasi yang ter-version control:

Compose dengan env var Cloudflare
services:
  traefik:
    image: traefik:v3
    environment:
      - CLOUDFLARE_DNS_API_TOKEN=${CLOUDFLARE_DNS_API_TOKEN}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./config/traefik.yml:/etc/traefik/traefik.yml:ro
      - ./acme.json:/etc/traefik/acme.json

Token diambil dari .env di host saat docker compose up. Konfigurasi resolver memakai DNS-01 dengan provider Cloudflare:

Certificate resolver dengan DNS-01
certificatesResolvers:
  letsencrypt:
    acme:
      email: admin@example.com
      storage: /etc/traefik/acme.json
      dnsChallenge:
        provider: cloudflare
        resolvers:
          - "1.1.1.1:53"
          - "8.8.8.8:53"
  • provider: cloudflare: memberitahu lego provider mana yang dipakai.
  • resolvers: server DNS yang dipakai Let's Encrypt saat memverifikasi record TXT — daftar server yang dapat diakses dan akurat.

Untuk provider lain, token env var berbeda tapi polanya sama: ROUTE53_ACCESS_KEY_ID, AZURE_CLIENT_SECRET, GANDI_API_KEY, dan seterusnya. Pola _acme-challenge record disetel otomatis oleh lego.

Sertifikat untuk Banyak Domain

Main, SANs, dan Wildcard Campuran

Satu router bisa meminta sertifikat dengan kombinasi domain spesifik dan wildcard sekaligus:

Router dengan main dan SANs
services:
  portal:
    image: nginx:alpine
    labels:
      - traefik.enable=true
      - traefik.http.routers.portal.rule=HostRegexp(`{subdomain:[a-z]+}.example.com`)
      - traefik.http.routers.portal.entrypoints=websecure
      - traefik.http.routers.portal.tls.certresolver=letsencrypt
      - traefik.http.routers.portal.tls.domains[0].main=example.com
      - traefik.http.routers.portal.tls.domains[0].sans=*.example.com
      - traefik.http.routers.portal.service=portal-svc
      - traefik.http.services.portal-svc.loadbalancer.server.port=80

Rule HostRegexp membuat semua subdomain *.example.com masuk router ini. Label tls.domains[0].main meminta sertifikat untuk example.com plus SAN wildcard *.example.com. Traefik menggabungkan permintaan dari semua router yang memakai resolver yang sama, sehingga domain yang tumpang tindih tidak diterbitkan duplikat.

Troubleshooting DNS

Propagation Timeout

Kesalahan paling umum pada DNS-01 adalah propagation timeout: record TXT sudah dibuat, tapi server verifikasi belum melihatnya karena DNS belum menyebar. Penanganannya:

  • Naikkan dnsPropagationTimeout pada dnsChallenge (default 60 detik untuk sebagian provider) menjadi 2-3 menit.
  • Pastikan TTL record _acme-challenge rendah — kalau TTL 1 jam, verifikasi bisa gagal sampai record lama hilang.
  • Cek dengan dig apakah record TXT sudah terlihat dari perspektif internet:
Memeriksa record TXT challenge
dig TXT _acme-challenge.example.com
dig TXT _acme-challenge.example.com @1.1.1.1

Perintah dig pertama memakai resolver default, yang kedua memaksa resolver 1.1.1.1 — jika hasilnya berbeda, propagation belum selesai.

Resolver dan Zone Management

Jika resolvers tidak diisi, lego memakai resolvers bawaan yang mungkin tidak melihat perubahan terbaru. Daftarkan resolver tepercaya seperti di atas. Untuk domain yang dikelola di banyak zone, pastikan token punya izin pada zone yang benar — error unauthorized hampir selalu soal scope token, bukan konfigurasi Traefik.

Tip

Gunakan subdomain + wildcard campuran dengan bijak: sertifikat wildcard *.example.com tidak menutupi example.com itu sendiri maupun a.b.example.com. Tambahkan main dan sans secara eksplisit sesuai kebutuhan.

Penutup

Inti yang harus dibawa pulang:

  • Wildcard certificate hanya bisa lewat DNS-01 challenge.
  • DNS-01 menulis record TXT _acme-challenge di provider DNS via lego.
  • Cloudflare butuh API token ber-scope Zone.DNS:Edit lewat env var.
  • Router wildcard memakai HostRegexp plus tls.domains dengan main dan sans.
  • Propagation timeout ditangani dengan menaikkan timeout dan mengecek via dig.
  • Provider lain mengikuti pola env var yang sama: Route53, Azure, Gandi, dan lainnya.

Di episode 17 selanjutnya kita akan membahas custom certificates & mutual TLS — sertifikat dari file provider dengan hot reload, certificate stores dan SNI routing, serta mTLS untuk autentikasi klien berbasis sertifikat. Di sinilah Traefik berubah dari pengaman publik menjadi gerbang tepercaya untuk API internal.

Belajar Traefik - Wildcard Certificates & DNS Challenge | Belajar Traefik