­

Konfigurasi Debian sebagai Certificate Authority dan Web HTTPS

Saturday, March 21, 2020

PENDAHULUAN

Halo semuanya!!! Salam sobat networkers, bertemu lagi dengan saya di blog ini tentunya. Kali ni kita akan belajar mengenai Certificate Authority(CA), nanti akan kita bahas mengenai cara menjadikan Linux Debian sebagai CA dan juga nanti saya akan contohkan penerapannya untuk WEB Server HTTPS. Ada Baiknya sobat sudah paham konfigurasi tentang DNS Server Oke sebelum masuk ke konfigurasinya saya akan bahas sedikit tentang Pengertian dari CA dan Web Server HTTPS ini.
Pengertian Certificate Authority (CA)
Certificate Authority (CA) adalah perusahaan yang bertugas membarikan sertifikat pada ssl/tsl. Secure Socket Layer (SSL) atau dikenal juga dengan istilah Transport Secure Layer (TSL) adalah sebuah protocol yang bertugas memastikan keaslian suatu layanan, entah itu layanan Web, Mail, ataupun FTP.
 
Bukti identitas yang dimiliki oleh sebuah website disebut private key. Private key merupakan sebuah file yang menjadi bukti identitas suatu server. Lembaga yang berhak mengeluarkan private key yang falid disebut certificate authority. Untuk mendapatkan private key yang falid kita harus membeli sertifikat dari salah satu certificate authority terpercaya yang ada didunia. Terdapat banyak sekali certificate authority terpercaya yang berhak mengeluarkan private key yang falid didunia ini, seperti comodo, versign, cybertrust/verizon, startssl, dll.
Terpercaya atau tidaknya suatu certificate authority bisa kita lihat di web browser kita masing-masing. Jika suatu certificate authority terdapat pada web browser, berarti certificte authority tersebut terpercaya, begitu juga sebaliknya.
Perbededaan mendasar dari certificate authority terpercaya dan yang tidak terpercaya terletak pada private key yang dihasilkan. Jika certificate authority terpercaya, maka private key yang dihasilkan akan falid dan sertifikat ssl juga akan terpercaya. Berikut contoh penggunaan sertifikat ssl yang terpercaya.
Sedangkan jika ssl yang tidak terpercaya, maka hasilnya akan sperti ini.
Pengertian WEB Server HTTPS
Sama halnya dengan Web Server HTTP, HTTPS juga bertugas menampilkan sebuah halaman web pada browser
Perbedaan utama antara http dan https terletak pada tingkat keamanan yang dimiliki, dimana https adalah versi secure (lebih aman) dari http. Selain keamanan, perbedaan lain terletak ada port yang digunakan. Protocol http menggunakan port 80, sedangkan https menggunakan port 443.
Skenario Jaringan
Pada skenario jaringan kita kali ini saya menggunakan Topologi jaringan seperti berikut.
Nantinya Web Server akan mengajukan permohonan kepada CA untuk menyetujui sertifikat miliknya. Setelah sertifikat disetujui nanti sertifikat ini akan kita gunakan untuk konfigurasi HTTPS. Kemudian client akan medaftarkan CA yang kita buat menjadi salah satu certificate authority terpercaya di browsernya.
Kita kali ini akan praktik seolah-olah menjadi tiga pihatk yang berbeda, yaitu sebagai CA, sebagai pemilik Web Server, dan juga sebagai client.
MENGAJUKAN PERMOHONAN KE CA
**note: Konfigurasi kali ini dilakukan pada Web Server.
Ada dua file yang perlu disiapkan untuk mengajukan permohonan persetujuan sertifikat kepada CA, yaitu private key dan dokumen persetujuan sertifikat yang disebut Certificate Signing Request (CSR). Saya akan membuat direktori khusus untuk menyimpan sertifikat yang dibutuhkan pada direktori /etc/apache2/ssl
root@web:/etc/apache2# mkdir ssl
root@web:/etc/apache2# cd ssl
view raw ca.html hosted with ❤ by GitHub
Pertama-tama kita harus membuat Private key sebagai berikut.
root@web:/etc/apache2/ssl# openssl genrsa -aes256 2048 > setyasite.key
Generating RSA private key, 2048 bit long modulus
......................................................................+++
.....................................................+++
e is 65537 (0x010001)
Enter pass phrase: (Tidak Terlihat)
Verifying - Enter pass phrase: (Tidak Terlihat)
view raw key.html hosted with ❤ by GitHub
Perintah diatas digunakan untuk membuat private key dengan nama setyasite.key. Setelah private key sudah dibuat maka selanjutnya kita harus membuat file sertifikat CSR dengan memanfaatkan private key yang sudah dibuat. File CSR nanti akan kita berikan kepada CA. Untuk membuat file CSR berikut perintah yang bisa digunakan.
root@web:/etc/apache2/ssl# openssl req -new -key setyasite.key > setyasite.csr
Enter pass phrase for setyasite.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ID
State or Province Name (full name) [Some-State]:Jawa Barat
Locality Name (eg, city) []:Bekasi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:setyasite
Organizational Unit Name (eg, section) []:Admin Web
Common Name (e.g. server FQDN or YOUR name) []:www.setyasite.com
Email Address []:admin@setyasite.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
view raw CSR.html hosted with ❤ by GitHub
Berikut keterangan dari masing-masing langkah yang dilakukan diatas.
Mula-mula kita diperintahkan untuk memamasukkan pasword dari private key yang sudah kita buat tadi.
Country Name : kode negara dimana kita tinggal
State or Province name : Provinsi tempat kita tinggal
Locality Name : Kota/Kabupaten tempat kita tingal
Organization Name : Nama organisai atau perusahaan kita.
Organizational Unit Name : Divisi tempat kita bekerja.
Common Name : Domain dari organisasi/perusaahan kita.
Email Address : Email Administrator.
A challenge password : Extra password, bagian ini optional.
An optional company name : bagian ini juga optional.
Kita telah membuat dua file yang diperlukan, yaitu private key dan CSR. 
root@web:/etc/apache2/ssl# ls
setyasite.csr setyasite.key
view raw csrkey.html hosted with ❤ by GitHub
Langkah selanjutnya adalah mengerimkan CSR kepada CA. Untuk mengirimkan CSR Kepada CA, kita bisa menggunakan media transfer file yang kita inginkan seperti ftp, sftp, ataupun yang lain. Setelah itu, sebagai pemilik server kita tinggal menunggu CSR disetujui oleh CA. Langkah selanjutnya kita akan seolah-olah menjadi Certificate Authority (CA).
MEMBUAT CERTIFICATE AUTHORITY
**note: Konfigurasi kali ini dilakukan pada CA.
Telah dijelaskan sebelumnya, bahwa certificate authority (CA) adalah suatu lembaga yang bertugas memberikan sertifikat ssl kepada suatu server. Pada sub bab ini kita akan membuat sebuah certificate authority untuk digunakan pada jaringan lokal.
Untuk membuat CA kita harus membuat direktori khusus untuk menyimpan file-file yang dibutuhkan. Berikut adalah direktori yang saya buat.
root@ca:~# mkdir /ca
root@ca:~# mkdir /ca/ca_dir
root@ca:~# cd /ca/ca_dir/
view raw ca.html hosted with ❤ by GitHub
Setelah membuat direktori masuk ke /ca/ca_dir/ lalu buat private key untuk CA. Membuat private key untuk CA sebagai berikut.
root@ca:/ca/ca_dir# openssl genrsa -aes256 2048 > ca.key
Generating RSA private key, 2048 bit long modulus
..................................................................................+++
..+++
e is 65537 (0x010001)
Enter pass phrase: (Tidak Terlihat)
Verifying - Enter pass phrase: (Tidak Terlihat)
view raw ca.html hosted with ❤ by GitHub
Jika private key sudah ada, sekarang kita lanjutkan membuat file CRT untuk CA dengan memanfaatkan Private key yang sudah dibuat tadi. Sertifikat ini (CRT) nantinya digunakan agar CA bisa menyetujui CSR yang diajukan oleh Web Server. Untuk membuat file CRT bisa gunakan command seperti berikut ini.
root@ca:/ca/ca_dir# openssl req -new -x509 -days 3650 -key ca.key > ca.crt
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ID
State or Province Name (full name) [Some-State]:Jawa Barat
Locality Name (eg, city) []:Bekasi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Certificate Authority
Organizational Unit Name (eg, section) []:System Administrator
Common Name (e.g. server FQDN or YOUR name) []:cerauth.com
Email Address []:admin@cerauth.com
view raw ca.html hosted with ❤ by GitHub
Berikut keterangan dari masing-masing langkah yang dilakukan diatas.
Mula-mula kita diperintahkan untuk memamasukkan pasword dari private key yang sudah kita buat tadi.
Country Name : kode negara dimana kita tinggal
State or Province Name : Provinsi tempat kita tinggal
Locality Name : Kota/Kabupaten tempat kita tingal
Organization Name : Nama organisai atau perusahaan kita.
Organizational Unit Name : Divisi tempat kita bekerja.
Common Name : Domain dari organisasi/perusaahan kita.
Email Address : Email Administrator.
Selanjutnya kita akan membuat file konfiguarasi untuk digunakan CA. File konfigurasi yang akan buat saya beri nama config_ca yang saya letekkan pada /ca/config_ca. Isi dari file konfigurasi tadi adalah seperti berikut.
root@ca:/ca/ca_dir# cd ..
root@ca:/ca# nano config_ca
[ca]
default_ca = ca
[ca]
dir = ca_dir
#sertifikatdanprivatekeyCA
certificate = $dir/ca.crt
private_key = $dir/ca.key
#Folderpenyimpanan
cert = $dir/sertifikat-customer
new_certs_dir = $dir/sertifikat-customer
crl = $dir/sertifikat-batal
#Databasesertifikatyangsudahdikeluarkan
database = $dir/database.txt
serial = $dir/serial.txt
#Nilaidefaultuntuksertifikatbaru
default_days = 365 #masaberlakusertifikatcustomer
default_crl_days = 30 #masaberlakudaftarpembatalansertifikat
default_md = sha1
x509_extensions = usr_cert
policy = policy-saya
x509_extensions = certificate_extensions
[policy-saya]
commonName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = optional
organizationName = supplied
organizationalUnitName = optional
[certificate_extensions]
basicConstraints = CA:false
[req]
default_keyfile = ca_dir/ca.key
view raw ca.html hosted with ❤ by GitHub
Langkah selanjutnya kita buat file dan direktori tambahan yang diperlukan oleh CA. File dan konfigurasi ini saya letakkan pada direktori /ca/ca_dir/. File dan direktori yang diperlukan adalah sebagai berikut.
root@ca:/ca# cd ca_dir/
root@ca:/ca/ca_dir# touch database.txt
root@ca:/ca/ca_dir# touch database.txt.attr
root@ca:/ca/ca_dir# echo 0000 > serial.txt
root@ca:/ca/ca_dir# mkdir sertifikat-request
root@ca:/ca/ca_dir# mkdir sertifikat-customer
root@ca:/ca/ca_dir# mkdir sertifikat-batal
root@ca:/ca/ca_dir# ls
ca.crt database.txt serial.txt sertifikat-customer
ca.key database.txt.attr sertifikat-batal sertifikat-request
view raw ca.html hosted with ❤ by GitHub
Telah dijelaskan sebelumnya bahwa sebagai Web Server yang terakhir kita kerjakan adalah mengirimkan sertifikat CSR kepada CA, umunya pengiriman ini dilakukan menggunakan Email, namun karna kali ini hanya untuk keperluan belajar kita bisa menggunakan File Transfer biasa seperti SFTP ataupun FTP. Saya asumsikan bahwa File CSR milik Web Server sudah dikirimkan ke CA.
PENYUTUJUAN CSR OLEH CA
**note: Konfigurasi kali ini dilakukan pada CA.
Pada konfigurasi kali ini kita akan seolah-olah menjadi Certificate Authority dan menyutujui sertifikat CSR yang diajukan oleh Web Server, tapi sebelumnya pastikan sertifikate CSR sudah dikirim ke CA dan ada pada direktori /ca/ca_dir/sertifikat-request.
root@ca:/ca# ls ca_dir/sertifikat-request/
setyasite.csr
view raw ca.html hosted with ❤ by GitHub
Untuk menyetujui sertifikat CSR navigasikan letak path ke direktori /ca. Command yang digunakan adalah seperti berikut.
root@ca:/ca# openssl ca -config config_ca -in ca_dir/sertifikat-request/setyasite.csr
Using configuration from config_ca
Enter pass phrase for ca_dir/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'ID'
stateOrProvinceName :ASN.1 12:'Jawa Barat'
localityName :ASN.1 12:'Bekasi'
organizationName :ASN.1 12:'setyasite'
organizationalUnitName:ASN.1 12:'Admin Web'
commonName :ASN.1 12:'www.setyasite.com'
emailAddress :IA5STRING:'admin@setyasite.com'
Certificate is to be certified until Mar 18 04:51:43 2021 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
................................................
.................................................................
.................................................................
view raw ca.html hosted with ❤ by GitHub
Setelah perintah diatas dijalankan maka akan ada file baru secara otomatis bernama 00.pem pada direktori /ca/ca_dir/sertifikat-customer.
Selanjutnya adalah kita mengirimkan file baru tersebut (00.pem) kepada Web Server yang mengajukan CSR. Namun ada baiknya kita sebagai CA merubah nama file tersebut (00.pem) menjadi nama domain dari Web Server tersebut, dari 00.pem kita ubah menjadi setyasite.crt.
root@ca:/ca# cd ca_dir/sertifikat-customer/
root@ca:/ca/ca_dir/sertifikat-customer# ls
00.pem
root@ca:/ca/ca_dir/sertifikat-customer# mv 00.pem setyasite.crt
root@ca:/ca/ca_dir/sertifikat-customer# ls
setyasite.crt
view raw ca.html hosted with ❤ by GitHub
Setelah diRename kita harus segera mengirimkan file setyasite.crt tersebut ke Web Server. Kita bisa menggunakan media transfer seperti email dan sebagainya, namun karna kali ini hanya untuk pembelajaran kita bisa saja menggunakan file transfer biasa seperti sftp ataupun ftp.
KONFIGURASI HTTPS PADA WEB SERVER
**note: Konfigurasi kali ini dilakukan pada Web Server.
Sekarang kita akan mengkonfigurasi Web Server HTTPS dengan memanfaatkan private key dan juga file CRT yang sudah kita buat. Saya asumsikan bahwa file setyasite.crt sudah dikirimkan ke Web Server. Pastikan bahwa file setyasite.crt tersebut sudahada pada direktori /etc/apache2/ssl/. Jadi sekarang kita punya 3 file yaitu private key, CSR, dan juga file CRT. Namun yang dibutuhkan untuk konfigurasi HTTPS hanya dua buah file saja yakni private key dan crt. Setelah file private key dan juga file crt sudah ada. Sekarang kita aktifkan modul ssl dengan perintah seperti berikut ini.
root@web:/etc/apache2/ssl# ls
setyasite.crt setyasite.csr setyasite.key
root@web:/etc/apache2/ssl# a2enmod ssl
view raw ca.html hosted with ❤ by GitHub
Sebelum kita masuk ke langkah selanjutnya, kita siapkan dahulu web direktori yang paling tidak berisikan satu buah file html dengan format nama file index.html. Berikut adalah web direktori yang saya gunakan.
root@web:/etc/apache2/sites-available# ls /var/www/html/
index.html
view raw ca.html hosted with ❤ by GitHub
Sekarang kita konfigurasi HTTPS nya dengan mengedit file /etc/apache2/site-available/default-ssl.conf
root@web:/etc/apache2/sites-available# nano default-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost 10.30.100.10:443>
ServerAdmin admin@setyasite.com
ServerName www.setyasite.com
DocumentRoot /var/www/html
......................................................................
......................................................................
......................................................................................
......................................................................................
SSLCertificateFile /etc/apache2/ssl/setyasite.crt
SSLCertificateKeyFile /etc/apache2/ssl/setyasite.key
view raw ca.html hosted with ❤ by GitHub
Penjelasan dari konfigurasi diatas :
VirtualHost : IP Address dari Web Server
ServerAdmin : Alamat Email administrator
ServerName : Alamat domain untuk Web Server
DocumentRoot : Berikan informasi letak path dari Web Direktori
SSLCertificateFile : Berikan informasi letak path dari file crt
SSLCertificateKeyFile : Berikan informasi letak path dari private key
Sekarang aktifkan file konfigurasi tadi dilanjutkan dengan restart service apche2 nya. gunakan perintah seperti berikut.
root@web:/etc/apache2/sites-available# a2ensite default-ssl.conf
root@web:/etc/apache2/sites-available# /etc/init.d/apache2 restart
[....] Restarting apache2 (via systemctl): apache2.serviceEnter passphrase for SSL/TLS keys for www.setyasite.com:443 (RSA): *****
. ok
view raw ca.html hosted with ❤ by GitHub
Untuk merestart apache2 yang sudah dikonfigurasikan HTTPS sedikit berbeda dengan http biasa, kita harus memasukkan password dari private key yang kita punya. Langkah selanjutnya kita akan melakukan pengujian pada client.
PENGUJIAN PADA CLIENT
Untuk melakukan pengujian kita harus mengimport file crt milik CA ke web browser milik client untuk membuat agar CA yang kita buat tadi terpercaya. Diasumsikan bahwa kita telah download file sertifikat crt milik komputer CA (ca.crt) ke komputer client. Dan disini saya menggunakan web browser FireFox untuk pengujiannya. Jika sobat menggunakan web browser lain sobat bisa menyesuaikan saja. Berikut langkah-langkah mengimport file crt ke web browser FireFox.
Buka web browser FireFox lalu buka setting, masuk ke Privacy & Security, lalu klik View Certificates.
Pada Authorities klik Import.
Pilih file crt milik CA (ca.crt), klik Open lalu Klik OK
Centang pada kedua opsi lalu klik OK
Setelah itu cari dan pastikan bahwa CA kita telah terdaftar sebagai CA terpercaya pada Web Browser FireFox.
Sekarang kita bisa akses Website kita yang telah kita konfigurasikan HTTPS dengan url https://www.setyasite.com maka bisa dilihat bahwa ada icon Gembok di samping url tadi ini berarti konfigurasi kita sudah berhasil.
PENUTUP Oke lah sobat segitu dulu pembelajaran kita kali ini, semoga bisa bermanfaat dan mudah dimengerti. Postingan saya tersebut jauh dari kata 'SEMPURNA' jIka ada kesalahan pada postingan saya kali ini saya mohon maaf karna saya juga masih dalam tahap belajar. Jangan lupa berbagi ilmu yang kita bisa kepada orang lain agar kita bisa manjadi manusia yang bermanfaat. Salam sobat networkers.

You Might Also Like

0 comments

Popular Posts