Tuesday, January 24, 2017

Membuat Self-Signed CA SSL dengan OpenSSL dan Implementasinya di Apache2 & NGINX ~ Pt.1

  1 comment

Assalamu'alaikum Wr. Wb.

Introduction:
Sudahkan teman-teman mensetting protokol HTTPS di Server kalian? Apakah teman-teman selalu mendapati pesan Warning yang selalu mengganggu? Ya itu terjadi karena kita menggunakan Self-Signed Certificate yang tidak memiliki data tentang Certificate Authority. Walau sebenarnya kita tetap mendapatkan koneksi yang terenkripsi berkat SSL meski selalu mendapati pesan Warning, namun ada baiknya kita memperbaiki kekurangan tersebut supaya menciptakan kebiasaan mengakses situs yang baik, tidak asal Add Exception. Nah umumnya Sertifikat Resmi yang sudah diakui urutan komponennya adalah sebagai berikut:


1. Root (Certificate Authority) -> 2. Intermediate (Certificate Issuer) -> 3. End User Certificate

Sedangkan Self-Signed Certificate umumnya hanya memiliki yang ketiga. Tidak mempunyai Root dan Intermediate Authority. Itulah sebabnya mengapa kalian akan terus menerus mendapatkan pesan Warning yang umumnya memberitahu bahwa Sertifikat yang kita gunakan tidak dikenali karena tidak memiliki komponen nomer 2 dan 3.

Jadi apakah kita bisa membuat sendiri ketiga komponen tersebut?
Bisa, dengan OpenSSL kita bisa membuat sendiri ketiga komponen diatas. Jadi intinya dengan OpenSSL kita dapat bertindak sebagai Root CA, Intermediate, dan juga sebagai End User.

-----------------------------------------------

Pre-requisite:
1. OS GNU/Linux (Saya menggunakan Distro Debian)
2. Komponen OpenSSL (di Debian dan turunannya dapat diinstall dengan apt-get install openssl)
3. Webserver, Apache2 atau NGINX dengan modul SSL dihidupkan

Langkah Pembuatan:
1. Buat Direktori untuk Sertifikat kita nantinya di /root/ca. Juga buat struktur direktorinya
root@labor:~# mkdir ca && cd ca
root@labor:~/ca# mkdir certs crl newcerts private
root@labor:~/ca# chmod 700 private
root@labor:~/ca# touch index.txt && echo 1000 > serial
root@labor:~/ca# mkdir intermediate && cd intermediate
root@labor:~/ca/intermediate# mkdir certs crl csr newcerts private && chmod 700 private
root@labor:~/ca/intermediate# touch index.txt && echo 1000 > serial
2. Buat Konfigurasi OpenSSL yang akan kita gunakan untuk Root CA nantinya.
root@labor:~/ca# nano openssl.cnf
Isi Konfigurasinya dapat dilihat disini
Penjelasan mengenai parameter konfigurasinya dapat dilihat disini

3. Buat Root Key.
Root Key akan digunakan untuk membuat Sertifikat Root (CA). Dan juga pastikan diamankan dengan Passphrase atau kata kunci yang aman dan Jangan sampai File ini hilang.
root@labor:~/ca# openssl genrsa -aes256 -out private/ca.key.pem 4096
root@labor:~/ca# chmod 400 private/ca.key.pem
4. Buat Sertifikat Root (CA)
Disinilah Root Key akan digunakan. Yaitu untuk membuat Sertifikat Root, mengapa keamanan file ini penting? karena siapapun yang memiliki akses Root Key maka dia dapat menerbitkan sertifikat sendiri. Juga pastikan untuk memilih durasi Sertifikat Root yang agak lama untuk kadaluarsa Seperti durasi diatas 15 Tahun. Karena jika Durasi Sertifikat Root Habis maka Sertifikat dibawahnya juga ikut kadaluarsa.
root@labor:~/ca# req -config openssl.cnf -key private/ca.key.pem -new -x509 -days (DURASI SERTIFIKAT DALAM HARI) -sha256 -extensions v3_ca -out certs/ca.cert.pem
root@labor:~/ca# chmod 444 certs/ca.cert.pem
# Verifikasi Hasil Pembuatan Sertifikat Root
root@labor:~/ca# openssl x509 -noout -text -in certs/ca.cert.pem
5. Buat Konfigurasi OpenSSL untuk Intermediate CA
root@labor:~/ca/intermediate# nano openssl.cnf
Isi Konfigurasi dapat dilihat disini

# Tambahkan File crlnumber di direktori Intermediate CA untuk mengikuti daftar Certificate Revocation Lists
root@labor:~/ca/intermediate# echo 1000 > crlnumber
6. Buat Intermediate Key
Intermediate Key akan digunakan untuk membuat sertifikat Intermediate CA
root@labor:~/ca# openssl genrsa -aes256 -out intermediate/private/intermediate.key.pem 4096
root@labor:~/ca#  chmod 400 intermediate/private/intermediate.key.pem
7. Buat Sertifikat CSR (Certificate Signing Request) untuk Intermediate CA
Disini Intermediate Key akan digunakan untuk men-generate atau membuat Sertifikat CSR untuk Intermediate CA.
Untuk catatan, Informasi Data dari CSR haruslah Sama dengan Root Certificate kecuali untuk CN atau Common Name
root@labor:~/ca# openssl req -config intermediate/openssl.cnf -new -sha256 -key intermediate/private/intermediate.key.pem -out intermediate/csr/intermediate.csr.pem
8. Buat Sertifikat Intermediate
Setelah CSR untuk Intermediate dibuat, selanjutnya adalah digunakan bersama dengan Root CA untuk membuat Sertifikat Intermediate. Untuk catatan, Durasi dari Sertifikat Intermediate haruslah tidak lebih panjang dari Durasi dari Sertifikat Root.
root@labor:~/ca# openssl ca -config openssl.cnf -extensions v3_intermediate_ca -days (DURASI SERTIFIKAT DALAM HARI) -notext -md sha256 -in intermediate/csr/intermediate.csr.pem -out intermediate/certs/intermediate.cert.pem
root@labor:~/ca# chmod 444 intermediate/certs/intermediate.cert.pem
# Verifikasi Hasil dari Pembuatan Sertifikat Intermediate
root@labor:~/ca# openssl x509 -noout -text -in intermediate/certs/intermediate.cert.pem
root@labor:~/ca# openssl verify -CAfile certs/ca.cert.pem intermediate/certs/intermediate.cert.pem
# Bila hasil benar maka akan keluar: intermediate.cert.pem: OK

9. Buat Certificate Key untuk End User
root@labor:~/ca# openssl genrsa -aes256 -out intermediate/private/smkn1pedan.ti.key.pem 2048
root@labor:~/ca# chmod 400 intermediate/private/smkn1pedan.ti.key.pem
*teman-teman dapat mengganti nama alamat yang saya beri warna biru dengan alamat website teman-teman

10. Buat CSR (Certificate Signing Request) untuk End User
Untuk catatan:
*Informasi Data untuk CSR End User tidak harus atau tidak perlu sama dengan Sertifikat Intermediate atau Root.
*Untuk Sertifikat Server, Nama Domain dapat dimasukkan di Common Name (CN). Nama tidak boleh sama dengan Sertifikat Intermediate ataupun Root
*Domain dengan www dan tanpa www terhitung Single Domain. Jadi rencanakan dengan matang ketika mengisi Nama Domain di Common Name (CN) terutama untuk teman-teman yang hanya membuat SSL Non-Wildcard
Tips:
*Untuk membuat Wildcard SSL (SSL yang hanya mengamankan Subdomain), teman-teman dapat menambahkan tanda bintang didepan (*) pada saat memasukkan Nama Domain di Common Name. Contohnya: *.smkn1pedan.ti
root@labor:~/ca# openssl req -config intermediate/openssl.cnf -key intermediate/private/smkn1pedan.ti.key.pem -new -sha256 -out intermediate/csr/smkn1pedan.ti.csr.pem
11. Buat Sertifikat End User dengan Certificate Key dan CSR End User
root@labor:~/ca# openssl ca -config intermediate/openssl.cnf -extensions server_cert -days (DURASI SERTIFIKAT DALAM HARI) -notext -md sha256 -in intermediate/csr/smkn1pedan.ti.csr.pem -out intermediate/certs/smkn1pedan.ti.cert.pem
root@labor:~/ca# chmod 444 intermediate/certs/smkn1pedan.ti.cert.pem
# Verifikasi Sertifikat End User
root@labor:~/ca# openssl x509 -noout -text -in intermediate/certs/smkn1pedan.ti.cert.pem
root@labor:~/ca# openssl verify -CAfile intermediate/certs/ca-chain.cert.pem intermediate/certs/smkn1pedan.ti.cert.pem
# Apabila tidak ada masalah dalam sertifikatnya maka akan keluar: smkn1pedan.ti.cert.pem: OK

12. Buat File Certificate Chain
Certificate Chain berisi Sertifikat dari Root dan Intermediate. Certificate Chain biasa digunakan untuk Web Browser (Khususnya di Linux) untuk memverifikasi Sertifikat yang digunakan di Website kita
root@labor:~/ca# cat intermediate/certs/intermediate.cert.pem certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem
root@labor:~/ca# chmod 444 intermediate/certs/ca-chain.cert.pem
13. Siap Digunakan!
Itulah proses pembuatannya, untuk mulai menggunakan Sertifikat diatas di Web Server (Server-side) siapkan file-file berikut:
1. smkn1pedan.ti.key.pem (SSL Private Key) (Lokasi: intermediate/private)
2. smkn1pedan.ti.cert.pem (SSL Certificate) (Lokasi: intermediate/certs)

Untuk tutorial bagaimana mengimplementasikannya di Webserver Apache2 atau NGINX, tunggu artikel saya selanjutnya :)

Itulah Proses Pembuatan dari komponen-komponen yang dibutuhkan untuk menjadi Root CA, Intermediate, dan End User CA. Semoga bermanfaat bagi teman-teman semua :)
Wassalamu'alaikum Wr. Wb.

------------------------------------------------------------------
Main Reference:
Jamielinux (Sign Server and Client Certificate - OpenSSL Certificate Authority)
Special Thanks to Jamielinux!

1 comment :

  1. Bos, tolongin dong.....
    Step terakhir verify kenapa ca-chain.cert.pem tidak ditemukan?
    Ada step yang terlewat atau bagaimana?
    Please

    Suwandi

    ReplyDelete