Cara Install dan Konfigurasi Let's Encrypt di Server Nginx

Jumat, 13 Januari 2017

Cara Install dan Konfigurasi Let's Encrypt di Server Nginx - Kali ini kita akan membahas cara pemasangan SSL gratis dari Let's Encrypt pada server Nginx. Mungkin ada yang lebih simple seperti SSL dari Cloudflare, namun kekurangannya saat kalian memilih free plan, akses SSL nya terbatas dan situs tidak bisa diakses di browser tertentu.
Namun dengan Let's Encrypt batasan batasan tersebut tidak ada.



Dalam tutorial kali ini saya menggunakan Ubuntu 16.04 dengan webserver Nginx. 
Oke langsung saja ke langkah langkahnya.

Pertama kita install certbot.
sudo apt-get update
sudo apt-get install certbot
Disini kita menggunakan Webroot Plugin untuk mendapatkan sertifikat SSL dari Lets Encrypt. Cara kerjanya sendiri dengan meletakkan beberapa kode spesial di folder /.well-known pada rootpath domain yang akan diberi SSL.

Sehingga kita harus memastikan folder tersebut terbaca . Edit melalui server block nginx .
sudo nano /etc/nginx/sites-available/domain.com
Lalu masukkan kode berikut kedalam server block nya :
 location ~ /.well-known {
                allow all;
        }
Pastikan juga untuk root path domainnya tidak salah. Kalau sudah, kita test dulu apakah konfigurasinya sudah benar.
sudo nginx -t
Kalo sudah "ok" semua, kita reload nginx nya.
sudo service nginx reload
Sekarang ke tahap untuk mendapatkan sertifikat SSL nya :
sudo certbot certonly -a webroot --webroot-path=/var/www/domain.com/ -d domain.com --email email@domain.com --agree-tos --rsa-key-size 4096
Sesuaikan sendiri untuk situs dan juga root path nya. Jangan salah.

Jika sudah, maka sertifikat yang dibuat terletak di direktori /etc/letsencrypt .
sudo ls -l /etc/letsencrypt/live/domain.com 

Disini nantinya kita akan mengatur server agar menggunakan fullchain.pem sebagai sertifikat dan privkey.pem sebagai kuncinya.
Untuk tambahan security, kalian juga bisa menambahkan key exchange Diffie–Hellman.
openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Pada tahap ini kita akan mengkonfigurasi agar Nginx menggunakan sertifikat SSL yang telah dibuat.
Buat sebuat file konfigurasi di /etc/nginx/snippets/.
sudo nano /etc/nginx/snippets/ssl-domain.com.conf
Lalu masukkan isinya :
  ssl_protocols TLSv1.2 TLSv1.3;          # TLS 1.3 requires nginx >= 1.13.0
  ssl_dhparam /etc/ssl/certs/dhparam.pem; # openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_prefer_server_ciphers off;
  ssl_ecdh_curve secp384r1;               # Requires nginx >= 1.1.0
  ssl_session_timeout  10m;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;                # Requires nginx >= 1.5.9
  ssl_early_data off;                     # 0-RTT, enable if desired - Requires nginx >= 1.15.4
  resolver_timeout 5s;

# SSL Certificate Location
  ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/domain.com/chain.pem;

# Enable SSL OCSP Stapling
  ssl_stapling on;                        # Requires nginx >= 1.3.7
  ssl_stapling_verify on;                 # Requires nginx => 1.3.7
  resolver 1.1.1.1 valid=300s;            # Replace with your local resolver
Setelah di save kita edit serverblock nya.
sudo nano /etc/nginx/sites-available/domain.com
Disini saya melakukan setting agar dari port http langsung diredirrect ke https. Langsung saja ikuti kode dibawah. Sesuaikan sendiri :)
server {
	listen 80;
	server_name domain.com;
	return 301 https://$server_name$request_uri;
  }
server {
	listen 443 ssl http2;
	server_name domain.com;
	include snippets/ssl-domain.com.conf;

	root /var/www/domain.com;
	index index.php index.html index.htm;
...................................
Test kembali apa ada yang error dengan konfigurasi nginx nya.
sudo nginx -t
Jika sudah benar, reload nginx.
sudo service nginx reload
Seharusnya sekarang saat kalian mengakses situs sudah dialhkan ke https dari Let's Encrypt.

Auto Renew Certificate
Untuk setting di servernya memang sudah selesai. Namu perlu diketahui bahwa sertifikat letsencrypt hanya berlaku 90 hari. Disini kita akan menggunakan cronjob untuk mengatur agar letsencrypt diperbaharui secara teratur.
sudo crontab -e
Lalu masukkan baris berikut :
0 0 1 * * /usr/bin/certbot renew >> /var/log/le-renew.log && /bin/systemctl restart nginx
Untuk renew certificate cukup jalankan perintah certbot renew, dan diikuti dengan merestart service web server agar perubahan langsung dikenali. Cronjob diatas akan dieksekusi setiap tanggal 1 jam 00:00 setiap bulan.

Sekian tutorial kali ini semoga bermanfaat, jangan sungkan untuk bertanya jika ada yang dirasa susah. :)

Artikel Terkait Linux ,Nginx ,Security ,Server