← Semua materi

Security / Security Guide

HSTS di Cloudflare: rollout aman tanpa mengunci subdomain

Aktifkan HSTS secara bertahap dengan memahami max-age, includeSubDomains, preload, dan cara memverifikasi header sebelum membuat kebijakan sulit dibatalkan.

Tujuan latihan

Menyusun rollout HSTS yang aman di Cloudflare, memverifikasi header yang diterima browser, dan mengenali kondisi yang dapat membuat host atau subdomain tidak dapat diakses.

Persiapan

Domain milik sendiri yang sudah stabil di HTTPS. Idealnya record web sudah Proxied melalui Cloudflare, sertifikat valid, dan tidak ada redirect HTTPS ke HTTP. Jangan menerapkan perubahan pada domain produksi sebelum memahami dampak max-age.

HTTP request
HTTPS + HSTS
Browser remembers HTTPS

Masalah

HSTS terlihat sederhana karena hanya menambahkan header Strict-Transport-Security, tetapi efeknya disimpan oleh browser. Setelah browser menerima policy tersebut melalui HTTPS, browser dapat memaksa koneksi berikutnya menggunakan HTTPS dan menolak bypass terhadap error sertifikat. Kesalahan konfigurasi karena itu berbeda dari redirect biasa: rollback di server tidak selalu langsung menghapus policy yang sudah tersimpan di browser.

Persiapan: pastikan HTTPS benar-benar stabil

Sebelum mengaktifkan HSTS, pastikan hostname utama dapat diakses melalui HTTPS dengan sertifikat yang valid, HTTP diarahkan ke HTTPS, dan tidak ada jalur yang mengubah HTTPS kembali ke HTTP. Cloudflare juga memperingatkan agar record yang sudah mengandalkan HSTS tidak dipindah dari Proxied ke DNS only, zone tidak dipause, dan nameserver tidak dipindahkan tanpa rencana karena browser tetap mengharapkan HTTPS selama max-age masih berlaku.

curl -I http://example.com
curl -I https://example.com

1. Cek apakah HSTS sudah dikirim

Jangan berasumsi HSTS belum aktif hanya karena setting Cloudflare belum pernah Anda nyalakan. Header bisa berasal dari origin web server atau Response Header Transform Rule. Jalankan request HTTPS dan cari Strict-Transport-Security. Jika header sudah ada, catat nilainya sebelum membuat policy baru agar Anda tidak mengelola dua sumber konfigurasi yang berbeda.

curl -sS -I https://example.com | grep -iE "^(HTTP/|strict-transport-security:|server:)"

2. Pahami arti max-age sebelum memilih nilainya

Directive max-age menentukan berapa detik browser mengingat host sebagai HSTS host. Nilai yang lebih panjang memberi perlindungan lebih lama tetapi juga memperpanjang dampak jika HTTPS kemudian rusak. Untuk rollout baru, gunakan periode bertahap dan naikkan hanya setelah HTTPS stabil. Cloudflare menyediakan pilihan hingga 12 bulan; dokumentasi use case Cloudflare menyarankan mulai lebih pendek lalu meningkatkan ke 12 bulan setelah stabil.

3. Jangan aktifkan includeSubDomains tanpa inventaris subdomain

includeSubDomains membuat policy parent berlaku ke seluruh subdomain. Sebelum menyalakannya, inventaris subdomain seperti www, api, mail, cpanel, webmail, staging, atau hostname legacy. Setiap subdomain yang masih HTTP-only berpotensi menjadi tidak dapat diakses oleh browser yang sudah menerima policy parent. Jika Anda belum yakin semua subdomain mendukung HTTPS, biarkan opsi ini OFF.

4. Perlakukan preload sebagai keputusan terpisah

Preload mengurangi risiko downgrade pada kunjungan pertama karena browser dapat membawa daftar HSTS sebelum pengguna pernah mengakses domain. Namun preload jauh lebih sulit dibatalkan daripada header biasa dan mensyaratkan konfigurasi yang lebih ketat. Jangan menyalakannya hanya karena tersedia di dashboard. Pastikan seluruh domain dan subdomain siap untuk HTTPS jangka panjang, max-age memenuhi syarat, dan Anda memahami proses pengajuan serta penghapusan dari preload list.

5. Konfigurasi awal yang konservatif di Cloudflare

Untuk domain yang baru memulai HSTS, pola konservatif adalah mengaktifkan HSTS pada apex tanpa includeSubDomains dan tanpa preload terlebih dahulu. No-Sniff dapat diaktifkan bila belum dikirim dari origin. Setelah beberapa periode operasi tanpa incident TLS atau redirect, max-age dapat dinaikkan. Hindari mengubah beberapa komponen sekaligus agar sumber masalah mudah dilacak.

6. Verifikasi dari sisi client setelah perubahan

Setelah menyimpan konfigurasi, lakukan request HTTPS baru dan periksa nilai header. Pastikan hanya policy yang memang Anda inginkan yang muncul. Header HSTS hanya efektif ketika diterima melalui HTTPS; browser mengabaikannya jika dikirim melalui HTTP. Lakukan juga request ke HTTP untuk memastikan redirect masih membawa pengguna ke HTTPS.

curl -I https://example.com
curl -I http://example.com

7. Bedakan masalah HSTS dari masalah sertifikat

Jika browser menolak situs setelah HSTS aktif, jangan langsung menghapus DNS atau mematikan proxy. Periksa validitas sertifikat, hostname pada certificate, redirect chain, dan apakah origin/edge masih menyediakan HTTPS. HSTS justru membuat browser tidak menawarkan tombol bypass untuk error TLS tertentu, sehingga error sertifikat yang sebelumnya bisa dilewati menjadi blocking.

Kesalahan umum

Kesalahan yang sering terjadi adalah mengaktifkan includeSubDomains tanpa mengecek hostname lama, menyalakan preload terlalu dini, menganggap max-age dapat dicabut seketika, serta mempunyai header HSTS dari origin sekaligus Cloudflare dengan nilai berbeda. Cloudflare juga mencatat bahwa Response Header Transform Rule dapat menimpa nilai yang diatur dari menu HSTS sehingga konfigurasi dashboard dan header aktual bisa tidak sama.

Checklist verifikasi

Pastikan HTTPS apex mengembalikan 200/3xx yang diharapkan, HTTP redirect ke HTTPS, sertifikat valid, Strict-Transport-Security memiliki max-age yang direncanakan, includeSubDomains hanya aktif jika seluruh subdomain siap, preload tetap OFF sampai ada kebutuhan dan kesiapan jangka panjang, serta tidak ada Transform Rule atau origin header yang menghasilkan policy berbeda. Simpan nilai header sebelum dan sesudah perubahan sebagai bukti konfigurasi.

Pelajaran

HSTS bukan sekadar redirect HTTPS. Ia adalah instruksi persisten kepada browser. Rollout yang aman dimulai dari HTTPS yang stabil, verifikasi header existing, max-age bertahap, lalu evaluasi terpisah untuk includeSubDomains dan preload. Semakin besar scope policy, semakin penting inventaris hostname dan rencana rollback sebelum perubahan diterapkan.

Referensi resmi

Cloudflare SSL/TLS — HTTP Strict Transport Security (HSTS) ↗Cloudflare use case — Enforce HTTPS and encrypt all traffic ↗MDN — Strict-Transport-Security header ↗
Pilih materi berikutnya →