Membuat Self-Signed SSL Certificate di Apache Lokal Ubuntu




Pada tutorial kali ini saya akan memberikan sedikit penjelasan tentang apa itu SSL dan tentunya cara membuat self-signed SSL Certificate di Apache Lokal Ubuntu.
Self-Signed SSL Certificate tentu sangat penting bagi Anda yang ingin belajar pemrograman web dengan menggunakan secure protocol yaitu https yang menggunakan secure transport layer (SSL) melalui port 443. Anda tentunya sudah pernah melakukan transaksi data menggunakan http protocol yang melalui port 80. Bedanya HTTPS mengirim / menerima data dengan inkripsi lewat protocol SSL, sementara HTTP mengirim data dengan plain text.


Ok, pertama saya akan jelasin, apa itu SSL.
Klik link di bawah untuk membuka halaman :

Ok, sekian penjelasan untuk SSL. Sekarang yang kedua, yaitu tutorialnya.

Idealnya, sertifikat SSL disetujui (signed) oleh Certificate Authority (CA). Proses persetujuan ini biasanya dikenakan biaya, walaupun ada juga yang gratisan. Sertifikat yang disetujui CA memiliki batas waktu pemakaian. Setelah waktu tersebut habis, maka sertifikat tidak bisa digunakan dan kita harus mengurus perpanjangannya. 
Kondisi ini tentu kurang menyenangkan pada waktu kita ada di fase development. Untuk itu kita ingin membuat sertifikat sendiri, dan kemudian menyetujuinya sendiri juga. Ini disebut dengan istilah self-signed certificate. Bila diakses di browser, self-signed certificate ini akan menimbulkan peringatan seperti screenshot dibawah :





Agar bisa mengakses halaman tersebut, kita perlu menambahkan exception.

Berikut adalah hasil akhir yang kita harapkan setelah semua prosedur dilalui:
1. File private key yang dienkripsi dengan password
2. File certificate yang sudah disetujui CA 
3. File certificate milik CA. Untuk self-signed filenya cuma satu. Tapi ketika kita membeli sertifikat berbayar, file dari CA ini bisa banyak tergantung dari rantai approval dari CA tersebut.


Berikut adalah langkah-langkah untuk membuat self-signed certificate:
1. Buat private key
2. Buat permohonan persetujuan sertifikat, dalam bahasa Inggris disebut Certificate Signing Request (CSR)
3. Buat dulu CA (palsu) yang akan menandatangani sertifikat. Langkah ini tidak diperlukan bila kita membeli sertifikat dari CA (asli).
4. Setujui CSR oleh CA yang dibuat sendiri. Langkah ini juga harusnya dilakukan oleh CA (asli) yang benar.

Aplikasi yang dibutuhkan


Aplikasi yang saya sarankan adalah : openssl, karena menurut saya openssl mudah penggunaannya.

Struktur Folder


Sebagai studi kasus, kita akan membuat aplikasi web yang dihosting dengan nama domain shandsocial.com. Siapkan dua folder ca dan shandsocial.com. Untuk lokasi kedua folder ini bebas tidak harus di dalam folder penyimpanan file web host (lokal) untuk domain shandsocial.com.
Folder ca akan kita gunakan untuk operasional CA (palsu/buatan sendiri) yang menyetujui CSR yang di request. Sedangkan folder shandsocial.com berisi semua file private key dan CSR yang akan dibuat nantinya.

Membuat Private Key


Kita ingin membuat private key dengan konfigurasi sebagai berikut:
ukuran key : 2048 bit
algoritma    : RSA
enkripsi      : AES 256 bit

Berikut adalah perintahnya, lakukan di dalam folder shandsocial.com :
openssl genrsa -aes256 2048 > shandsocial.com.key

Berikut adalah outputnya :



Kita diminta passphrase untuk mengenkripsi private key tersebut. Saya masukkan test1234 sebagai password. Setelah selesai, kita akan mendapatkan satu file bernama shandsocial.com.key . Isinya adalah private key yang dienkripsi dengan algoritma AES berkekuatan 256 bit.



Membuat CSR


Dengan bermodalkan private key tersebut, kita akan membuat CSR. Berikut
perintahnya :

openssl req -new -key shandsocial.com.key -out shandsocial.com.csr

Kita akan ditanyai beberapa pertanyaan yang akan kita bahas dibawah. Berikut adalah outputnya :


1. Kita diminta passphrase untuk membuka private key. Masukkan test1234 seperti yang kita buat pada langkah pertama.
2. Kita akan ditanyai informasi tentang identitas kita. Masukkan sesuai kebutuhan.
3. Kita harus mengisi Common Name . Ini penting, terutama kalau kita membeli sertifikat berbayar!! Pastikan kita isi sesuai nama domain yang ingin kita pasangi https. Bila namanya tidak cocok, sertifikatnya akan menimbulkan warning. Saya isi sesuai nama domain yaitu shandsocial.com
4. Email address juga harus diisi dengan benar. Ini biasanya digunakan CA untuk melakukan verifikasi.
5. Challenge password dan optional company name tidak saya isi. Hasilnya adalah file CSR bernama shandsocial.com.csr yang isinya sebagai berikut.

File CSR ini akan dikirim pemilik domain ke CA, biasanya melalui email.
Selesailah bagian pemilik domain. Selanjutnya kita akan berpura-pura menjadi CA.


CA menyetujui CSR dari pemilik domain

Sekarang, kita beralih ke folder ca. 

Kelengkapan CA


Sebelum bisa menyetujui, kita sediakan dulu kelengkapan CA, yaitu:
1. private key CA
2. sertifikat CA

Private Key CA


Private key CA dibuat dengan perintah yang sama seperti pembuatan private key domain di atas.

openssl genrsa -aes256 2048 > ca.key

Seperti sebelumnya, kita juga akan dimintai passphrase. Saya gunakan testca1234 sebagai passphrasenya. Hasilnya adalah file ca.key berisi text sebagai berikut. 


Sertifikat CA


Selanjutnya kita buat sertifikat berisi informasi tentang CA palsu kita ini. Sertifikat ini yang akan kita gunakan untuk menyetujui CSR dari pemilik domain. Berikut perintahnya :

openssl req -new -x509 -days 3650 -key ca.key > ca.crt

Perintah di atas akan membuat sertifikat dengan format X-509, berlaku selama 10 tahun (3650 hari), menggunakan private key dalam file ca.key . Sertifikat ini akan ditulis ke file ca.crt . Kita juga akan ditanyai beberapa informasi tentang CA palsu yang kita buat ini.
Berikut output dari perintah di atas :




Berikut adalah isi file ca.crt


Kofigurasi CA


Setelah itu, dalam folder ca buatkan folder ca-palsu. Masukkan kedua file yaitu ca.key dan ca.crt kedalamnya (folder ca-palsu). Buatkan juga file (dapat menggunakan perintah touch dalam terminal ubuntu) serial.txt, database.txt, dan database.txt.attr di dalam folder ca-palsu.

Kemudian buatkan folder sertifikat-customer dan folder sertifikat-request di dalam folder ca.

Tambahkan file konfigurasi di bawah ini dengan nama openssl-config.txt di dalam folder ca. (download melalui link di bawah dan masukkan ke dalam folder ca).


Root CA kita ca-palsu kita buatkan folder tersendiri untuk menyimpan file-filenya. Kita masukkan private key dan certificate dirinya sendiri. Kemudian, kita juga membutuhkan file database dan serial. File database gunanya untuk menyimpan data semua sertifikat yang pernah diterbitkan oleh CA ca-palsu . Karena database ini merupakan file text biasa, bukan database server seperti MySQL atau Oracle, maka kita perlu bantu openssl untuk membuatkan serial number dengan cara menyediakan file text lain bernama serial.txt . Di sini openssl bisa mencatat nomer terakhir yang
sudah terpakai. Untuk data awal, kita isi saja nilai 1000 dengan perintah berikut :

echo 1000 > ca-palsu/serial.txt

Jangan heran bila database.txt dan database.txt.attr tidak ada isinya. Memang harusnya seperti itu. Sekarang kita siap membuatkan signature untuk CSR dari shandsocial.com

Membuat signature CSR dengan Sertifikat CA


CA menerima CSR dari pemilik domain. Untuk simulasinya, kita copy saja file CSR ke folder ca-palsu/sertifikat-request . Setelah diterima, seharusnya CA melakukan verifikasi terhadap pemilik domain shandsocial.com . Kita asumsikan saja verifikasi berjalan sukses, sehingga kita bisa langsung membuatkan signaturenya.

Berikut adalah perintah untuk membuatkan signature dengan menggunakan CA ca-palsu :

openssl ca -config openssl-config.txt -in ca-palsu/sertifikat-request/shandsocial.com.csr

OpenSSL akan menanyakan password untuk private key ca-palsu , kemudian membuatkan sertifikat baru sesuai konfigurasi new_certs_dir dalam openssl-config.txt . Berikut output perintah di atas.


Setelah sukses, openssl akan membuatkan sertifikat yang sudah ditandatangani menggunakan private key ca-palsu . Berikut daftar file/folder yang terdampak selama proses ini:

1. serial.txt : tadinya berisi 1000, sekarang berisi 1001
2. database.txt : tadinya kosong, sekarang ada satu baris berisi informasi sertifikat yang baru saja dibuat
3. folder sertifikat-customer : tadinya kosong, sekarang berisi satu file sertifikat untuk shandsocial.com dengan nama file 1000.pem

Selanjutnya, CA akan mengirimkan file 1000.pem tersebut ke pemilik domain shandsocial.com .

Kelengkapan File Pemilik Domain


Setelah menerima file 1000.pem dari CA, pemilik domain shandsocial.com akan memiliki file berikut:

1. File private key : shandsocial.com.key
2. File CSR : shandsocial.com.csr . File ini boleh dihapus setelah kita menerima sertifikat yang telah disahkan oleh CA.
3. File sertifikat dari CA : 1000.pem . Agar lebih jelas, kita rename saja menjadi shandsocial.com.crt .


Pemasangan Sertifikat SSL


Setelah kita menjalankan semua prosedur untuk mendapatkan digital certifi􀀚cate, tiba
saatnya kita memasangnya di webserver supaya bisa melayani request https. Selanjutnya, kita akan membahas kon􀀚gurasi https pada webserver yang sering digunakan.
Karena banyaknya merek webserver yang beredar di pasaran, kita akan ambil satu perwakilan yaitu Apache (lampp) sebagai web server.

Berikut tutorialnya :

Kita harus persiapkan file .crt dan .key (shandsocial.com.crt dan shandsocial.com.key). Pertama kita harus mengubah file shandsocial.com.key menjadi plaintext terlebih dahulu.
Berikut perintahnya :

openssl rsa -in shandsocial.com.key -out shandsocial.com.key.txt

Kemudian pindahkan shandsocial.com.key.txt ke direktori yg terpisah dengan shandsocial.com.key, lalu hapus extensi shandsocial.com.key.txt menjadi shandsocial.com.key .

Setelah itu, salin file shandsocial.com.key (plain text) ke folder lampp/etc/ssl.key , serta salin file shandsocial.com.crt  ke folder lampp/etc/ssl.crt .

Ubah akses file nya agar bisa dibaca, 
(dapat menggunakan perintah sudo chmod 777 nama_file)

Kemudian buka file lampp/etc/extra/httpd-ssl.conf dengan perintah sudo gedit via terminal.

Lihat barisan #SSLCertificateKeyFile "/opt/lampp/etc/ssl.key/blablabla" hapus tanda pagarnya lalu ubah blablabla menjadi nama file shandsocial.com.key yang kita salin tadi.

Selanjutnya, lihat barisan #SSLCertificateFile "/opt/lampp/etc/ssl.crt/blablabla"  hapus tanda pagarnya lalu ubah blablabla menjadi nama file shandsocial.com.crt yang kita salin tadi.

Selanjutnya (jika Anda mempunyai konfigurasi vhost pada file httpd-vhosts.conf) lihat barisan seperti di bawah ini pada file httpd-ssl.conf :

#DocumentRoot "/opt/lampp/htdocs"
#ServerName www.example.com:443
#ServerAdmin you@example.com
#ErrorLog "/opt/lampp/logs/error_log"
#TransferLog "/opt/lampp/logs/access_log"

Hapus semua tanda pagarnya kemudian ganti /opt/lampp/htdocs menjadi direktori penyimpanan file web server (lokal) kita. Lalu ganti www.example.com menjadi www.namadomain.com:443 (contoh www.shandsocial.com:443)

Di bawah ini merupakan contoh perubahan untuk barisan tersebut :

DocumentRoot "/media/reinhardjs/Data/RJS Files/shandsocial/project"
ServerName www.shandsocial.co.id:443
ServerAdmin reinhardjs@shandsocial.com
ErrorLog "/opt/lampp/logs/error_log"
TransferLog "/opt/lampp/logs/access_log"

Perlu Anda ketahui bahwa Anda harus mengatur konfigurasi vhost. Jika tidak, maka akan ada kemungkinan tutorial ini tidak berhasil.
Berikut contoh pengaturan konfigurasi vhost untuk file httpd-vhosts.conf :

<VirtualHost *:80>
    ServerAdmin admin@shandsocial.co.id
    DocumentRoot "/media/reinhardjs/Data/RJS Files/shandsocial/project"
    ServerName shandsocial.co.id
    ServerAlias www.shandsocial.co.id
    ErrorLog "logs/shandsocial.co.id-error_log"
    CustomLog "logs/shandsocial.co.id-access_log" common
<Directory "/media/reinhardjs/Data/RJS Files/shandsocial/project">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
            Require all granted
</Directory>
</VirtualHost>


Sudah cukup sampai di sini saja, selamat mencoba dan semoga berhasil :)



Salam hangat dari saya, Reinhard Jonathan Silalahi

Sobat sedang membaca artikel tentang Membuat Self-Signed SSL Certificate di Apache Lokal Ubuntu dan sobat bisa menemukan artikel Membuat Self-Signed SSL Certificate di Apache Lokal Ubuntu ini dengan url http://reinhardjs.blogspot.com/2016/06/membuat-self-signed-ssl-certificate-di-apache-lokal-ubuntu.html, Sobat boleh menyebar luaskannya atau mengcopy paste-nya jika artikel Membuat Self-Signed SSL Certificate di Apache Lokal Ubuntu ini sangat bermanfaat bagi teman-teman Sobat, namun jangan lupa untuk meletakkan sumber link postingan Membuat Self-Signed SSL Certificate di Apache Lokal Ubuntu sebagai sumbernya

-Berilah komentar yang sesuai dengan Artikel
-Berilah komentar yang sopan
-Dilarang keras membuat link aktif di komentar
-Dilarang menggunakan kata-kata yang kasar dalam berkomentar
Jika sobat tidak memiliki akun gmail untuk berkomentar, sobat dapat memilih beri komentar sebagai -> pilih yang .." Name/URL ".. Lalu Isikan Nama sobat. Dan jika sobat memiliki blog jgn lupa untuk menuliskannya "URL"-nya ya.
Dan yang paling penting, jangan gunakan panggilan gan atau yang sejenisnya. Wkwk.
Salam hangat dari saya, Reinhard J.S

Blogger Follow Button Icon PNG
Scroll to top