Pada artikel lain, saya menjelaskan cara memasang SSL berbayar pada VPS. Nah, kali ini saya akan coba menjelaskan cara memasang SSL free dari Let’s Encrypt pada Debian 10.
Install Certbot
- Seperti biasa, login ke server VPS dulu bisa dengan terminal atau Putty klo kamu pake Windows.
- Biasanya repository Certbot, software yang akan menghasilkan certificate SSL, belum ada dalam daftar repository Debian. Kamu perlu tambahkan dulu repository Certbot
sudo nano /etc/apt/sources.list
kemudian tambahkan pada baris paling bawahdeb http://ftp.debian.org/debian buster-backports main
kemudian save dengan menekan tombol Ctrl + X dan Y. - Kemudian update paket debian
sudo apt update
- Install certbot untuk apache
sudo apt install python-certbot-apache -t buster-backports
Setting SSL Certificate
Saat ini certbot telah terinstall. Sekarang kamu bisa gunakan untuk certbot itu untuk menghasilkan certicificate SSL. Sebelum itu kamu cek dulu virtual host pada apache
- Cek virtual host pada apache. Virtual host apache biasanya terletak di
/etc/apache2/sites-available/nama_domain.conf
edit file itu dengan perintahsudo nano /etc/apache2/sites-available/nama_domain.conf
- Tambah baris berikut
ServerName nama_domain
nama_domain
bisa diganti dengan domainmu. Simpan perubahan itu. - Tes setting virtual host dengan perintah
sudo apache2ctl configtest
Jika benar maka akan muncul
Output
Syntax OK
- Jika setting sudah benar, maka reload apache
sudo systemctl reload apache2
Generate SSL Certificate
Sekarang kamu bisa menggenerate SSL certificate dengan Certbot
- Generate certificate SSL dengan perintah
sudo certbot --apache -d your_domain -d www.your_domain
--apache
karena web server yang saya gunakan adalah apache
-d adalah opsi agar certificate itu valid untuk domain yang kamu sebutkan setelahnyanama_domain
danwww.nama_domain
bisa kamu ganti sesuai dengan nama domainmu. - Certbot akan berkomunikasi dengan server Let’s Encrypt. Kamu akan ditanya alamat email
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):
masukkan saja alamat emailmu - Pada akhir proses generate certificate SSL akan muncul catatan penting seperti berikut
IMPORTANT NOTES:
- Unable to install the certificate
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2020-02-19. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the “certonly” option. 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.
Dari catatan diatas, ternyata Certbot tidak bisa secara otomatis melakukan setting SSL pada virtual host apache di server saya. Mungkin saja di servermu bisa secara otomatis. Sebabnya berbagai macam. Tapi tidak masalah, kita akan melakukannya secara manual.
Walaupun Certbot tidak bisa melakukan setting secara otomatis di virtual host, tapi Certbot berhasil membuat certificat SSL. Certificate SSL itu berada di /etc/letsencrypt/live/your_domain/fullchain.pem
dan private key untuk certificate itu ada di /etc/letsencrypt/live/your_domain/privkey.pem
Nah, lokasi Certificate dan private key ini yang akan kita tambahkan secara manual file ke /etc/apache2/sites-available/nama_domain.conf
Menambahkan Setting SSL pada Virtual Host Apache
Setting SSL pada Apache, saya menggunakan contoh setting yang dihasilkan oleh Mozilla. Kamu bisa mencobanya di sini. Setting ini hanya sebagai referensi. Kamu bisa menghapus baris yang bermasalah jika ternyata error pada server apache di tempatmu karena ada beberapa modul apache yang harus dienable.
Sekarang kita akan mengedit file /etc/apache2/sites-available/nama_domain.conf
. nama_domain.conf diganti dengan nama domain-mu
- Edit nama_domain.conf
sudo nano /etc/apache2/sites-available/nama_domain.conf
- Masukkan blok kode ini
<VirtualHost *:443>
ServerName nama_domain
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/nama_domain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nama_domain/privkey.pem
DocumentRoot /var/www/nama_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# intermediate configuration, tweak to your needs
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA2$
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
nama_domain
agar diganti sesuai nama domainmu
- Kemudian, kamu perlu memaksa browser agar menggunakan SSL karena secara default, web-mu masih menggunakan port 80. Nah, untuk memaksa browser menggunakan SSL, maka tambahkan kode dibawah ini di bagian paling atas file
/etc/apache2/sites-available/nama_domain.conf
<VirtualHost *:80>
ServerName nama_domain
Redirect permanent / https://nama_domain/
</VirtualHost>
nama_domain
agar diganti sesuai nama domainmu.
- Cek apakah kode konfigurasi sudah benar
sudo apache2ctl configtest
- Reload apache
sudo systemctl reload apache2
Cek Certbot Autorenew
SSL certificate Let’s Encrypt hanya berjangka waktu 3 bulan. Walaupun SSL certificate itu gratis tapi kompatibel pada hampir kebanyakan browser modern saat ini.
Untungnya Certbot bisa di program untuk melakukan auto renew terhadap certificate SSL. Cara untuk melakukan auto renew sebagai berikut.
- Untuk ngecek Cert bisa melakukan renew certificate
sudo certbot renew --dry-run
- Untuk membuat cert bisa melakukan auto update secara otomatis
sudo crontab -e
kemudian pada baris paling bawah masukkan kode
15 3 * * * /usr/bin/certbot renew --quiet
Kode di atas artinya, certbot akan melakukan auto renew certificate pada jam 3.15 am setiap hari.