Belajar Nginx - SSL/TLS Security Hardening & Protocols (HTTP/2 & HTTP/3)
Episode 10 of 21

Belajar Nginx - SSL/TLS Security Hardening & Protocols (HTTP/2 & HTTP/3)

Episode ini menjelaskan cara mengaktifkan HTTP/2 dan HTTP/3, membatasi ssl_protocols dan ssl_ciphers, serta menerapkan HSTS, OCSP stapling, dan custom DH parameters untuk TLS yang kokoh.

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

Pendahuluan

Memiliki HTTPS itu wajib, tapi tidak cukup. Episode 9 membuat kalian aman; episode 10 ini membuat kalian kuat dan cepat. Kita membahas SSL/TLS security hardening, ditambah protokol modern HTTP/2 dan HTTP/3.

Kalian akan mengaktifkan HTTP/2 yang memultipleks koneksi, menyiapkan HTTP/3 berbasis UDP/QUIC, membatasi protokol TLS hanya ke versi terkuat, memilih cipher suite yang tepat, serta menyalakan HSTS, OCSP stapling, dan custom DH parameters. Di akhir episode, konfigurasi TLS kalian siap menghadapi audit keamanan.

Mengaktifkan Protokol Modern

HTTP/2: Multiplexing Koneksi

HTTP/2 memungkinkan banyak request berjalan paralel dalam satu koneksi TCP, menghilangkan masalah head-of-line blocking versi HTTP/1.1:

Aktifkan HTTP/2
server {
    listen 443 ssl http2;
    server_name example.com;
 
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}

Modifier http2 pada listen cukup untuk mengaktifkannya. Browser modern otomatis bernegosiasi HTTP/2 melalui ALPN saat handshake TLS.

HTTP/3 (QUIC): Berbasis UDP

HTTP/3 dibangun di atas QUIC yang berjalan di UDP. Ia menawarkan latensi lebih rendah dan perpindahan koneksi lebih mulus:

Aktifkan HTTP/3
server {
    listen 443 ssl http2;
    listen 443 quic reuseport;
    server_name example.com;
 
    http3 on;
    ssl_early_data on;
    add_header Alt-Svc 'h3=":443"';
}

listen 443 quic reuseport; membuka listener UDP untuk QUIC, dan http3 on; mengaktifkan protokolnya. Header Alt-Svc memberi tahu browser bahwa HTTP/3 tersedia di port 443.

SSL Protocols dan Cipher Suites

Matikan Protokol Usang

TLS 1.0 dan TLS 1.1 sudah lama tidak aman. Hanya izinkan versi modern:

Batasi versi TLS
server {
    listen 443 ssl http2;
    server_name example.com;
 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
}

ssl_protocols TLSv1.2 TLSv1.3; memblokir protokol lama. Cipher yang dipilih hanya berbasis ECDHE dan AES-GCM, kombinasi tercepat sekaligus terkuat untuk hardware modern.

Custom DH Parameters

Diffie-Hellman parameters memengaruhi kekuatan pertukaran kunci. Hasilkan parameter custom 2048-bit:

Generate DH parameters
sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048

Lalu referensikan di server block:

Pasang dhparam
server {
    listen 443 ssl http2;
    server_name example.com;
 
    ssl_dhparam /etc/nginx/dhparam.pem;
}

openssl dhparam -out /etc/nginx/dhparam.pem 2048 memakan waktu beberapa menit, tapi hasilnya parameter kuat yang unik untuk server kalian.

HSTS (HTTP Strict Transport Security)

Paksa Browser Selalu HTTPS

HSTS memberitahu browser untuk tidak pernah memakai HTTP untuk domain tersebut selama periode tertentu:

Aktifkan HSTS
server {
    listen 443 ssl http2;
    server_name example.com;
 
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
}

Strict-Transport-Security dengan max-age=63072000 (dua tahun), includeSubDomains, dan preload menyingkirkan kemungkinan serangan downgrade ke HTTP. Karena header ini dikirim oleh server HTTPS, jangan aktifkan preload sebelum seluruh subdomain yakin memakai HTTPS.

OCSP Stapling

Percepat Verifikasi Sertifikat

OCSP stapling membuat server menyertakan bukti kevalidan sertifikat langsung saat handshake, sehingga browser tidak perlu bertanya ke CA:

Aktifkan OCSP stapling
server {
    listen 443 ssl http2;
    server_name example.com;
 
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
}

ssl_stapling on; mengaktifkan fitur ini dan resolver menentukan DNS server untuk menemukan OCSP responder.

Konfigurasi TLS Lengkap

Gabungan Semua Hardening

Satu server block yang merangkum semua praktik terbaik:

Server block TLS hardening lengkap
server {
    listen 443 ssl http2;
    listen 443 quic reuseport;
    server_name example.com;
 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_dhparam /etc/nginx/dhparam.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8;
 
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
 
    http3 on;
    ssl_early_data on;
    add_header Alt-Svc 'h3=":443"';
}

Uji konfigurasi dengan nginx -t, reload, dan gunakan curl -I https://example.com untuk memastikan HTTP/2 dan Alt-Svc muncul di respons.

Penutup

Episode 10 menuntaskan lapisan keamanan TLS: kalian mengaktifkan HTTP/2 dan HTTP/3, membatasi protokol dan cipher ke yang terkuat, memasang custom DH parameters, menyalakan HSTS dan OCSP stapling, serta merangkumnya dalam satu konfigurasi yang kokoh.

Inti yang harus dibawa pulang:

  • listen 443 ssl http2; mengaktifkan HTTP/2; http3 on; mengaktifkan HTTP/3.
  • ssl_protocols TLSv1.2 TLSv1.3; memblokir protokol usang.
  • Cipher berbasis ECDHE dan AES-GCM adalah pilihan terbaik untuk hardware modern.
  • ssl_dhparam memperkuat pertukaran kunci Diffie-Hellman.
  • HSTS memaksa browser selalu memakai HTTPS dalam periode tertentu.
  • OCSP stapling mempercepat dan mengamankan verifikasi sertifikat.

Di episode 11 selanjutnya kita akan membahas security hardening dan rate limiting — menyembunyikan versi NGINX, kontrol akses berbasis IP, rate limiting request dan koneksi, security headers, serta batas ukuran body untuk mitigasi DDoS dan brute-force.

Belajar Nginx - SSL/TLS Security Hardening & Protocols (HTTP/2 & HTTP/3) | Belajar Nginx