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:

  1. Setup Server Pertama Kali
  2. Instalasi LAMP Stack
  3. Konfigurasi MySQL
  4. SSL Certificate

Requirement

Untuk memudahkan anda dalam memahami petunjuk ini, maka beberapa hal yang perlu diperhatikan diantaranya:

  1. 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.
  2. Stack yang digunakan adalah LAMP Stack (Linux Apache 2.2, MySQL, PHP 7).
  3. Ubuntu yang digunakan adalah Ubuntu 16.04
  4. 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:

https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04