Saat ini VPS semakin murah, dan dengan bertambahnya traffic dan makin bervariasi bahasa pemrograman membuat VPS menjadi salah satu alternatif yang baik dalam memilih Hosting. Dalam tulisan ini saya akan mendeskripsikan bagaimana cara melakukan setup server anda untuk dapat digunakan sebagai webserver. Server yang digunakan dapat berupa dedicated server (DS), virtual private server (VPS), ataupun cloud virtual private server.
Tulisan ini akan terdiri dari kurang lebih 4 seri yang terdiri dari:
Requirement
Untuk memudahkan anda dalam memahami petunjuk ini, maka beberapa hal yang perlu diperhatikan diantaranya:
- Server yang digunakan dalam contoh ini adalah ubuntu server. Sehingga tutorial ini sedikit banyak berlaku pada server berbasis debian. Namun tidak menutup kemungkinan dapat digunakan juga di distro lain, terkadang anda hanya perlu mengganti apt-get menjadi yum atau dnf.
- Stack yang digunakan adalah LAMP Stack (Linux Apache 2.2, MySQL, PHP 7).
- Ubuntu yang digunakan adalah Ubuntu 16.04
- Root direktori apache2 yang digunakan adalah /home/ubuntu/html/
Go Ahead and Start!
SSL Certificate saat ini seakan menjadi standar baru dalam dunia web. Mengingat keamanan yang memang penting dan makin bertebarannya wi-fi di banyak ruang publik menjadikan kebutuhan atas SSL Certificate untuk keamanan akun anda menjadi meningkat. Anda tentu tidak ingin ketika anda login pada sebuah koneksi wi-fi Kafe dan ternyata lalu lintas anda telah di spoofing oleh orang tidak bertanggungjawab.
Webserver yang menjalankan HTTP Protocol tidak memberikan transportasi data yang terlindungi. Sehingga seluruh data yang dikirim baik alamat, halaman, dan input yang anda lakukan pada HTTP akan terlihat dalam paket data yang dikirim melalui jaringan. Hal ini tentunya akan berbahaya bagi pengguna karena bukan tidak mungkin jaringan sudah di endus (spoof). Oleh karena itu kita perlu melakukan enkripsi pada paket data yang dikirim/diterima dari komputer client dan server. Untuk dapat melakukan hal tersebut maka kita menggunakan TSL (transport layer security) atau SSL (secure sockets layer) atau biasa disingkat dengan TLS/SSL .
TLS/SSL bekerja dengan menggunakan kombinasi dari public certificate dan private key. SSL Key disimpan pada server. SSL key akan digunakan untuk melakukan enkripsi konten yang dikirimkan ke klien. SSL Certificate diberikan kepada siapapun yang melakukan permintaan konten. SSL Certificate ini yang akan digunakan untuk melakukan dekripsi kontens yang ditandai dengan SSL key pada server.
Pada tulisan ini saya akan membahas mengenai SSL Certificate dengan cara Self-Signed SSL Certificate dan dengan cara ini sesungguhnya anda dapat juga menggunakannya untuk Certificate yang berbayar. Sedangkan jenis/level SSL Certificate sepertinya akan saya bahas pada tulisan lain pada blog ini.
Self Signed SSL Certificate
Self-Signed Certificate akan melakukan enkripsi komunikasi antara server dan client. Namun karena bersifat sel-signed (bukan oleh trusted certificate authorities) maka pengguna tidak dapat menggunakan certifacte untuk teridentifikasi secara otomatis sebagai verified-SSL Certificate. Self signed digunakan pada saat kita tidak menggunakan domain name pada server.
Self Signed Certificate biasanya ditandai dengan peringatan pada browser anda bahwa identitas website tersebut tidak dikenal dan anda akan ditanyakan apakah akan tetap proceed atau tidak mengunjungi website tersebut.
Membuat SSL Key dan SSL Certificate
Kita dapat membuat self-signed key dan certificate dengan menggunakan OpenSSL melalui perintah berikut.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
Perintah di atas akan membuat SSL Key dan SSL Certificate. Anda akan diminta mengisi beberapa informasi mengenai server seperti informasi Country Name (dengan 2 Letter Code), State Name, Locale Name, Organization Name, dan terakhir email anda. SSL Key dan SSL Certificate akan tersimpan pada folder /etc/ssl.
Mengubah Konfigurasi Apache untuk Menggunakan SSL
Pertama kita akan membuat konfigurasi Apache dengan pengaturan enkriksi yang kuat pada folder conf Apache /etc/apache2/conf-available dengan perintah berikut.
sudo nano /etc/apache2/conf-available/ssl-params.conf
Mungkin pada beberapa distro anda perlu melihat conf ssl yang tersedia dan dapat berbeda dengan ssl-params.conf pada tulisan ini. Kemudian kita akan menggunakan konfigurasi yang direkomendasikan oleh Remy Van Elst pada https://cipherli.st/ yang memberikan enkripsi yang mudah digunakan untuk perangkat lunak popular
/etc/apache2/conf-available/ssl-params.conf
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLSessionTickets Off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
Simpan file tersebut. Selanjutnya kita akan memodifikasi Apache SSL VHost yang terdapat pada /etc/apache2/sites-available/default-ssl.conf yang merupakan setting default dari apache SSL Vhost file. Sebelum kita mengubah file ini direkomendasikan untuk membuat backup terlebih dahulu dengan perintah berikut.
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak
Berikutnya buka file default-ssl.conf dengan perintah berikut.
sudo nano /etc/apache2/sites-available/default-ssl.conf
/etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin Alamat email ini dilindungi dari robot spam. Anda memerlukan Javascript yang aktif untuk melihatnya.
ServerName server_domain_or_IP
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
</IfModule>
Simpan perubahan dan lakukan restart apache.
Selanjutnya agar akses SSL kita lebih sempurna maka kita akan modifikasi Vhost agar selalu redirect semua request ke https. Ada 2 cara yang dapat kita lakukan untuk melakukan ini yaitu:
Modifikasi Vhost untuk Redirect ke HTTPS
Dengan cara ini semua lalu lintas data akan menggunakan https. Kita akan mengubah default.conf dari Apache pada file /etc/apache2/sites-available/000-default.conf. Lakukan modifikasi dnegna perintah berikut
sudo nano /etc/apache2/sites-available/000-default.conf
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
. . .
Redirect permanent "/" "https://your_domain_or_IP/"
. . .
</VirtualHost>
Modifikasi .htaccess untuk Redirect ke HTTPS
Cara lainnya adalah dengan membuat .htaccess agar redirect ke https dengan konfigurasi berikut.
.htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Sesuaikan Pengaturan Firewall
Jika anda menggunakan firewall UFW maka anda perlu sedikit menyesuaikan status firewall anda dengan perintah berikut. Akhiri dengan cek status UFW.
sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'
sudo ufw status
Output:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
Implementasikan Perubahan pada Apache
Langkah terakhir kita akan melakukan enable Vhost yang kita buat dan melakukan aktivasi modul SSL apache dan modul header Apache. Setelah itu kita akan set Vhost pada default-ssl.conf. Perintah yang anda gunakan adalah perintah berikut.
sudo a2enmod ssl
sudo a2enmod headers
sudo a2ensite default-ssl
sudo a2enconf ssl-params
sudo apache2ctl configtest
Output:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Selanjutnya silahkan lakukan restart apache anda. Uji dengan mengakses website anda dnegna menggunakan https://example.com.
Dengan cara di atas maka anda sudah menerapkan SSL Certificate pada website anda. Pada tulisan selanjutnya saya akan membagikan cara menggunakan SSL Certificate yang lebih mudah dan gratis tanpa mengeluarkan biaya.
Semoga berguna dan Happy Coding!
Sumber: