Belajar Caddy - TLS Configuration & Options
Episode 8 of 31

Belajar Caddy - TLS Configuration & Options

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.

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

Pendahuluan

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.

Directive tls

Memasang Sertifikat Manual

Jika kalian punya sertifikat dan kunci dari vendor tertentu, pasang lewat directive tls:

Sertifikat manual
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.

Sertifikat Tanpa Automatic HTTPS

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.

Internal CA untuk Development

Untuk pengembangan lokal, Caddy punya CA internal sendiri:

Sertifikat internal
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.

Opsi TLS

Protokol dan Cipher Suite

Kalian bisa membatasi versi protokol dan cipher:

Kontrol protokol TLS
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.

ALPN dan Session Tickets

  • ALPN memilih protokol aplikasi saat handshake, seperti h2 untuk HTTP/2.
  • Session tickets mempercepat resumption handshake.

Keduanya diaktifkan otomatis oleh Caddy — jarang perlu diubah manual.

Menonaktifkan Automatic HTTPS

Localhost dan Domain Internal

Automatic HTTPS hanya aktif untuk nama domain publik. Untuk localhost, .local, alamat IP, atau nama internal lain, Caddy tidak meminta sertifikat publik:

Development lokal
localhost:8080 {
    root * ./site
    file_server
}

Situs ini akan berjalan plain HTTP di port 8080. Untuk HTTPS lokal, tambahkan tls internal seperti tadi.

Self-Signed dan Manual

Jika kalian membuat sertifikat self-signed sendiri:

Buat sertifikat self-signed
openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout key.pem -out cert.pem -days 365 \
  -subj "/CN=internal.example.com"

Lalu pasang hasilnya:

Pakai self-signed
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.

Sumber Sertifikat

Let's Encrypt, ZeroSSL, dan ACME Kustom

Caddy memakai Let's Encrypt secara default. Untuk CA lain, gunakan global options:

Ganti CA
{
    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.

Sumber Per Situs

Kombinasi CA per situs dan file manual:

CA berbeda per situs
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.

Enforcement HTTPS dan HSTS

HSTS Header

HSTS memberi tahu browser untuk selalu memakai HTTPS untuk domain itu:

Aktifkan HSTS
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.

Pertimbangan Preload

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.

Penutup

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.
  • Protokol TLS 1.2 dan 1.3 adalah default yang aman.
  • acme_ca mengarahkan issuance ke CA lain seperti ZeroSSL.
  • Localhost dan IP tidak memicu automatic HTTPS.
  • HSTS dengan 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.

Belajar Caddy - TLS Configuration & Options | Belajar Caddy