Nginx Node Js Dan Https Dengan Lets Encrypt
--- layout: post title: Nginx, Node.JS dan HTTPS dengan Let's Encrypt date: 2016-06-22 11:06:54.000000000 +07:00 type: post published: true status: publish categories: - GNU/Linux - Networking - Security - Server tags: - Lets Encrypt - Nginx - node.JS - SSL - webJadi sebenernya saya sudah cukup sering untuk membuat sertifikat SSL dengan menggunakan Let's Encrypt, lalu mengkonfigurasikan sertifikat SSL dengan menggunakan Nginx yang berfungsi sebagai Reverse Proxy dari aplikasi yang berbasis Node.JS. Jadi tulisan ini sekaligus sebagai pengingat saya biar gampang nyarinya. Saya ini suka gampang lupa soalnya. :D
Memasang Let's Encrypt
Pada tulisan ini saya menggunakan Debian Jessie sebagai host saya. Aktifkan repositori jessie-backports karena sudah tersedia aplikasi klien untuk Let's Encrypt. Untuk mengaktifkannya bisa dilihat pada halaman ini.
sudo apt-get install certbot -t jessie-backports
Membuat sertifikat SSL
Jalankan perintah berikut untuk mendapatkan sertifikat SSL. Pastikan untuk menyesuaikan domain website sesuai dengan yang digunakan. Sebagai catatan, kasus saya saat ini membuat sebuah sertifikat untuk 2 alamat website, karena mempunyai konfigurasi yang sama.
certbot certonly --standalone -d www.example.com -d example.com
Jika sukses, sertifikat akan berada pada direktori /etc/letsencrypt/live/example.com.
Konfigurasi Nginx
Konfigurasi berkas untuk domain yang telah di buat tadi. Saya membuat berkas baru, yaitu /etc/nginx/sites-available/example.com.
server { listen 80; server_name example.com www.example.com; # redirect all urls to https return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name example.com www.example.com; # add Strict-Transport-Security to prevent man in the middle attacks add_header Strict-Transport-Security "max-age=31536000"; # ssl certificate config ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; error_log /var/log/nginx/example-com.error.log; access_log /var/log/nginx/example-com.access.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:your-port; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
Beberapa catatan tentang konfigurasi di atas:
- Konfigurasi di atas berfungsi sebagai reverse proxy.
- Sesuaikan nama domain dan juga letak berkas sertifikat.
- Pastikan mengganti your-port dengan port yang sesuai.
- Otomatis melempar request http ke https.
Buat symbolic link dari berkas yang dibuat di atas, agar aktif.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
Pastikan memuat ulang konfigurasi Nginx.
sudo systemctl restart nginx.service
Ujicoba Konfigurasi Nginx + SSL
SSL Labs menyediakan audit untuk SSL secara gratis dan lengkap.
Selanjutnya ngoprek biar webnya lebih aman dan maknyus.
Salam,
Moko yang lagi galau.
Referensi
[0] https://letsencrypt.org/
[1] https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04
[2] https://www.smalldata.tech/blog/nginx-nodejs-and-https-via-letsencrypt