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.