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.
Contents
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.crtdanselfsigned.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 HTTPSssl_certificate→ path sertifikat publikssl_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 kecepatanssl_protocols→ hanya protokol amanssl_ciphers→ cipher yang kuat dan amanssl_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 tahunincludeSubDomains→ 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:
- Mengamankan data client-server dengan enkripsi
- Menggunakan sertifikat self-signed atau Let’s Encrypt
- Redirect seluruh traffic HTTP ke HTTPS
- Optimasi TLS untuk protokol, cipher, dan performa
- Menambahkan HSTS dan security headers untuk perlindungan tambahan
Konfigurasi ini penting untuk keamanan, kepercayaan pengguna, dan SEO, karena Google memprioritaskan situs HTTPS.