Halo teman-teman, Perkenalkan saya, Gilang. Kali ini saya ingin sharing tentang bagaimana cara instalasi SSL atau dalam kata lain sertifikat untuk koneksi HTTPS pada Linux Ubuntu Server. Ada dua web engine yang akan saya bahas disini yaitu Nginx dan Apache, pada Server tanpa IP Publik maupun dengan IP Publik. Tidak banyak basa-basi mari kita langsung menuju ke cara instalasi.

Environment : Ubuntu Server 18.04 — 21.04

Dengan IP Private:

A. Instalasi SSL pada Ubuntu Server IP Lokal dengan Nginx:

Dalam proses pengembangan suatu website/aplikasi terkadang kita membutuhkan koneksi HTTPS untuk bisa mem-verifikasi jalannya aplikasi tersebut, karena terkadang tanpa HTTPS ada beberapa fitur yang tidak bisa digunakan, contoh kecilnya seperti uji coba Video Conference (akses mic, webcam,dsb) yang mana membutuhkan SSL untuk mencobanya. Maka dari itu tidak ada salahnya untuk menggunakan SSL pada IP Private atau yang sering kita sebut sebagai Self Signed SSL.

$ sudo apt update && apt-get full-upgrade (lakukan ini jika belum menginstall nginx).
$ sudo apt-get install -y nginx (pastikan nginx sudah terinstall).
$ sudo apt-get install openssl
$ mkdir SSL && cd SSL/
$ sudo nano localhost.conf , isi dengan:

[req]
default_bits = 2048
default_keyfile = localhost.key
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_ca

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = ID
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = DKI Jakarta
localityName = Locality Name (eg, city)
localityName_default = Jakarta
organizationName = Organization Name (eg, company)
organizationName_default = ServerDEV
organizationalUnitName = organizationalunit
organizationalUnitName_default = Telkom-Dev
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = Server-DEV
commonName_max = 64

[req_ext]
subjectAltName = @alt_names

[v3_ca]
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
DNS.2 = 127.0.0.1
IP.1 = 192.168.0.38
IP.2 = 192.168.56.120

Save, exit.

Untuk cek IP Lokal bisa menggunakan $ ifconfig atau $ ip addr

Sesuaikan IP.1 , IP.2 sesuai IP private ubuntu kalian (jika hanya terdapat 1 IP, silahkan hapus IP.2) . Tidak lupa untuk menyesuaikan juga Data SSL (req_distinguished_name) sesuai data kalian.

Lakukan generate file sertifikat:

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -config localhost.conf

Lalu salin file hasil generate ke directory dimana sertifikat akan di execute oleh web engine:

$ sudo cp localhost.crt /etc/ssl/certs/localhost.crt
$ sudo cp localhost.key /etc/ssl/private/localhost.key

Rubah sedikit default.conf pada Nginx:

$ sudo nano /etc/nginx/sites-available/default

 Isi dengan konfigurasi dibawah ini (jika memungkinkan, hapus terlebih dahulu semua konfigurasi yang ada sebelumnya, lalu copas konfigurasi dibawah ini):

server {
listen 80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name localhost;
ssl_certificate /etc/ssl/certs/localhost.crt;
ssl_certificate_key /etc/ssl/private/localhost.key;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
root /var/www/html;
index index.html index.nginx-debian.html;
}

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}

save,exit.

Pada default.conf silahkan sesuaikan sesuai env masing masing, namun pastikan listen 443 dan directory ssl sesuai pada directory ssl yang telah kita generate tadi.

Setelah file konfigurasi sudah tersimpan, silahkan lakukan restart pada nginx:

$ sudo service nginx reload

Akses web kalian pada:

https://ip_lokal_vm_kalian

Voilaa, Instalasi SSL pada ip local sudah berhasil kita lakukan.

B. Instalasi SSL pada Ubuntu Server IP Lokal dengan Apache:

Sama halnya dengan Nginx, Apache juga sebuah web engine. Adapun cara instalasi SSL pada Apache di IP lokal adalah sebagai berikut:

$ sudo apt update && apt-get full-upgrade (lakukan ini jika belum menginstall apache).
$ sudo apt-get install -y apache2 (verifikasi apache sudah ter-install)
$ sudo apt-get install openssl
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Buat file konfigurasi dari parameter apache:

$ sudo nano /etc/apache2/conf-available/ssl-params.conf , isi dengan:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
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 X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache “shmcb:logs/stapling-cache(150000)”
# Requires Apache >= 2.4.11
SSLSessionTickets Off

Save, exit.

Salin file yang diperlukan:

$ sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak

Modifikasi default-ssl.conf dari apache:

$ sudo nano /etc/apache2/sites-available/default-ssl.conf , isi dengan (jika memungkinkan, hapus terlebih dahulu semua konfigurasi yang ada sebelumnya, lalu copas konfigurasi dibawah ini) :

<IfModule mod_ssl.c>
<VirtualHost _default_:443>

ServerAdmin admin@local.com
ServerName localhost
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>
</VirtualHost>
</IfModule>

Save, exit.

Modifikasi default.conf dari apache dengan merubah ip kalian:

$ sudo nano /etc/apache2/sites-available/000-default.conf

Tambahkan ini dibawah “VirtualHost” :

<VirtualHost *:80>
. . .

Redirect “/” “https://ip_lokal_vm_kamu”

. . .
</VirtualHost>

Save,exit.

Kurang lebih seperti ini jadinya:

Lakukan apply dan reload pada apache:

$ sudo a2enmod ssl
$ sudo a2enmod headers
$ sudo a2ensite default-ssl
$ sudo a2enconf ssl-params
$ sudo apache2ctl configtest
$ sudo /etc/init.d/apache2 reload

Akses pada :

https:// /ip_lokal_vm_kamu

Voila, kamu sudah berhasil instalasi SSL pada Apache2 dengan IP Lokal.

Dengan IP Publik:

Pada IP Publik instalasi SSL tidak serumit seperti instalasi pada IP Private. Ada beberapa cara untuk Generate SSL pada IP Publik, yaitu dengan Self Signed, Generate oleh BOT terpercaya (seperti CertBot,dsb) dan juga kita bisa langsung input menggunakan sertifikat yang kita miliki sebelumnya (tanpa harus generate menggunakan certbot/openssl lagi). Namun di-tutorial kali ini saya akan membahas untuk generate SSL menggunakan CertBot. Jika kalian ingin mengikuti lab ini, diharapkan agar anda memiliki setidaknya domain dan VPS. Jika sudah memiliki, tentunya tidak lupa untuk mounting IP VPS kepada DNS Record kalian pada dashboard DNS kalian.

Mounting IP VPS pada DNS Record, Berikan A record dan CNAME Record.

Seperti ini contohnya:

Record A dan menambahkan CNAME Record (opsional) sebagai auto redirect dari www agar langsung menuju ke DNS yang dituju.

Jika sekiranya DNS sudah ter-mounting dengan baik, kita bisa langsung lanjut ke tutorial selanjutnya.

A. Instalasi SSL pada IP Publik/VPS menggunakan Nginx:

1. Tanpa Kontainer (Docker):

$ sudo apt update && apt-get full-upgrade (lakukan ini jika belum menginstall nginx).
$ sudo apt-get install -y nginx (verifikasi nginx sudah terinstall).
$ sudo apt install certbot python3-certbot-nginx
$ certbot — nginx -d domain.com -d www.domain.com

Ikuti saja suruhan yang ada, lalu setelah berhasil silahkan akses: https://domain_kamu

Jika kalian ingin renew sertifikat yang sudah habis, lakukan:

$ sudo certbot renew — dry-run

Voila kamu berhasil instalasi SSL di Nginx pada IP Publik

2. Dengan Kontainer (Docker):

Agar artikel ini tidak terlalu panjang, kalian bisa clone dari github saya pada:
$ git clone https://github.com/gilangvperdana/Docker-SSL-LandingPage

Lalu ikuti tutorial pada MD yang tersedia disana.

B. Instalasi SSL pada IP Publik/VPS menggunakan Apache:

1. Tanpa kontainer (Docker):

$ sudo apt update && apt-get full-upgrade (lakukan ini jika belum menginstall apache).
$ sudo apt-get install -y apache2 (verifikasi apache sudah ter-install)
$ sudo apt-get install certbot python3-certbot-apache apache2
$ sudo certbot — apache

Ikuti saja suruhan yang ada, lalu setelah berhasil silahkan akses: https://domain_kamu

Jika kamu ingin renew sertifikat yang sudah habis, lakukan:

$ sudo certbot renew — dry-run

Voila kamu berhasil instalasi SSL di Apache pada IP Publik.

2. Dengan Kontainer (Docker):

Agar artikel ini tidak terlalu panjang, kalian bisa clone dari github saya pada:
$ git clone https://github.com/gilangvperdana/Docker-SSL-LandingPage

Lalu ikuti tutorial pada MD yang tersedia disana.

Sekian dari saya, tentunya tutorial ini sudah saya buktikan sendiri dan berhasil. Terima kasih semua.

Last modified: August 1, 2021

Author

Comments

Write a Reply or Comment

Your email address will not be published.