Bab 9: SSL/TLS & HTTPS di Nginx – Panduan Lengkap

Bab 9: SSL/TLS & HTTPS di Nginx – Panduan Lengkap

Menggunakan SSL/TLS di Nginx sangat penting untuk keamanan data, kepercayaan pengguna, dan SEO. HTTPS memastikan semua komunikasi antara client dan server terenkripsi dan aman dari intersepsi.


1. Membuat Sertifikat SSL

Ada dua cara membuat sertifikat SSL: self-signed dan Let’s Encrypt.

1.1 Self-Signed Certificate

Digunakan untuk testing atau internal server.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/selfsigned.key \
-out /etc/ssl/certs/selfsigned.crt
  • -x509 → format sertifikat
  • -nodes → tanpa password key
  • -days 365 → berlaku 1 tahun
  • Hasil: selfsigned.crt dan selfsigned.key

1.2 Let’s Encrypt (Gratis)

Menggunakan Certbot untuk sertifikat validasi otomatis:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
  • Certbot akan otomatis membuat sertifikat dan mengkonfigurasi Nginx
  • Sertifikat Let’s Encrypt berlaku 90 hari, dapat diperpanjang otomatis

2. Konfigurasi HTTPS di Nginx

Contoh server block HTTPS:

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    root /var/www/html/example;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
  • listen 443 ssl → port HTTPS
  • ssl_certificate → path sertifikat publik
  • ssl_certificate_key → path private key

3. Redirect HTTP ke HTTPS

Untuk memastikan semua traffic menggunakan HTTPS:

server {
    listen 80;
    server_name example.com www.example.com;

    return 301 https://$host$request_uri;
}
  • return 301 → redirect permanen
  • $request_uri → mempertahankan path dan query string

4. TLS Optimization

Untuk keamanan dan performa, optimasi protokol dan cipher:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
}
  • http2 → protokol modern untuk kecepatan
  • ssl_protocols → hanya protokol aman
  • ssl_ciphers → cipher yang kuat dan aman
  • ssl_prefer_server_ciphers on → gunakan cipher pilihan server
  • Session cache meningkatkan performa TLS handshake

5. HSTS dan Keamanan Tambahan

5.1 HSTS (HTTP Strict Transport Security)

Memaksa browser selalu menggunakan HTTPS:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  • max-age=31536000 → 1 tahun
  • includeSubDomains → semua subdomain ikut dipaksa HTTPS

5.2 Security Headers Tambahan

  • Content Security Policy:
add_header Content-Security-Policy "default-src 'self';" always;
  • X-Frame-Options (Cegah clickjacking):
add_header X-Frame-Options SAMEORIGIN;
  • X-Content-Type-Options:
add_header X-Content-Type-Options nosniff;

6. Contoh Server Block Lengkap HTTPS

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;

    root /var/www/html/example;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

7. Kesimpulan

Dengan SSL/TLS dan HTTPS di Nginx, kamu dapat:

  1. Mengamankan data client-server dengan enkripsi
  2. Menggunakan sertifikat self-signed atau Let’s Encrypt
  3. Redirect seluruh traffic HTTP ke HTTPS
  4. Optimasi TLS untuk protokol, cipher, dan performa
  5. Menambahkan HSTS dan security headers untuk perlindungan tambahan

Konfigurasi ini penting untuk keamanan, kepercayaan pengguna, dan SEO, karena Google memprioritaskan situs HTTPS.