Episode ini membahas sertifikat kustom dan internal CA: sertifikat manual berformat PEM, private CA dengan self-signed, client certificates untuk mTLS, integrasi Step CA dan ACME internal, serta on-demand TLS untuk arsitektur multi-tenant.

Tidak semua sertifikat berasal dari CA publik. Di dalam jaringan perusahaan atau homelab, kalian sering butuh internal CA — otoritas sertifikat milik sendiri yang diterima oleh perangkat internal. Episode 10 membahas seluruh spektrum sertifikat kustom: manual, private CA, mTLS, otomasi dengan Step CA, hingga on-demand TLS.
Kalian akan belajar memasang sertifikat yang sudah ada, membangun kepercayaan untuk CA internal, mengaktifkan mutual TLS (mTLS) di mana klien juga harus menunjukkan sertifikat, menghubungkan Caddy ke internal ACME server, dan menggunakan on-demand TLS untuk SaaS multi-tenant.
Ini episode yang memberi kalian kendali penuh atas infrastruktur PKI — keterampilan yang langka dan berharga di dunia DevOps.
Sertifikat di Caddy memakai format PEM — teks yang dibungkus -----BEGIN CERTIFICATE-----. Yang harus disiapkan:
Saat CA memberikan chain, gabungkan leaf dan intermediate dalam satu file, leaf di atas:
-----BEGIN CERTIFICATE-----
<leaf certificate>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<intermediate certificate>
-----END CERTIFICATE-----Kemudian pasang di Caddyfile:
example.com {
tls /etc/ssl/fullchain.pem /etc/ssl/privkey.pem
root * /var/www
file_server
}tls fullchain.pem privkey.pem memakai chain file dan kunci yang sudah disiapkan. Urutan file yang salah membuat browser menolak sertifikat.
Untuk CA internal, buat root CA sendiri lalu tanda tangani sertifikat domain. Cara tercepat adalah tls internal yang membuat Caddy menjadi CA:
internal.example.local {
tls internal
root * /var/www
file_server
}Agar klien mempercayai CA internal, import CA root Caddy ke trust store perangkat. Pada sistem Linux:
sudo cp /var/lib/caddy/.local/share/caddy/pki/authorities/local/root.crt /usr/local/share/ca-certificates/caddy-local.crt
sudo update-ca-certificatesPerintah sudo update-ca-certificates memperbarui daftar CA yang dipercaya sistem. Setelah ini, browser internal tidak lagi menampilkan peringatan.
Organisasi besar biasanya punya PKI sendiri (Microsoft AD CS, EJBCA, dan lainnya). Caddy bisa memakai sertifikat yang diterbitkan PKI tersebut lewat mekanisme manual. Yang penting: pastikan chain lengkap dan klien internal mempercayai root CA organisasi.
mTLS meminta klien membuktikan identitas dengan sertifikat:
api.example.com {
tls {
client_auth {
mode require_and_verify
trusted_ca_certs /etc/ssl/client-ca.pem
}
}
reverse_proxy localhost:8080
}mode require_and_verify mewajibkan klien membawa sertifikat yang ditandatangani CA client-ca.pem. Request tanpa sertifikat valid langsung ditolak sebelum menyentuh aplikasi.
mTLS adalah alternatif autentikasi yang jauh lebih kuat daripada API key karena berbasis kriptografi.
tls internal menghasilkan sertifikat yang sulit diperpanjang lintas instance. Solusi produksi: jalankan Step CA (Smallstep) sebagai internal ACME server, lalu arahkan Caddy ke sana:
{
acme_ca https://ca.internal.example.com/acme/acme/directory
}
internal.example.local {
root * /var/www
file_server
}Caddy memperlakukan Step CA seperti Let's Encrypt: issuance, renewal otomatis, dan storage sertifikat — semua berjalan sama, tapi dengan CA internal yang dipercaya organisasi. Ini memberi renewal otomatis untuk sertifikat internal tanpa sertifikat publik.
On-demand TLS menerbitkan sertifikat hanya ketika request pertama datang untuk domain itu:
{
on_demand_tls {
ask https://auth.example.com/allow
}
}
*.saas.example.com {
tls {
on_demand
}
reverse_proxy localhost:8080
}on_demand memicu issuance saat request pertama untuk domain baru tiba. Endpoint ask menvalidasi apakah domain diizinkan — mencegah penyalahgunaan oleh pihak luar.
On-demand TLS cocok untuk SaaS multi-tenant yang melayani domain kustom pengguna secara dinamis. Tanpa ask, siapa pun bisa membuat Caddy kalian meminta sertifikat untuk domain mereka — jadi selalu aktifkan validasi.
Episode 10 memberi kalian kendali penuh atas PKI: pemasangan sertifikat manual dengan chain PEM, pembentukan internal CA lewat tls internal dan trust store, pengaktifan mTLS dengan client_auth, otomasi sertifikat internal dengan Step CA sebagai ACME server, dan on-demand TLS untuk multi-tenant.
Inti yang harus dibawa pulang:
tls internal menjadikan Caddy CA internal untuk development.client_auth dengan mode require_and_verify mengaktifkan mTLS.ask untuk validasi.Di episode 11 selanjutnya kita masuk ke matchers & request filtering — konsep matcher, semua matcher standar seperti path, method, header, host, dan remote_ip, sintaks inline dan named, path matching dengan prefix dan wildcard, serta pola lanjutan dengan kombinasi matcher dan ekspresi CEL.