Cara Install HTTPS di localhost
Hypertext Transfer Protocol Secure (HTTPS) adalah versi terenkripsi dari protokol HTTP. Enkripsinya menggunakan protokol Secure Sockets Layer (SSL), atau yang lebih baru Transport Layer Security (TLS), sering juga disebut sebagai HTTP over SSL atau HTTP over TLS. Secara default HTTPS berjalan pada port 443.
Mengapa Harus HTTPS?
Faktor penting mengapa harus menggunakan HTTPS:
- Keamanan – Mengamankan data dengan metode enkripsi yang ditransmisikan antara browser dengan server. Menjaga integritas website dari peretas yang dapat menginjeksi malware. Melindungi website dan pengunjung dari kenakalan provider internet yang memasukkan iklan mereka.
- SEO – Sejak tahun 2014 Google sudah mulai memberikan peringkat lebih tinggi kepada website yang memakai HTTPS.
- Web Masa Depan – Teknologi web masa depan, mulai dari API, AMP, PWA semuanya mengharuskan menggunakan HTTPS.
Perlukah HTTP di localhost (development server)?
Tentu saja perlu untuk menguji aplikasi sebelum berjalan di production server apakah tidak ada masalah. Sehingga tidak perlu langsung mengujinya di production server, cukup di development server untuk pengujian tahap pengembangan.
Tool apa yang digunakan?
Tool yang dapat digunakan untuk membuat HTTPS dapat berjalan di localhost yaitu mkcert. mkcert adalah sebuah tool untuk membuat sertifikat SSL untuk HTTPS secara lokal dan dipercaya oleh web browser. mkcert dapat membuat sertifikat untuk host localhost, custom host, atau IP address seperti 127.0.0.1. mkcert mendukung sistem operasi Linux, macOS, dan Windows.
Install HTTPS di localhost Linux
Tutorial ini menggunakan:
- OS Linux Ubuntu 16.04 64-bit
- brew
- mkcert
- Apache
- Mozilla Firefox
Install brew
mkcert diinstall via brew package manager. Install brew terlebih dahulu, baca tutorial Cara Install brew di Linux.
Install mkcert
Install paket dependensi.
1 | sudo apt-get install libnss3-tools |
Install mkcert via brew.
1 | $ brew install mkcert |
Hasilnya
1 2 3 4 5 | Updating Homebrew... ==> Downloading https://linuxbrew.bintray.com/bottles/mkcert-1.2.0.x86_64_linux.bottle.tar.gz ######################################################################## 100.0% ==> Pouring mkcert-1.2.0.x86_64_linux.bottle.tar.gz /home/linuxbrew/.linuxbrew/Cellar/mkcert/1.2.0: 6 files, 4.3MB |
Install Certificate Authority (CA).
1 | $ mkcert -install |
Hasilnya
1 2 3 4 5 | Created a new local CA at "/home/musa/.local/share/mkcert" [sudo] password for musa: The local CA is now installed in the system trust store! The local CA is now installed in the Firefox and/or Chrome/Chromium trust store (requires browser restart)! The local CA is now installed in Java's trust store! |
Selanjutnya membuat certificate untuk localhost
1 | $ mkcert localhost |
Hasilnya
1 2 3 4 5 6 | Using the local CA at "/home/musa/.local/share/mkcert" Created a new certificate valid for the following names - "localhost" The certificate is at "./localhost.pem" and the key at "./localhost-key.pem" |
Terdapat dua file yang dihasilkan, certificate localhost.pem dan key localhost-key.pem. Semuanya berada di folder tempat menjalankan perintah.
Konfigurasi Apache untuk HTTPS
Install Apache.
1 | sudo apt-get install apache2 |
Memindahkan certificate dan key.
1 2 | sudo mv localhost.pem /etc/ssl/certs sudo mv localhost-key.pem /etc/ssl/private |
Konfigurasi virtualhost localhost untuk port 443 (HTTPS).
1 | sudo nano /etc/apache2/sites-available/default-ssl.conf |
Cari opsi certificate dan ubah seperti di bawah ini.
1 2 | SSLCertificateFile /etc/ssl/certs/localhost.pem SSLCertificateKeyFile /etc/ssl/private/localhost-key.pem |
Aktifkan modul SSL untuk Apache dan virtualhost default-ssl.
1 2 3 4 | sudo a2enmod ssl sudo a2ensite default-ssl.conf sudo systemctl restart apache2 sudo systemctl status apache2 |
Pengujian
Akses https://localhost di browser, hasilnya seperti gambar di bawah ini.
HTTPS untuk Custom VirtualHost
Membuat certificate untuk virtualhost musaamin.oksip.
1 | $ mkcert musaamin.oksip |
Hasilnya
1 2 3 4 5 6 | Using the local CA at "/home/musa/.local/share/mkcert" Created a new certificate valid for the following names - "musaamin.oksip" The certificate is at "./musaamin.oksip.pem" and the key at "./musaamin.oksip-key.pem" |
Memindahkan certificate.
1 2 | sudo mv musaamin.oksip.pem /etc/ssl/certs sudo mv musaamin.oksip-key.pem /etc/ssl/private |
Membuat folder untuk virtualhost musaamin.oksip.
1 | sudo mkdir /var/www/html/musaamin.oksip |
Buat file index.html.
1 | sudo nano /var/www/html/musaamin.oksip/index.html |
Isinya
1 | musaamin.oksip |
Membuat konfigurasi virtualhost di Apache.
1 | sudo nano /etc/apache2/sites-available/musaamin.oksip.conf |
Isinya
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <VirtualHost *:80> ServerName musaamin.oksip ServerAlias www.musaamin.oksip RewriteEngine on RewriteCond %{SERVER_NAME} =www.musaamin.oksip [OR] RewriteCond %{SERVER_NAME} =musaamin.oksip RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName musaamin.oksip ServerAlias www.musaamin.oksip DocumentRoot /var/www/html/musaamin.oksip ErrorLog /var/log/apache2/musaamin.oksip_error.log CustomLog /var/log/apache2/musaamin.oksip_access.log combined SSLCertificateFile /etc/ssl/certs/musaamin.oksip.pem SSLCertificateKeyFile /etc/ssl/private/musaamin.oksip-key.pem </VirtualHost> </IfModule> |
Mengaktifkan virtualhost musaamin.oksip.
1 | sudo a2ensite musaamin.oksip.conf |
Restart Apache.
1 2 | sudo systemctl restart apache2 sudo systemctl status apache2 |
Memasukkan host musaamin.oksip ke dalam konfigurasi hosts.
1 | sudo nano /etc/hosts |
Tambahkan
1 | 127.0.0.1 musaamin.oksip |
Pengujian, akses http://musaamin.oksip, harus redirect ke https://musaamin.oksip sesuai dengan konfigurasi pada virtualhost Apache.
Selamat mencoba 🙂
Thanks pak
terima kasih pak
Done sir
kalau di Debian 10 bagaimana ya pak?
terima kasih tutornya,..
coba saja tutorial ini, biasanya ubuntu dan debian sama caranya
mas….tanya
add domain caranya bagaimana? domain yang pertama pakai cloudflare.
sekarang mau masuk cloudflare tdk bisa. klo dengan cara ini nanti semua domain yang sudah terpasang cloudflare apakah berubah?
pertanyaannya kurang jelas. add domain di mana, di cloudflare atau cpanel? masuk cloudflare, maksudnya tidak bisa login di cloudflare? domain yang memakai cloudflare, berarti untuk melakukan pengaturan dns record misal menambah subdomain semuanya dikonfigurasikan di cloudflare.
saya pake vps, 1 ip utk 2 domain. Apa tutorial ini bisa berfungsi utk kedua domain saya? apa ada cara husus? ditunggu jawabnya pak.
tutorial ini hanya untuk kebutuhan development di komputer sendiri (localhost). kalau sudah pakai domain internet, pakai SSL yang dikeluarkan oleh certificate authority yang dikenali oleh web browser. yang gratis bisa pakai SSL dari Let’s Encrypt.
Ok, suwun pak.. sudah menerapkan sarannya pake LE.
untuk cara pemasangan di manjaro linux apakah bisa? kalau bisa gimana caranya pak, mohon bantuanya.
sudo pacman -Syu mkcert
Hallo mas guide nya membantu banget tetapi saya mau bertanya.. itu kan IP Local /local host kita custom domain buat akses via jaringan lokal yang sudah terpasang SSL/TLS nya.. apakah nanti andai kata user lain internal yang mencoba akses domain lokal tersebut langsung trust SSL/TLS nya atau ada muncul error tidak trust dari sisi user yang mencoba akses nya mas??
dan kalau ada muncul tidak trust dari sisi user nya pada saat akses ke domain lokal tersebut apakah ada cara agar web server lokal kita pada saat di akses oleh semua user lokal itu langsung trust tanpa diinstall cert nya di browser user tersebut mas??
trik ini hanya bekerja di local, gak bisa kalau diakses melalui jaringan
Terimakasih Pak Musa Amin tutorialnya. Sudah saya coba di ubuntu 20.04. Work 100%..
worked pak,,kalau client lain kalau mau pake https keluar trusted error,,
bagaimana cara membuat https di local kita namun bisa di akses client lain???
tidak bisa diakses oleh client lewat jaringan, hanya bisa di local
bang kalau untuk setingan ssl server local tapi bisa diakses oleh IP Publik,,,apa cara ini bisa digunakan?
tidak bisa. gunakan saja SSL dari Let’s Encrypt, harus pakai domain.
mas ini bisa run project Laravel?
bisa project apa saja. SSL confignya di web servernya.
Mas kalau untuk windows gimana caranya?
coba cek github mkcert dan tutorial ini
mas kalau tidak muncul
The local CA is now installed in the Firefox and/or Chrome/Chromium trust store (requires browser restart)!
The local CA is now installed in Java’s trust store!
itu gimana ya?
pakai os apa?
coba import certificate rootCA.pem ke web browser
Siang Pak Musa, semoga sehat dan sukses selalu.
Klo diaplikasikan ketika diakses oleh client lain melalui jaringan apakah memungkinkan ?
Jika memungkinkan, apakah ada tutorialnya.
Terimakasih.
import root AC mkcert di web browser komputer client
Ohh isee, brrti harus satu2 setiap client di import mkcert nya ya.
Baik pak Musa. Terimakasih atas responnya.
iya pak, betul sekali.
Assalamu’alaykum min
alhamdulillah min saya sudah berhasil berkat tutorial ini. https sudah berjalan namun tetap cert nya tidak dikenali keamanannya oleh chrome dan mozilla… itu kenapa ya min?
waalaikum salam, coba import RootCA ke web browser.