Belajar HAProxy - SSL/TLS & Security
Episode 8 of 23

Belajar HAProxy - SSL/TLS & Security

Episode ini membawa HAProxy masuk ke dunia HTTPS: TLS termination di edge, re-encryption ke backend, dukungan HTTP/2 lewat ALPN, tuning cipher suite dan HSTS, serta praktik manajemen sertifikat yang benar untuk produksi.

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

Pendahuluan

HTTP tanpa enkripsi tidak lagi bisa diterima. Episode 8 mengubah HAProxy menjadi edge TLS yang aman: membuka koneksi HTTPS, menjaga keamanan cipher, dan meneruskan trafik ke backend dengan pilihan plain atau tetap terenkripsi.

Kalian akan membangun tiga lapisan: TLS termination untuk klien, re-encryption menuju backend bila diperlukan, dan kebijakan keamanan seperti HTTP/2, cipher suite yang ketat, serta HSTS.

TLS Termination

Memasang Sertifikat di Frontend

TLS termination berarti HAProxy memutus koneksi TLS dari klien, lalu berkomunikasi dengan backend dalam plain HTTP. Sertifikat disatukan ke satu file PEM:

TLS termination di frontend
frontend https_front
    bind *:443 ssl crt /etc/haproxy/certs/fullchain.pem
    mode http
    default_backend web_back
 
backend web_back
    server web1 127.0.0.1:8080
    server web2 127.0.0.1:8081

Direktif bind *:443 ssl crt /etc/haproxy/certs/fullchain.pem mendengarkan di port 443 dengan SSL aktif dan memakai file sertifikat. Backend menerima plain HTTP, sehingga beban TLS sepenuhnya di HAProxy.

Membuat Sertifikat Self-Signed untuk Latihan

Untuk latihan tanpa membeli sertifikat:

Buat sertifikat self-signed
mkdir -p /etc/haproxy/certs
openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout /etc/haproxy/certs/key.pem \
  -out /etc/haproxy/certs/cert.pem -days 365 \
  -subj "/CN=localhost"
cat /etc/haproxy/certs/cert.pem /etc/haproxy/certs/key.pem \
  > /etc/haproxy/certs/fullchain.pem

Perintah openssl req -x509 -newkey rsa:2048 -nodes membuat pasangan kunci dan sertifikat. Urutan cat di atas menyatukan sertifikat dan kunci karena HAProxy mengharapkan keduanya dalam satu file.

Re-encryption ke Backend

Mengapa Backend Tetap Perlu TLS

Kadang regulasi atau arsitektur meminta trafik tetap terenkripsi sampai backend. HAProxy bisa berperan sebagai TLS client ke server:

Re-encryption menuju backend
frontend https_front
    bind *:443 ssl crt /etc/haproxy/certs/fullchain.pem
    mode http
    default_backend secure_back
 
backend secure_back
    server api1 10.0.0.11:8443 ssl verify none
    server api2 10.0.0.12:8443 ssl verify none

server api1 10.0.0.11:8443 ssl verify none membuka koneksi TLS ke backend tanpa memverifikasi sertifikat. Di produksi, sebaiknya ganti dengan verify required dan ca-file agar sertifikat backend divalidasi.

Verifikasi Sertifikat Backend

Langkah yang benar untuk produksi:

Verifikasi sertifikat backend
backend secure_back
    server api1 10.0.0.11:8443 ssl verify required \
        ca-file /etc/ssl/certs/ca-certificates.crt
    server api2 10.0.0.12:8443 ssl verify required \
        ca-file /etc/ssl/certs/ca-certificates.crt

ssl verify required menolak koneksi jika sertifikat backend tidak valid terhadap CA yang ditunjuk ca-file.

HTTP/2 dan ALPN

Mengaktifkan HTTP/2

HTTP/2 membawa multiplexing dan mengurangi latensi. Aktifkan lewat ALPN sehingga browser dan HAProxy sepakat memakai protokol terbaik:

Aktifkan HTTP/2 via ALPN
frontend https_front
    bind *:443 ssl crt /etc/haproxy/certs/fullchain.pem \
        alpn h2,http/1.1
    mode http
    default_backend web_back

Direktif alpn h2,http/1.1 memberitahu klien bahwa HAProxy mendukung HTTP/2 dan HTTP/1.1. Browser yang mendukung akan memilih HTTP/2 otomatis.

Memverifikasi Protokol

Cek protokol yang dipakai
curl -s -I --http2 https://localhost/ -k | head -n 1

curl -s -I --http2 https://localhost/ -k menampilkan baris status awal. Flag -k dipakai karena sertifikat self-signed; --http2 memaksa curl mencoba HTTP/2.

Tuning Cipher dan HSTS

Cipher Suite yang Ketat

Kualitas enkripsi ditentukan cipher. Konfigurasi default modern HAProxy sudah aman, tapi bisa dikunci lebih lanjut:

Tuning SSL default
global
    ssl-default-bind-ciphersuites \
        TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384
    ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11

ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 mematikan protokol lawas yang rentan. Konfigurasi seperti ini mencegah downgrade attack.

HSTS dan Redirect Paksa

Setelah HTTPS aktif, paksa semua trafik memakai HTTPS dan nyalakan HSTS:

Redirect HTTP ke HTTPS plus HSTS
frontend http_front
    bind *:80
    mode http
    http-request redirect scheme https unless { ssl_fc }
 
frontend https_front
    bind *:443 ssl crt /etc/haproxy/certs/fullchain.pem
    mode http
    http-request set-header Strict-Transport-Security \
        "max-age=31536000"
    default_backend web_back

http-request redirect scheme https unless { ssl_fc} memindahkan semua request HTTP ke HTTPS. Perhatikan bahwa kondisi unless memakai ekspresi ACL ssl_fc yang bernilai benar saat koneksi sudah lewat TLS.

Manajemen Sertifikat

Struktur Berkas dan Rotasi

Sertifikat punya masa berlaku, jadi manajemennya perlu disiplin:

  • Simpan semua sertifikat dalam satu direktori, misalnya /etc/haproxy/certs/.
  • Gunakan crt-list untuk menggabungkan banyak sertifikat pada satu bind.
  • Pantau tanggal kedaluwarsa dengan openssl x509 -enddate.
Cek tanggal kedaluwarsa sertifikat
openssl x509 -in /etc/haproxy/certs/fullchain.pem -noout -enddate

openssl x509 -in /etc/haproxy/certs/fullchain.pem -noout -enddate menampilkan notAfter, tanggal sertifikat berakhir. Pasang monitoring agar kalian tidak ketinggalan memperbarui.

Penutup

Episode 8 mengubah HAProxy menjadi edge TLS yang bisa dipercaya: termination yang meringankan backend, re-encryption bila diminta, HTTP/2 untuk performa, dan kebijakan cipher yang ketat.

Inti yang harus dibawa pulang:

  • bind ... ssl crt file.pem untuk TLS termination.
  • ssl verify required dan ca-file untuk re-encryption yang aman.
  • alpn h2,http/1.1 mengaktifkan HTTP/2.
  • Matikan protokol lawas dengan ssl-default-bind-options.
  • HSTS dan redirect paksa membuat HTTPS menjadi satu-satunya jalur.
  • Pantau kedaluwarsa sertifikat secara rutin.

Di episode 9 selanjutnya kita akan membahas advanced configuration & runtime API — memakai stats socket untuk konfigurasi dinamis, mengelola weight dan draining server saat berjalan, serta stick table untuk rate limiting dan keamanan.

Belajar HAProxy - SSL/TLS & Security | Belajar HAProxy