Belajar Nginx - Mengamankan NGINX dengan SSL/TLS (HTTPS) & Let's Encrypt
Episode 9 of 21

Belajar Nginx - Mengamankan NGINX dengan SSL/TLS (HTTPS) & Let's Encrypt

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.

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

Pendahuluan

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.

Konsep SSL/TLS & HTTPS

Enkripsi antara Client dan Server

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.

Konfigurasi HTTPS Server Block Manual

Sertifikat dan Kunci

Pertama, siapkan sertifikat dan kunci privat. Untuk produksi, gunakan sertifikat dari CA tepercaya. Untuk percobaan lokal, kalian bisa membuat sertifikat self-signed:

Buat sertifikat self-signed untuk uji coba
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 443

Server block HTTPS memakai directive ssl_certificate dan ssl_certificate_key:

Server block HTTPS manual
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.

Otomatisasi SSL Gratis dengan Certbot

Instalasi Certbot dan Plugin NGINX

Let's Encrypt memberikan sertifikat gratis yang valid 90 hari. Certbot mengotomatiskan penerbitan dan pemasangannya:

Install certbot di Ubuntu
sudo apt install certbot python3-certbot-nginx -y

Pastikan DNS domain sudah mengarah ke IP server dan port 80 dapat diakses dari internet, karena proses verifikasi membutuhkan akses HTTP.

Terbitkan Sertifikat Sekali Perintah

Jalankan certbot dengan plugin NGINX:

Terbitkan sertifikat Let's Encrypt
sudo certbot --nginx -d example.com -d www.example.com

Certbot 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.

Otomatisasi Perpanjangan Sertifikat

Auto-Renewal dengan Timer systemd

Sertifikat Let's Encrypt berlaku 90 hari, jadi perpanjangan harus otomatis. Certbot menyediakan timer systemd:

Aktifkan auto-renewal
sudo systemctl enable --now certbot.timer
sudo systemctl list-timers certbot.timer

certbot.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:

Simulasi perpanjangan
sudo certbot renew --dry-run

certbot renew --dry-run memastikan seluruh pipeline perpanjangan bekerja sebelum benar-benar dibutuhkan.

Redirect HTTP ke HTTPS

Server Block untuk Port 80

Setiap domain yang memakai HTTPS juga harus menangani request HTTP. Cara paling umum:

Redirect HTTP ke HTTPS
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.

Verifikasi Pengamanan

Cek Handshake dan Header

Setelah konfigurasi aktif, verifikasi dari sisi klien:

Verifikasi HTTPS
curl -I https://example.com
curl -I http://example.com

Respons HTTPS harus menampilkan HTTP/2 200, dan request HTTP harus di-redirect dengan 301. Seluruh trafik kini terenkripsi.

Penutup

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:

  • HTTPS adalah HTTP yang dienkripsi dengan TLS, dibuktikan lewat sertifikat.
  • listen 443 ssl; bersama ssl_certificate dan ssl_certificate_key membuat HTTPS manual.
  • Certbot menerbitkan sertifikat Let's Encrypt gratis dengan certbot --nginx.
  • Auto-renewal berjalan otomatis lewat timer certbot.timer.
  • certbot renew --dry-run menguji pipeline perpanjangan.
  • Redirect HTTP ke HTTPS memakai 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.