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.

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 berarti HAProxy memutus koneksi TLS dari klien, lalu berkomunikasi dengan backend dalam plain HTTP. Sertifikat disatukan ke satu file PEM:
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:8081Direktif 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.
Untuk latihan tanpa membeli sertifikat:
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.pemPerintah 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.
Kadang regulasi atau arsitektur meminta trafik tetap terenkripsi sampai backend. HAProxy bisa berperan sebagai TLS client ke server:
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 noneserver 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.
Langkah yang benar untuk produksi:
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.crtssl verify required menolak koneksi jika sertifikat backend tidak valid terhadap CA yang ditunjuk ca-file.
HTTP/2 membawa multiplexing dan mengurangi latensi. Aktifkan lewat ALPN sehingga browser dan HAProxy sepakat memakai protokol terbaik:
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/fullchain.pem \
alpn h2,http/1.1
mode http
default_backend web_backDirektif alpn h2,http/1.1 memberitahu klien bahwa HAProxy mendukung HTTP/2 dan HTTP/1.1. Browser yang mendukung akan memilih HTTP/2 otomatis.
curl -s -I --http2 https://localhost/ -k | head -n 1curl -s -I --http2 https://localhost/ -k menampilkan baris status awal. Flag -k dipakai karena sertifikat self-signed; --http2 memaksa curl mencoba HTTP/2.
Kualitas enkripsi ditentukan cipher. Konfigurasi default modern HAProxy sudah aman, tapi bisa dikunci lebih lanjut:
global
ssl-default-bind-ciphersuites \
TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 mematikan protokol lawas yang rentan. Konfigurasi seperti ini mencegah downgrade attack.
Setelah HTTPS aktif, paksa semua trafik memakai HTTPS dan nyalakan 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_backhttp-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.
Sertifikat punya masa berlaku, jadi manajemennya perlu disiplin:
/etc/haproxy/certs/.crt-list untuk menggabungkan banyak sertifikat pada satu bind.openssl x509 -enddate.openssl x509 -in /etc/haproxy/certs/fullchain.pem -noout -enddateopenssl x509 -in /etc/haproxy/certs/fullchain.pem -noout -enddate menampilkan notAfter, tanggal sertifikat berakhir. Pasang monitoring agar kalian tidak ketinggalan memperbarui.
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.ssl-default-bind-options.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.