Episode ini membahas konfigurasi TLS manual: directive tls, opsi protokol dan cipher, menonaktifkan automatic HTTPS untuk development, sumber sertifikat selain Let's Encrypt, serta enforcement HTTPS dengan HSTS.

Automatic HTTPS menangani 90 persen kebutuhan, tapi ada kalanya kalian perlu mengendalikan TLS secara manual: memakai sertifikat yang sudah ada, menjalankan development di localhost, memilih protokol minimum, atau memakai CA yang berbeda. Episode 8 membahas semua opsi itu.
Jika kalian punya sertifikat dan kunci dari vendor tertentu, pasang lewat directive tls:
example.com {
tls /etc/ssl/example.com.crt /etc/ssl/example.com.key
root * /var/www
file_server
}Format file adalah PEM — pasangan sertifikat dan kunci privat. Jika sertifikat berupa chain, gabungkan semuanya dalam satu file.
Ketika tls diberikan file, Caddy tidak akan meminta sertifikat ACME untuk situs itu — dia memakai file yang diberikan. Ini berguna untuk sertifikat dari CA komersial atau organisasi.
Untuk pengembangan lokal, Caddy punya CA internal sendiri:
localhost {
tls internal
root * ./site
file_server
}tls internal membuat Caddy menjadi CA-nya sendiri dan menerbitkan sertifikat lokal untuk localhost. Browser akan menampilkan peringatan trust, tapi koneksi tetap ter-encrypt. Pola ini juga dipakai untuk situs internal di episode 10.
Kalian bisa membatasi versi protokol dan cipher:
example.com {
tls {
protocols tls1.2 tls1.3
curves x25519
}
}protocols tls1.2 tls1.3 membatasi hanya versi yang aman — menonaktifkan TLS 1.0 dan 1.1 yang sudah usang. curves x25519 memilih kurva elliptic curve untuk key exchange. Secara default Caddy sudah memilih opsi yang aman; konfigurasi ini untuk compliance atau kebutuhan khusus.
h2 untuk HTTP/2.Keduanya diaktifkan otomatis oleh Caddy — jarang perlu diubah manual.
Automatic HTTPS hanya aktif untuk nama domain publik. Untuk localhost, .local, alamat IP, atau nama internal lain, Caddy tidak meminta sertifikat publik:
localhost:8080 {
root * ./site
file_server
}Situs ini akan berjalan plain HTTP di port 8080. Untuk HTTPS lokal, tambahkan tls internal seperti tadi.
Jika kalian membuat sertifikat self-signed sendiri:
openssl req -x509 -newkey rsa:2048 -nodes \
-keyout key.pem -out cert.pem -days 365 \
-subj "/CN=internal.example.com"Lalu pasang hasilnya:
internal.example.com {
tls /etc/ssl/cert.pem /etc/ssl/key.pem
root * /var/www
file_server
}openssl req -x509 ... membuat sertifikat yang cocok untuk jaringan internal. Ingat: klien harus mempercayai sertifikat ini agar tidak ada peringatan.
Caddy memakai Let's Encrypt secara default. Untuk CA lain, gunakan global options:
{
acme_ca https://acme.zerossl.com/v2/DV90
}
example.com {
root * /var/www
file_server
}acme_ca mengarahkan semua issuance ke CA baru. Kalian bisa memakai ZeroSSL, atau server ACME internal seperti Step CA — ini kita bahas di episode 10.
Kombinasi CA per situs dan file manual:
a.example.com {
tls {
issuer acme {
ca https://acme.zero-ssl.com/v2/DV90
}
}
}
b.example.com {
tls /etc/ssl/b.crt /etc/ssl/b.key
}Situs A memakai CA kustom, situs B memakai file manual. Kontrol per-situs seperti ini berguna di environment multi-tenant.
HSTS memberi tahu browser untuk selalu memakai HTTPS untuk domain itu:
example.com {
header Strict-Transport-Security "max-age=31536000; includeSubDomains"
root * /var/www
file_server
}header Strict-Transport-Security ... memberitahu browser agar hanya mengakses via HTTPS selama satu tahun, termasuk subdomain. HSTS mencegah serangan downgrade ke HTTP.
Untuk masuk ke daftar preload browser, tambahkan preload pada nilai HSTS dan daftarkan domain di hstspreload.org. Setelah di-preload, browser akan menolak HTTP selamanya — pastikan HTTPS kalian sempurna sebelum mendaftar.
Episode 8 memberi kalian kendali penuh atas TLS: directive tls untuk sertifikat manual, opsi protokol dan cipher, menonaktifkan automatic HTTPS di development dengan tls internal atau self-signed, memilih sumber sertifikat dari Let's Encrypt hingga ACME kustom, dan menegakkan HTTPS dengan HSTS.
Inti yang harus dibawa pulang:
tls file.crt file.key memasang sertifikat manual berformat PEM.tls internal memakai CA bawaan Caddy untuk development.acme_ca mengarahkan issuance ke CA lain seperti ZeroSSL.includeSubDomains memperkuat enforce HTTPS.Di episode 9 selanjutnya kita akan membahas wildcard certificates dan DNS challenge — sertifikat bintang untuk semua subdomain, kredensial DNS provider seperti Cloudflare dan Route53, konfigurasi DNS-01, serta build kustom dengan xcaddy untuk menambahkan modul DNS provider.