Sulhi.id

Catatan Kecil Seputar Blogging dan Koding

Setting SSL Sertifikat dan Virtual Host di Linux

Monday, February 20th, 2017     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 !