Install SSL di NGINX

Install SSL dengan Let’s Encrypt di NGINX

Posted on

Pada tulisan saya yang lalu, sebenarnya kita sudah pernah install SSL dengan Let’s Encrypt di NGINX untuk portainer. Sama seperti sebelumnya, SSL (Secure Socket Layer) yang akan kita gunakan adalah dari Let’s Encrypt Certificate yang bisa kita dapatkan secara gratis.

Let’s Encrypt sendiri adalah sebuah organisasi non-profit dari Linux Foundation yang menyediakan SSL secara gratis dengan enkripsi standar untuk seluruh pemilik website. SSL ini memiliki validasi waktu 90 hari dan menggunakan protokol ACME (Automatic Certificate Management Environment) yang dapat dipembaruan secara otomatis setiap 90 hari menggunakan cron job.

Pada kali ini kita akan meng-install SSL Let’s Encrypt pada web server Nginx pada sistem operasi AlmaLinux 8.6 yang merupakan suksesor dari CentOS.

1. Install Certbot Let’s Encrypt Client

Sebleum menginstall Let’s Encrypt Client sebaiknya kita memperbarui package yang ada pada server agar up-to-date terlebih dahulu.

# dnf update -y
Last metadata expiration check: 1:13:35 ago on Fri Jul 1 08:40:47 2022.
Dependencies resolved.
Nothing to do.
Complete!

Kemudian kita perlu menambahkan repositori bernama EPEL Repository, agar bisa menginstall Let’s Encrypt Client, yaitu Certbot.

# dnf install epel-release

Selanjutnya menginstall Certbot.

# dnf install certbot python3-certbot-nginx

2. Update Firewall Rules

Jika kita mengaktifkan firewalld, sebaiknya pastikan bahwa port http dan https sudah bisa diakses. Untuk melihat firewall rules, jalankan perintah.

# firewall-cmd --permanent --list-all

Jika belum ada port http dan https terbuka, silahkan tambahkan perintah dibawah ini.

# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=https

kemudian apply rule yang baru kita tambahkan tadi dengan perintah.

# firewall-cmd --reload

3. Install Sertifikat SSL

Pada tahap ini pastikan kita sudah mengkonfigurasi domain pada nginx sistem operasi yang kita gunakan. Dalam kasus ini kita akan menggunakan domain saitama.eu.org dan saya sudah membuat vhost dan mengkatifkan domainnya.

Konfigurasi vhost

server {
listen 80;
listen [::]:80;
server_name saitama.eu.org;
root /usr/share/nginx/html;

location / {
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

Menginstall sertifikat

# certbot --nginx -d nvps.saitama.eu.org
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): aditya@perdana.my.id

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Account registered.
Requesting a certificate for nvps.saitama.eu.org
...

Ikut saja intruksinya sampai dengan selesai, sampai dengan status

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://saitama.eu.org
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Sampai disini, silahkan coba akses domain kita, dan pastikan sudah secure koneksinya dengan https. Sebagai informasi certbot mengenerate file certificate pada directory /etc/letsencrypt/live diikuti dengan dicretory nama domain kita.

4. Setting Auto-Renewal Sertifikat SSL

Sertifikat Let’s Encrypt berlaku selama 90 hari, tetapi sebaiknya sebelum masa aktifnya habis kita bisa memperpanjangnya dengan menggunakan cron job. Untuk melakukan test perpanjangan sertifikat SSL bisa mengugnakan perintah.

# certbot renew --dry-run

Selanjutnya untuk membuat sertifikat kita akan diperpanjang otomatis, jalankan perintah

# crontab -e

kemudian tambahkan baris baru, seperti berikut.

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet

Baris cron job diatas akan dijalankan pada siang dan tengah malam setiap harinya untuk mengecek sertifikat SSL kita yang akan kadaluarsa.

Semoga bermanfaat.