Episode ini menjelaskan konsep SSL/TLS dan HTTPS, server block HTTPS manual, otomatisasi sertifikat gratis dengan Certbot dan Let's Encrypt, auto-renewal, serta redirect HTTP ke HTTPS.

Situs tanpa HTTPS adalah undangan bagi penyadap. Data yang dikirim bisa dibaca dan diubah di tengah jalan. Episode 9 ini membahas SSL/TLS dan HTTPS di NGINX, mulai dari konsep dasar hingga otomatisasi sertifikat gratis dengan Let's Encrypt.
Kalian akan menulis server block HTTPS secara manual, membuat sertifikat gratis dengan Certbot, menyiapkan perpanjangan otomatis, dan mengalihkan seluruh trafik HTTP ke HTTPS. Di akhir episode, domain kalian akan aman dengan rating keamanan yang layak dipamerkan.
HTTPS adalah HTTP di atas lapisan TLS. Sebelum data apa pun dikirim, client dan server melakukan TLS handshake: mereka bertukar kunci, memverifikasi identitas server lewat sertifikat, dan membangun saluran terenkripsi. Setelah itu, semua data lalu lintas tidak bisa dibaca atau diubah oleh pihak ketiga.
Sertifikat diterbitkan oleh Certificate Authority (CA) yang dipercaya browser. Browser memverifikasi bahwa sertifikat tersebut valid untuk domain yang dikunjungi, sehingga klien yakin berkomunikasi dengan server yang benar.
Pertama, siapkan sertifikat dan kunci privat. Untuk produksi, gunakan sertifikat dari CA tepercaya. Untuk percobaan lokal, kalian bisa membuat sertifikat self-signed:
sudo openssl req -x509 -nodes -newkey rsa:2048 \
-keyout /etc/ssl/private/example.key \
-out /etc/ssl/certs/example.crt \
-days 365 -subj "/CN=example.com"Server block HTTPS memakai directive ssl_certificate dan ssl_certificate_key:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
root /var/www/example;
index index.html;
}listen 443 ssl; mengaktifkan TLS di port 443. Setelah mengedit, jalankan nginx -t dan reload.
Let's Encrypt memberikan sertifikat gratis yang valid 90 hari. Certbot mengotomatiskan penerbitan dan pemasangannya:
sudo apt install certbot python3-certbot-nginx -yPastikan DNS domain sudah mengarah ke IP server dan port 80 dapat diakses dari internet, karena proses verifikasi membutuhkan akses HTTP.
Jalankan certbot dengan plugin NGINX:
sudo certbot --nginx -d example.com -d www.example.comCertbot akan memverifikasi kepemilikan domain, menerbitkan sertifikat, mengubah konfigurasi NGINX secara otomatis, dan menambahkan redirect HTTP ke HTTPS. Perintah certbot --nginx juga menyimpan pengaturan perpanjangan otomatis.
Sertifikat Let's Encrypt berlaku 90 hari, jadi perpanjangan harus otomatis. Certbot menyediakan timer systemd:
sudo systemctl enable --now certbot.timer
sudo systemctl list-timers certbot.timercertbot.timer menjalankan perpanjangan dua kali sehari dan hanya memperbarui sertifikat yang tersisa kurang dari 30 hari. Setelah perpanjangan sukses, Certbot otomatis me-reload NGINX.
Untuk menguji alur perpanjangan tanpa benar-benar memperbarui:
sudo certbot renew --dry-runcertbot renew --dry-run memastikan seluruh pipeline perpanjangan bekerja sebelum benar-benar dibutuhkan.
Setiap domain yang memakai HTTPS juga harus menangani request HTTP. Cara paling umum:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}Directive return 301 https://$host$request_uri; memindahkan semua request HTTP ke HTTPS dengan status permanen. Variabel $host dan $request_uri menjaga domain dan path tetap utuh. Ini juga yang dilakukan Certbot secara otomatis saat kalian memakai --nginx.
Setelah konfigurasi aktif, verifikasi dari sisi klien:
curl -I https://example.com
curl -I http://example.comRespons HTTPS harus menampilkan HTTP/2 200, dan request HTTP harus di-redirect dengan 301. Seluruh trafik kini terenkripsi.
Episode 9 menutup celah keamanan terbesar: kalian memahami konsep TLS, menulis server block HTTPS manual, menerbitkan sertifikat gratis dengan Certbot dan Let's Encrypt, menyiapkan auto-renewal, dan mengalihkan semua trafik ke HTTPS.
Inti yang harus dibawa pulang:
listen 443 ssl; bersama ssl_certificate dan ssl_certificate_key membuat HTTPS manual.certbot --nginx.certbot.timer.certbot renew --dry-run menguji pipeline perpanjangan.return 301 https://$host$request_uri;.Di episode 10 selanjutnya kita akan membahas SSL/TLS security hardening dan protocols — mengaktifkan HTTP/2 dan HTTP/3, membatasi ssl_protocols dan ssl_ciphers, menyalakan HSTS, OCSP stapling, dan custom DH parameters.