Belajar Cyber Security #12: HTTPS & TLS — Apa Sebenarnya yang Dilindungi Gembok itu?

Hari ini saya catat topik yang selama ini saya pakai setiap hari tanpa benar-benar paham isinya: HTTPS. Gembok di browser itu artinya apa, siapa yang menjamin identitas server, dan apa yang sebenarnya terjadi di balik layar sebelum halaman pertama termuat. Ternyata jawabannya ada di protokol bernama TLS, dan sebagai programmer yang tiap hari ngoprek web, ini wajib saya pahami bukan cuma sebagai simbol “aman”, tapi sebagai mekanisme nyata.

Diagram alur handshake TLS 1.3: ClientHello, ServerHello + sertifikat, key exchange, data terenkripsi
Anatomi handshake TLS 1.3 — empat langkah inti yang terjadi dalam hitungan milidetik.

HTTPS = HTTP yang masuk terowongan

HTTP biasa mengirimkan permintaan dan respons dalam bentuk teks polos — siapa pun yang berada di tengah jalur (WiFi kafe, ISP, router) bisa membacanya. HTTPS menambahkan lapisan TLS di atas HTTP. Analogi sederhananya: surat biasa vs surat yang dimasukkan ke amplop tersegel, lalu dikirim lewat kurir yang identitasnya disertifikat resmi. Isinya tidak berubah, tapi tidak ada yang bisa membaca atau mengubahnya di jalan tanpa ketahuan.

Menariknya, TLS tidak hanya mengenkripsi. Tiga janjinya sejalan dengan CIA triad yang saya catat di episode #1: confidentiality (isi pesan rahasia), integrity (di jalan tidak ada yang menyisipkan atau mengubah data), dan authentication (kamu yakin sedang bicara dengan server yang benar, bukan peniru).

Handshake TLS 1.3: empat langkah, satu round-trip

Versi TLS yang berlaku sekarang adalah 1.3, distandardisasi lewat RFC 8446 (Agustus 2018). Kalau di TLS 1.2 handshake-nya bisa makan dua round-trip (beberapa bolak-balik sebelum data boleh dikirim), TLS 1.3 mampet jadi satu. Urutan singkatnya seperti di gambar di atas:

  • ClientHello — browser mengirim daftar versi dan cipher suite yang didukung, plus sebuah kunci publik sementara.
  • ServerHello + sertifikat — server memilih cipher, mengirim kunci publiknya sendiri, dan menyertakan sertifikat sebagai bukti identitas.
  • Key exchange — kedua belah pihak menghitung kunci rahasia yang sama secara lokal. Kunci privat tidak pernah dikirim lewat jaringan sama sekali.
  • Data terenkripsi — semua trafik berikutnya dienkripsi dengan kunci session itu.

Yang saya garis bawahi: kunci privat tidak pernah melintas jaringan. Keduanya hanya bertukar bahan mentah (kunci publik), lalu menghitung kunci session masing-masing. Karena kunci session dibuat baru tiap koneksi (ephemeral), TLS 1.3 punya sifat perfect forward secrecy — meski kunci privat server besok bocor, trafik hari ini tetap tidak bisa dibuka.

Ada satu fitur kecepatan bernama 0-RTT: klien boleh menempelkan data di flight pertama tanpa menunggu. Tapi RFC 8446 sendiri memperingatkan data 0-RTT lemah secara keamanan — tidak forward secret dan tidak ada jaminan anti-replay, artinya request yang sama bisa diulang penyerang. Pelajarannya bagi saya: kecepatan selalu punya harga, dan protokol yang baik menuliskan batasnya di spesifikasi, bukan menyembunyikannya.

Sertifikat: siapa yang menjamin “ini benar server-nya”

Gembok di browser muncul karena server mengirim sertifikat, dan sertifikat itu ditandatangani oleh Certificate Authority (CA) yang sudah dipercaya sistem kamu. Rantai kepercayanya mirip dompet digital: paspor diterbitan negara, negara dipercaya karena ada perjanjian internasional. Kalau server meniru identitas situs lain, signature tidak cocok dan browser langsung menolak.

Untuk server kecil, Let’s Encrypt membuat sertifikat gratis lewat protokol ACME dengan validasi otomatis. Yang menarik dari perkembangan terbaru: sejak 15 Januari 2026, Let’s Encrypt umumkan ketersediaan umum sertifikat jangka pendek 6 hari (160 jam). Logikanya begini — kalau kunci privat server bocor, sertifikat lama (90 hari) bisa terus dipakai penyerang sampai kedaluwarsa selama mekanisme pencabutan (revocation) yang historisnya tidak andal tidak bekerja. Sertifikat 6 hari memperpendek jendela paparan drastis, dengan catatan renewal harus otomatis. Let’s Encrypt juga menegaskan masa depannya: masa berlaku default akan turun dari 90 ke 45 hari dalam beberapa tahun ke depan. Bagi saya ini sinyal jelas — otomasi sertifikat bukan lagi pilihan, tapi prasyarat.

Versi lama sudah dimatikan — jangan sampai server kita nyangkut

TLS 1.0 (1999) dan 1.1 (2006) resmi didepresiasi RFC 8996 (2021), dan peramban besar sudah mematikan dukungannya jauh sebelum itu: Chrome 84 dan Edge 84 (Juli 2020), Firefox 74 (Maret 2020), serta Safari di rilis macOS/iOS 2020. Artinya kalau server kita masih menawarkan TLS 1.0, peramban modern tidak akan mau konek — dan kalau masih bisa konek, itu justru bendera merah.

Di Nginx, membatasi versi semudah ini:

server {
    listen 443 ssl;
    ssl_protocols TLSv1.2 TLSv1.3;
}

Setelah mengubah konfigurasi, saya selalu verifikasi ulang pakai pemeriksa eksternal (misalnya SSL Server Test Qualys) supaya yakin tidak ada jalur TLS lama yang masih terbuka lewat proxy atau CDN di depan server.

HSTS: memaksa jalur aman

HTTPS saja belum cukup kalau user masih bisa mengetik http:// di address bar — ada jendela pertama yang masih polos. HTTP Strict Transport Security (HSTS, RFC 6797) menyuruh browser: “untuk domain ini, selalu pakai HTTPS, jangan pernah coba HTTP lagi selama X waktu”. Header-nya sederhana, dan ada opsi daftar preload agar perlakuannya berlaku bahkan untuk kunjungan pertama.

Di episode #11 kita sudah bahas session dan cookie — di sini nyambung langsung: cookie login harus selalu punya flag Secure agar hanya dikirim lewat HTTPS, dan HttpOnly agar tidak bisa diintip skrip. Tanpa HTTPS yang benar-benar dipaksa, dua flag itu tidak ada artinya.

Checklist praktis yang saya catat

Dari belajar hari ini, ini daftar yang saya pegang untuk proyek sendiri: minimal TLS 1.2, prioritaskan 1.3; sertifikat gratis dari Let’s Encrypt dengan auto-renew; aktifkan HSTS setelah yakin seluruh aset sudah HTTPS (hati-hati — preload sulit ditarik mundur); set flag Secure + HttpOnly pada cookie sensitif; dan pantau lewat tools eksternal, bukan cuma klaim dari dalam server. TLS mengajarkan saya satu hal: keamanan transport bukan soal enkripsi semata, tapi soal bukti identitas, integritas, dan keputusan sadar mematikan yang lama.

Episode berikutnya kita masuk ke kriptografi dasar — symmetric vs asymmetric, hash, dan digital signature yang selama ini jadi pondasi diam-diam dari semua yang kita bahas hari ini.

Sumber

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses