Pengenalan

Let’s Encrypt merupakan SSL yang bersifat open source dengan kata lain dapat digunakan secara gratis. Lets’s Encrypt dikembangkan oleh Internet Security Research Group (ISRG) yang menyediakan SSL secara gratis.

Let’s Encrypt sudah dipercayai oleh semua browser dan masa berlau Let’s Encrypt hanya 90 hari sejak diterbitkan.

Persyaratan Instalasi Let’s Encrypt

  • Pastikan domain atau subdomain yang Anda miliki sudah mengarah (pointing) ke IP VM atau Server yang ingin di install Let’s Encrypt. Disini saya menggunakan subdomain vhost.nurhamim.net
  • Pastikan Anda sudah instalasi web server Apache dan sudah memahami tentang Virtual Host, jika belum silakan mengikuti panduan berikut terlebih dahulu
  • Pastikan port 80 dan 443 sudah di open di sisi Firewall

Install Module Yang Dibutuhkan

Langkah pertama yang harus dilakukan yaitu instalasi paket SSL encrypted web server (mod_ssl, openssl) terlebih dahulu

[[email protected] ~]#
[[email protected] ~]# dnf install mod_ssl openssl -y

Jika paket mod_ssl sudah diinstall selanjutnya membuat key dan certificate untuk localhost gunakan beberapa baris perintah berikut

[[email protected] ~]#
[[email protected] ~]# openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes \
> -out /etc/pki/tls/certs/localhost.crt \
> -keyout /etc/pki/tls/private/localhost.key

Install Certbot

Langkah selanjutnya yaitu install certbot, secara default di CentOS 8 standart untuk paket certbot tidak tersedia di repository.

Dengan demikian Anda dapat mengunguh paket certbot menggunakan wget atau yang lainnya, silakan unduh certbot dan simpan di direktori /usr/local/bin sebagai berikut

[[email protected] ~]#
[[email protected] ~]# wget -P /usr/local/bin https://dl.eff.org/certbot-auto

Jika sudah di unduh, selanjutnya memberikan hak akses terhadap file tersebut supaya dapat dieksekusi

[[email protected] ~]#
[[email protected] ~]# chmod +x /usr/local/bin/certbot-auto

Generate Group Dh (Diffie-Hellman)

Diffie–Hellman key exchange (DH) adalah metode pertukaran kunci kriptografis yang aman melalui saluran komunikasi yang tidak aman. Security nya menggunakan 2048 bit untuk DH. Namun Anda juga dapat menggunakan yang 4096 bit namun generate key nya akan memakan waktu sampai 30 menit.

[[email protected] ~]# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Melakukan Enkripsi SSL Let’s Encrypt

Untuk memperoleh sertifikat SSL untuk sebuah domain, kita perlu validasi dan untuk validasi ini bisa menggunakan plugin Webroot yang berfungsi untuk membuat file sementara untuk memvalidasi domain yang diminta oleh direktori ${webroot-path}/ yang biasa disebut dengan /acme-challenge.

Supaya validasi SSL ini menjadi sedeharna kita akan meletakkan /acme-challenge ke direktori Let’s Encrypt /var/lib/letsencrypt.

[[email protected] ~]# mkdir -p /var/lib/letsencrypt/.well-known
[[email protected] ~]# chgrp apache /var/lib/letsencrypt
[[email protected] ~]# chmod g+s /var/lib/letsencrypt
[[email protected] ~]#

Silakan buat vhost untuk validasi letsencrypt

[[email protected] ~]# vim /etc/httpd/conf.d/letsencrypt.conf

Isi dengan file berikut

Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

Dan silakan buat vhost untuk SSL params untuk validasi DH sebelumnya yang sudah dibuat

[[email protected] ~]# vim /etc/httpd/conf.d/ssl-params.conf
[[email protected] ~]#

Isi dengan file berikut

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
# Requires Apache 2.4.36 & OpenSSL 1.1.1
SSLProtocol -all +TLSv1.3 +TLSv1.2
SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
# Older versions
# SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

Konfigurasi di atas menggunakan chipper, dimana hal ini telah direkomendasikan oleh Cipherli.st dan mengaktifkan OCSP Stapling, HTTP Strict Transport Security (HSTS), Dh key, dan fokus ke sisi keamanan HTTP headers.

Langkah selanjutnya melakukan restart service apache (web server)

[[email protected] ~]# systemctl reload httpd
[[email protected] ~]#

Jika sudah silakan jalankan perintah berikut, untuk installasi SSL Let’s Encrypt nya

[[email protected] ~]# /usr/local/bin/certbot-auto certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d vhost.nurhamim.net

Catatan:

Silakan sesuaikan untuk nama domain atau subdomain yang ingin Anda gunakan.

Jika tidak terdapat kendala, maka akan terdapat informasi seperti berikut, yang menjelaskan kalau instalasi SSL nya sudah berhasil

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/vhost.nurhamim.net/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/vhost.nurhamim.net/privkey.pem
   Your cert will expire on 2020-06-08. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto 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

[[email protected] ~]#

Selanjutnya membuat vhost untuk domain atau subdomain yang Anda gunakan

[[email protected] ~]#
[[email protected] ~]# vim /etc/httpd/conf.d/example.com.conf
<VirtualHost *:80>
  ServerName vhost.nurhamim.net
  Redirect permanent / https://vhost.nurhamim.net/
</VirtualHost>

<VirtualHost *:443>
  ServerName vhost.nurhamim.net
  Protocols h2 http:/1.1

  <If "%{HTTP_HOST} == 'www.vhost.nurhamim.net'">
    Redirect permanent / https://vhost.nurhamim.net/
  </If>

  DocumentRoot /var/www/vhost.nurhamim.net/public_html
  ErrorLog /var/log/httpd/vhost.nurhamim.net.com-error.log
  CustomLog /var/log/httpd/vhost.nurhamim.net-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/vhost.nurhamim.net/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/vhost.nurhamim.net/privkey.pem

  # Other Apache Configuration

</VirtualHost>

Catatan:

Silakan sesuaikan untuk nama domain atau subdomain yang Anda gunakan.

Langkah selanjutnya membuat website sederhana menggunakan html untuk memastikan virtualhost beserta SSL sudah berjalan dengan normal

[[email protected] ~]# cd /var/www/
[[email protected] www]# mkdir vhost.nurhamim.net
[[email protected] www]# mkdir vhost.nurhamim.net/public_html
[[email protected] www]# cd vhost.nurhamim.net/public_html/
[[email protected] public_html]# vim index.html

Isikan dengan script html berikut

<html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
Test Page SSL Let's Encrypt on CentOS 8
</div>
</body>
</html>

Jika sudah silakan restart service web server apache

[[email protected] public_html]# systemctl restart httpd
[[email protected] public_html]#

Jika tidak terdapat kendala, silakan akses domain atau subdomain yang Anda gunakan untuk SSL ini, berikut hasilnya

Jika di test grade SSL menggunakan SSL Server Test by Qualys SSL Labs untuk SSL sudah mendapatkan A+ seperti berikut

Sekian tutorial terkait Instalasi SSL Let’s Encrypt Apache Di CentOS 8 .

Selamat mencoba semoga bermanfaat 👌

See You 😃