Episode ini membahas sertifikat wildcard dan challenge DNS-01: sintaks wildcard, keharusan DNS-01 untuk wildcard, kredensial DNS provider seperti Cloudflare dan Route53, build kustom dengan xcaddy, serta konfigurasi per situs dan global.

Kadang kalian butuh satu sertifikat yang melindungi semua subdomain: app.example.com, api.example.com, blog.example.com, dan seterusnya. Di sinilah wildcard certificate berperan. Sayangnya, wildcard hanya bisa diperoleh lewat challenge DNS-01 — karena verifikasi harus melalui DNS TXT record, bukan HTTP.
Episode 9 membahas bagaimana Caddy mengelola wildcard certificates. Kalian akan belajar sintaks wildcard di Caddyfile, mengapa DNS-01 adalah satu-satunya cara, bagaimana mengonfigurasi DNS provider seperti Cloudflare dan Route53, dan cara membangun binary Caddy kustom dengan xcaddy untuk menambahkan modul DNS provider.
Ini juga episode pertama yang melibatkan plugin — konsep yang akan menjadi tema besar di episode 29. Siapkan kredensial API DNS provider kalian jika ingin praktik langsung.
Sertifikat wildcard mencakup semua subdomain satu level:
*.example.com {
root * /var/www/sites/{host}
file_server
}Blok *.example.com melayani app.example.com, api.example.com, dan lainnya. Caddy akan menerbitkan sertifikat untuk *.example.com — satu sertifikat yang berlaku untuk semua subdomain tersebut.
Penting dipahami:
*.example.com tidak mencakup a.b.example.com.example.com itu sendiri butuh sertifikat tambahan.Kombinasi umum: buat dua sertifikat — satu untuk root example.com dan satu untuk *.example.com.
Challenge HTTP-01 membutuhkan port 80 yang bisa diakses publik untuk tiap subdomain — tidak praktis untuk puluhan subdomain. DNS-01 memecahkannya dengan cara berbeda:
_acme-challenge.example.com berisi token.Karena verifikasi lewat DNS, tidak peduli berapa banyak subdomain — satu record sudah cukup untuk wildcard.
Dengan modul DNS provider terpasang, Caddy membuat dan menghapus TXT record secara otomatis menggunakan kredensial API. Kalian tidak perlu menyentuh panel DNS manual.
Modul DNS provider membaca kredensial dari environment variables. Contoh untuk Cloudflare:
export CF_API_TOKEN=token_anda
export CF_ZONE=example.com
caddy run --config CaddyfileSetiap provider punya variable masing-masing — cek dokumentasi modul yang bersangkutan. Jangan pernah menulis token di Caddyfile; selalu lewat environment variables.
Tetapkan provider global agar semua situs memakainya:
{
acme_dns cloudflare {env.CF_API_TOKEN}
}
*.example.com {
root * /var/www
file_server
}acme_dns cloudflare ... memakai Cloudflare untuk semua challenge DNS di seluruh situs.
Kombinasi provider per situs dan fallback:
a.example.com {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
}
b.example.com {
tls {
dns digitalocean {env.DO_API_TOKEN}
}
}Situs A memakai Cloudflare, situs B memakai DigitalOcean. Setiap provider membutuhkan binary Caddy yang dibangun dengan modulnya masing-masing.
Modul DNS provider tidak ada di binary standar. Untuk menambahkannya, gunakan xcaddy:
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
xcaddy build --with github.com/caddy-dns/cloudflarexcaddy build --with ... membuat binary Caddy baru yang menyertakan modul Cloudflare DNS.
Kumpulan modul bisa digabung dalam satu build:
xcaddy build \
--with github.com/caddy-dns/cloudflare \
--with github.com/caddy-dns/digitalocean \
--with github.com/mholt/caddy-l4Hasilnya binary kustom dengan semua modul tersebut. Simpan binary ini di server dan gunakan sebagai pengganti caddy standar. Selalu pantau versi modul saat memperbarui binary — plugin harus kompatibel dengan versi Caddy.
_acme-challenge.Episode 9 membuka pintu wildcard certificates: sintaks *.example.com di Caddyfile, keharusan challenge DNS-01 untuk wildcard, kredensial DNS provider seperti Cloudflare dan Route53 lewat environment variables, konfigurasi global dan per situs, serta build kustom dengan xcaddy.
Inti yang harus dibawa pulang:
acme_dns cloudflare {env.CF_API_TOKEN} mengatur provider global.xcaddy build --with.Di episode 10 selanjutnya kita akan membahas custom certificates dan internal CA — sertifikat manual dan chain PEM, private CA dengan self-signed, client certificates untuk mTLS, integrasi Step CA dan internal ACME server, serta on-demand TLS untuk multi-tenant. Kontrol sertifikat tingkat lanjut menanti.