Setting SSL Sertifikat dan Virtual Host di Linux

Pada posting sebelumnya telah dibahas bagaimana cara mendapatkan ssl gratis. Tulisan tersebut dengan asumsi Anda bukan sebagai admin Server, maka di akhir tulisan saya menyarankan untuk meminta bantuan admin agar ssl tersebut terimplementasi dengan baik.
Nah, pada posting kali ini saya ingin membahas lebih lanjut bagaimana cara install ssl sertifkat pada server Linux dengan asumsi Anda sebagai seorang Linux Administrator atau mempunyai hak akses sebagai root.
Sebelum membahas install ssl, saya ingin menyinggung terlebih dahulu bagaimana membuat virtual host di Linux dengan menggunakan Apache. Hal ini karena ssl tidak akan berjalan tanpa adanya virtual host bukan?
Setting Virtual Host
Walaupun distro Linux yang digunakan adalah Ubuntu 16.04, seharusnya setting virtual host ini berlaku juga pada distro lainnya dengan sedikit penyesuaian dalam command.
Langkah pertama adalah copy paste virtual host default dengan perintah sebagai berikut:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/sulhi.id.conf
Selanjutnya buka dan edit file tersebut dan sesuaikan dengan letak root directory di mana domain ditempatkan.
<VirtualHost *:80> ServerAdmin ahmadsulhi@gmail.com ServerName www.sulhi.id ServerAlias sulhi.id DocumentRoot /var/www/sulhi.id ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/sulhi.id/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
Terakhir, aktifkan virtual host dan restart apache
sudo a2ensite sulhi.id.conf sudo /etc/init.d/apache2 restart
Setting SSL Sertifikat
Pertama kali aktifkan fitur ssl, selanjutnya membuat virtual host untuk akses melalui ssl (https). Langkahnya hampir sama dengan membuat virtual host di atas. Perbedaannya port yang digunakan adalah port 80, sementara untuk ssl menggunakan port 433. Berikut syntax nya:
sudo a2enmod ssl sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/sulhi.id-ssl.conf sudo nano /etc/apache2/sites-available/sulhi.id-ssl.conf
Berikut contoh setting yang digunakan untuk ssl domain sulhi.id.
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin ahmadsulhi@gmail.com ServerName www.sulhi.id ServerAlias sulhi.id DocumentRoot /var/www/sulhi.id ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /home/asch/ssl/certificate.crt SSLCertificateKeyFile /home/asch/ssl/private.key SSLCACertificateFile /home/asch/ssl/ca_bundle.crt <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> <Directory /var/www/sulhi.id/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost> </IfModule>
Perhatikan line 14 – 16. Ketiga file sertifikat tersebut didapatkan dari SSLForFree.com dan diletakkan pada home folder account di linux. Terakhir, setelah disimpan hasil edit file virtual host ssl, silakan aktifkan virtual host tersebut dan restart apache.
sudo a2ensite sulhi-ssl.id.conf sudo /etc/init.d/apache2 restart
Silakan akses domain Anda lewat browser dengan url https://domain-anda.com. Wow…! Kini domain Anda sudah ter-encrypt. Selamat !
Redirect www and non-www to https
Jika ingin setiap user yang mengakses site kita dipaksa ke https, caranya cukup simple, yaitu dengan cara menambahkan kode rewrite pada konfigurasi virtual host, seperti contoh baris ke 16-19 di bawah ini:
<VirtualHost *:80> ServerAdmin ahmadsulhi@gmail.com ServerName www.sulhi.id ServerAlias sulhi.id DocumentRoot /var/www/sulhi.id ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/sulhi.id/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> RewriteEngine on RewriteCond %{SERVER_NAME} =sulhi.id [OR] RewriteCond %{SERVER_NAME} =www.sulhi.id RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </VirtualHost>
Happy Blogging !