Imron Rosyadi
Imron Rosyadi Linux Enthusiast! Meringankan beban pekerjaan menuju kebahagiaan yang hakiki.

Ubuntu: Install SSL Lets Encrypt untuk Apache di Ubuntu Server 20.04 TLS


Ubuntu: Install SSL Lets Encrypt untuk Apache di Ubuntu Server 20.04 TLS

Let’s Encrypt merupakan otoritas sertifikat yang dibuat oleh Internet Security Research Group (ISRG). Let’s Encrypt menyediakan sertifikat SSL dengan proses yang lengkap seperti membuat, validasi, instalasi sampai renewal sertifikat SSL.

Secara default masa aktif sertifikat SSL dari Let’s Encrypt memiliki jangka waktu hingga 90 hari. Kita bisa melakukan renewal secara manual maupun otomatis agar sertifikat tetap aktif dan bisa digunakan.

Pada kesempatan kali ini, kita akan membahas cara mengamankan Apache dengan Let’s Encrypt pada Ubuntu Server 20.04. Adapun persyaratan untuk melakukan lab ini yakni sebagai berikut:

Prasyarat

  1. Menggunakan akses root atau user dengan sudo privileges
  2. Domain / subdomain yang sudah dipointing ke IP Public, kita akan menggunakan domain example.id
  3. Sudah terinstall Apache

Apabila Anda belum menginstall Apache, Anda bisa melihat panduan kami sebelumnya pada tautan berikut ini.

Instalasi Certbot

Kita akan menggunakan cerbot untuk mendapatkan sertifikat dari Let’s Encrypt, tool tersebut dapat digunakan untuk melakukan renewal baik manual maupun secara otomatis. Aplikasi certbot juga tersedia pada repository default Ubuntu, oleh karena itu update paket terlebih dahulu dan install certbot.

1
2
ubuntu@tutorialbelajarlinux:~$ sudo apt update
ubuntu@tutorialbelajarlinux:~$ sudo apt install certbot

Generate Grup Diffie-Helman (Dh)

Diffie – Hellman key exchange (DH) merupakan metode pengamanan pertukaran kunci kriptografi dengan aman melalui saluran komunikasi yang tidak aman. Sekarang coba generata key Dh baru dengan ukuran 2048 bit untuk memperkuat keamanan.

1
ubuntu@tutorialbelajarlinux:~$ openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Selain menggunakan ukuran 2048 bit, Anda juga bisa menggunakan 4096 bit. Namun, biasanya hal  tersebut membutuhkan waktu generate yang lama sekitar 30 menit dan tergantung dari sistem entropi.

Mendapatkan Sertifikat Let’s Encrypt

Untuk mendapatkan sertifikat SSL Let’s Encrypt, kita akan menggunakan plugin webroot yang akan bekerja dengan membuat file temporari untuk validasi permintaan domain pada folder ${webroot-path}/.well-known/acme-challenge. Server Let’s Encrypt membuat request HTTP ke file temporari untuk validasi bahwa permintaan domain sebelumnnya sudah benar-benar resolv dimana cerbot berjalan.

Untuk membuat lebih simple, kita akan melakukan mapping semua permintaan HTTP untuk .well-known/acme-challenge ke dalam satu folder /var/lib/letsencrypt.

Jalankan perintah dibawah ini untuk membuat direktori dan memberikan akses write pada user Apache.

1
2
3
ubuntu@tutorialbelajarlinux:~$ sudo mkdir -p /var/lib/letsencrypt/.well-known
ubuntu@tutorialbelajarlinux:~$ sudo chgrp www-data /var/lib/letsencrypt
ubuntu@tutorialbelajarlinux:~$ sudo chmod g+s /var/lib/letsencrypt

Untuk menghindari adanya duplicate script dan memudahkan dalam mengelola konfigurasi, kita bisa membuat file konfigurasi snippet pada file /etc/apache2/conf-available/letsencrypt.conf

1
2
3
4
5
6
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 juga pada file /etc/apache2/conf-available/ssl-params.conf

1
2
3
4
5
6
7
8
9
10
11
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite 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
SSLHonorCipherOrder off
SSLSessionTickets off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

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

Header always set Strict-Transport-Security "max-age=63072000"

Snippet diatas menggunaan chippers yang direkomendasikan oleh Mozilla, mengakifkan OCSP Stappling, HTTP Strict Transport Security (HSTS) dan memberlakukan beberapa header HTTP yang berfokus pada keamanan.

Sebelum mengaktifkan konfigurasi file diatas, pastikan Anda sudah mengaktifkan mod_ssl dan mod_headers dengan perintah:

1
2
ubuntu@tutorialbelajarlinux:~$ sudo a2enmod ssl
ubuntu@tutorialbelajarlinux:~$ sudo a2enmod headers

Selanjutnya, akifkan konfigurasi file SSL dengan menjalankan perintah:

1
2
ubuntu@tutorialbelajarlinux:~$ sudo a2enconf letsencrypt
ubuntu@tutorialbelajarlinux:~$ sudo a2enconf ssl-params

Selain itu, aktifkan modul HTTP/2 juga untuk membuat website lebih cepat dan kuat:

1
ubuntu@tutorialbelajarlinux:~$ sudo a2enmod http2

Reload konfigurasi Apache.

1
ubuntu@tutorialbelajarlinux:~$ sudo systemctl reload apache2

Kita bisa menjalankan tool certbot dengan plugin webroot dan mendapatkan file sertifikat SSL dengan perintah:

1
sudo certbot certonly --agree-tos --email admin@example.id --webroot -w /var/lib/letsencrypt/ -d example.id -d www.example.id

Setelah proses mendapatkan file sertifikat SSL berhasil dan tidak mendapatkan pesan error apapun, maka akan muncul output seperti berikut ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.id/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.id/privkey.pem
   Your cert will expire on 2020-10-06. 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

Selanjutnya, kita akan membuat virtualhost seperti berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<VirtualHost *:80> 
  ServerName example.id

  Redirect permanent / https://example.id/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.id

  Protocols h2 http/1.1

  <If "%{HTTP_HOST} == 'www.example.id'">
    Redirect permanent / https://example.id/
  </If>

  DocumentRoot /var/www/example.id/public_html
  ErrorLog ${APACHE_LOG_DIR}/example.id-error.log
  CustomLog ${APACHE_LOG_DIR}/example.id-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/example.id/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.id/privkey.pem

  # Other Apache Configuration

</VirtualHost>

Pada konfigurasi virtualhost diatas melakukan force akses ke protokol HTTPS dan redirect dari www ke non-www. Silakan disesuaikan untuk kebutuhan konfigurasi virtualhost Anda.

Reload service Apache

1
ubuntu@tutorialbelajarlinux:~$ sudo systemctl reload apache2

Sekarang buka website pada browser Anda, dan nantinya akan menggunakan protokol https seperti pada gambar dibawah ini.

Website dengan protokol HTTPS

Selain itu, Anda juga bisa melihat hasil test sertifikat SSL yang digunakan pada website tersebut pada SSL Server Test dan nantinya hasil akan menunjukkan grade A+ seperti pada gambar dibawah ini.

Hasil pengujian sertifikat SSL

Auto-renew Sertifikat SSL Let’s Encrypt

Secara default sertifikat SSL Let’s Encrypt memiliki masa aktif selama 90 hari, apabila masa aktifnya sudah melewati batas 90 hari, maka sertifikat SSL akan expired. Kita bisa melakukan renewal sertifikat SSL secara manual maupun secara otomatis, untuk mempermudah pekerjaan bisa kita implementasikan cronjob untuk melakukan renewal sertifikat SSL secara otomatis.

Sebagai contoh, cronjob yang digunakan kali ini akan mengeksekusi setiap sehari dua kali dan sertifikat SSL akan diperpanjang secara otomatis sebelum 30 hari masa expired. Setelah menjalankan cronjob, service Apache perlu melakukan reload agar sertifikat SSL berhasil diperpanjang. Oleh karena itu, pada perintah cronjob tersebut akan ditambahkan --renew-hook "systemctl reload apache2" ke /etc/cron.d/certbot seperti berikut:

1
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 apache2"

Untuk menguji perpanjangan sertifikat SSL, Anda bisa menjalankan perintah berikut:

1
ubuntu@tutorialbelajarlinux:~$ sudo certbot renew --dry-run

Apabila tidak terdapat pesan error apapun, berarti perpanjangan sertifikat SSL berhasil.

Kesimpulan

Pembahasan diatas menujukkan panduan untuk membuat sertifikat SSL free dari Let’s Encrypt menggunakan tool certbot. Apabila Anda ingin mempelajari lebih dalam tentang perintah-perintah certbot, bisa melalui tautan berikut ini.

Sekian, dan terima kasih. Semoga bermanfaat dan barokah :)

comments powered by Disqus