Cara proteksi Nginx dengan Let’s Encrypt di Ubuntu 18.04

Pembahasan dalam tutorial ini akan menunjukkan cara memproteksi Nginx server dengan Let's Encrypt dengan menggunakan certbot tool di Ubuntu 18.04.
0

Let’s Encrypt dikembangkan oleh Internet Security Research Group (ISRG) yang memungkinkan semua website di internet memperoleh sertifikat SSL dengan gratis dan terpercaya.

Pembahasan dalam tutorial ini akan menunjukkan cara memproteksi Nginx server dengan Let’s Encrypt menggunakan certbot tool pada Ubuntu 18.04.

Persiapan

Pastikan beberapa hal berikut ini sudah dilakukan lebih dulu.

  • Domain sudah diset mengarah ke IP server. Artikel ini akan menggunakan domain contoh.com
  • Nginx sudah terpasang. Jika belum, silahkan ikuti langkahnya di artikel ini.

Instalasi Certbot

Certbot adalah tool yang akan memudahkan dalam proses membuat, memperpanjang, dan mengatur penggunaan sertifikat SSL dari Let’s Encrypt.

Untuk mendaftarkan certbot, jalankan perintah berikut secara berurutan. Perintah pada baris terakhir akan membutuhkan waktu yang agak lama, harap sabar menunggu hingga selesai.

sudo apt install certbot
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Pendaftaran sertifikat SSL dari Let’s Encrypt

Jalankan perintah berikut secara berurutan.

mkdir -p /var/lib/letsencrypt/.well-known
chgrp www-data /var/lib/letsencrypt
chmod g+s /var/lib/letsencrypt

Langkah selanjutnya adalah dengan membuat 2 (dua) buah file snippet yang dibutuhkan, yaitu file letsencrypt.conf dan ssl.conf. Untuk membuat file yang pertama, jalankan perintah ini.

vi /etc/nginx/snippets/letsencrypt.conf

Untuk editor teks yang terbuka, salin kode dibawah ini.

Simpan perubahan, dan lanjutkan dengan menjalankan perintah berikut ini untuk membuat file yang kedua.

vi /etc/nginx/snippets/ssl.conf

Untuk editor teks yang terbuka, salin kode berikut.

Simpan perubahan, selanjutnya tambahkan file letsencrypt.conf pada server block milik domain contoh.com

sudo vi /etc/nginx/sites-available/contoh.com

Tambahkan baris kode berikut ini dalam file tersebut.

  include snippets/letsencrypt.conf;

Konfigurasinya akan terlihat seperti ini.

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

  include snippets/letsencrypt.conf;
}

Simpan perubahannya, dan jalankan perintah berikut untuk mengaktifkannya.

sudo ln -s /etc/nginx/sites-available/contoh.com /etc/nginx/sites-enabled/

Jika muncul pesan “File exists” seperti dibawah ini, abaikan saja dan lanjutkan ke langkah berikut. Pesan ini berarti symbolic link untuk file ini sudah ada, dan itu bukanlah sebuah masalah.

ln: failed to create symbolic link '/etc/nginx/sites-enabled/contoh.com': File exists

Langkah berikutnya, restart Nginx.

sudo systemctl restart nginx

Sesudah restart, jalankan perintah berikut untuk mendaftarkan sertifikat SSL untuk server block domain yang baru dibuat diatas.

sudo certbot certonly --agree-tos --email admin@contoh.com --webroot -w /var/lib/letsencrypt/ -d contoh.com -d www.contoh.com

Output yang dihasilkan apabila sertifikat SSL berhasil diperoleh, akan terlihat seperti dibawah ini.

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/contoh.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/contoh.com/privkey.pem
   Your cert will expire on 2019-07-28. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Sekarang setelah sertifikat SSL sudah diperoleh, edit kembali file konfigurasi server block.

sudo vi /etc/nginx/sites-available/contoh.com

Untuk editor teks yang muncul, salin dan update dengan menggunakan kode dibawah ini.

Dengan kode diatas, domain contoh.com akan dipaksa menggunakan https sekaligus redirect akses menggunakan www.contoh.com ke contoh.com (non-www).

Simpan perubahannya dan reload Nginx.

sudo systemctl reload nginx

Buka browser, lalu akses dengan menggunakan https://contoh.com

Perpanjang otomatis sertifikat SSL

Sertifikat SSL Let’s Encrypt berlaku selama 90 hari. Untuk membuatnya otomatis memperpanjang sertifikat yang akan habis masa berlakunya, certbot membuat sebuah cronjob yang berjalan sebanyak 2x tiap hari, dan akan langsung memperpanjang sertifikat yang akan habis masa berlaku dalam 30 hari.

Berikut ini adalah cara untuk membuat cronjob yang akan memperpanjang otomatis sertifikat SSL yang akan expired, sekaligus melakukan reload pada Nginx.

Pertama, edit cronjob milik certbot dengan perintah ini.

sudo vi /etc/cron.d/certbot

Ubah baris cronjob yang sudah ada menjadi seperti dibawah ini.

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

Simpan perubahan diatas, selanjutnya untuk mengecek proses perpanjangan sertifikat SSL, bisa dicoba dengan perintah --dry-run berikut ini.

sudo certbot renew --dry-run

Jika tidak muncul error, maka outputnya akan terlihat seperti ini.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/contoh.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

Penutup

Sampai pada langkah ini, Let’s Encyrpt sudah terpasang dan akan secara otomatis memperpanjang sertifikat SSL sebelum masa aktif berakhir.

Untuk penjelasan detail bagaimana cara pengaturan Server Block milik Nginx, silahkan lihat artikel Cara membuat Server Block Nginx di Ubuntu 18.04.

0
Leave a Reply