Jika kalian belum membaca tulisan sebelumnya, kalian bisa membaca DI SINI. Sekarang adalah waktunya untuk melakukan pembuktian atas Mutual Autentikasi menggunakan sertifikat yang diterbitkan oleh EJBCA. Tahapan yang perlu kalian lakukan:
1. Pendaftaran Sertifikat untuk Server
Sebelum menerbitkan sertifikat, kalian terlebih dahulu harus mendaftarkan entitas akhir terlebih dahulu. Pilih Add Entity yang berada di bawah menu RA Functions. Pada bagian End Entity Profile, kalian pilih Profil_server yang sudah kalian buat tadi dan field yang sesuai dengan profil tersebut pun akan muncul menggantikan profile sebelumnya.
Sebagai contoh, saya akan mengisi setiap field-nya sebagai berikut:
- Username: server_testing1
- Password: 123456789
- Confirm Password: 123456789
- Email: server_testing1@gmail.com
- CN: Server Testing 1
- Email: √
- O: Testing
- OU: <kosong>
- C: ID
- DNS Name: <FQDN>
- IP Address: <alamat_IP>
- Certificate Profile: Testing_Auth_Server
- CA: CA Authentication G1
- Token: P12 File
- Add

2. Pendaftaran Sertifikat untuk Client
Sama halnya seperti pendaftaran sertifikat untuk server, pada sisi client ini kalian hanya perlu mengubah End Entity Profile menjadi Profil_client. Dan berikut ini adalah contoh pengisian tiap field pada Profil_client.
- Username: client_testing1
- Password: 123456789
- Confirm Password: 123456789
- Email address: client_testing1@gmail.com
- CN: Client Testing 1
- O: Testing
- OU: <kosong>
- C: ID
- Email: √
- Certificate Profile: Testing_Auth_Client
- CA: CA Authentication G1
- Token: P12 File
- Add

3. Menerbitkan Sertifikat untuk Server
Untuk menerbitkan sertifikat, kalian masuk ke halaman pertama dari EJBCA (bukan halaman admin). Pada bagian Enroll, pilih Create Keystore. Masukkan nama username dan password, lalu tekan OK.
Jika username dan password sesuai, maka kalian akan diminta untuk menentukan key spesification untuk seritifikat yang akan diterbitkan. Silakan pilih sesuai dengan kebutuhan kalian, tapi dalam contoh kali ini saya akan menerbitkan dengan detil RSA 2048 bits. Tekan enroll dan sertifikat akan langsung terunduh ke direktori download di laptop kalian.


4. Menerbitkan Sertifikat untuk Client
Sama halnya seperti menerbitkan sertifikat untuk server. Untuk menerbitkan sertifikat untuk klien, kalian masuk ke halaman pertama EJBCA, pilih Create Keystore pada menu Enroll, dan masukkan username & password yang sesuai.
Berikutnya kalian hanya perlu menentukan key spesification. Sama seperti sertifikat untuk server, sertifikat untuk klien kali ini pun RSA 2048 bits. Tekan enroll untuk menerbitkannya dalam bentuk file P12.


5. Mengunduh Truststore dari CA yang Dipakai untuk Menerbitkan Sertifikat.
Ketika 2 file sebelumnya sudah berhasil terunduh (server_testing1.p12 & client_testing1.p12), sekarang adalah waktunya untuk mengunduh truststore dari CA yang dipakai untuk menerbitkan kedua file P12 tersebut.
Cara mengunduhnya pun mudah. Kalian hanya perlu masuk ke halaman pertama dari EJBCA dan pilih Fetch CA Certificates yang berada di bawah menu Retrieve. Perhatikan CA yang kalian gunakan untuk menerbitkan sertifikat bagi entitas akhir (pada contoh kali ini adalah CA Authentication G1). Kemudian pilih Download JKS Truststore yang ada pada bagian CA Certificate Chain dan file berekstensi .JKS tersebut akan otomatis terunduh ke dalam direktori download di laptop kalian.

Berarti sampai sejauh ini sudah ada 3 file yang berhasil diunduh: server_testing1.p12, client_testing1.p12, CAAuthenticationG1-chain.jks. File CAAuthenticationG1-chain.jks ini diperlukan untuk nantinya diimpor ke dalam laptop atau server sebagai rootCA yang dipercaya. Untuk mempermudah, file CAAuthenticationG1-chain.jks bisa di-rename menjadi truststore.jks.


6. Membuat Keystore
Kalau sebelumnya ada truststore yang digunakan untuk menyimpan sertifikat dari RootCA yang dipercaya, maka keystore ini dibuat untuk menyimpan kunci privat dan sertifikat pemilik yang nantinya akan digunakan untuk identifikasi pada saat proses verifikasi.
Sekarang kita akan membuat keystore.jks yang nantinya akan diunggah ke dalam server. Caranya dengan menggunakan perintah keytool (silakan install apabila kalian belum memasangnya). Perintahnya:
keytool -importkeystore -srckeystore <file p12 milik server> -srcstoretype PKCS12 -destkeystore <nama file.jks> -deststoretype JKS

Kalian akan diminta memasukkan password dari P12 dan password untuk file .jks yang akan kalian buat. Pada contoh kali ini saya membuatnya sama.
Sampai sejauh ini sudah ada 4 file yang kalian punya: server_testing1.p12, client_testing1.p12, truststore.jks, keystore.jks
7. Mengunggah file .jks, Menjalankan Aplikasi, dan Menguji Mutual Autentikasi
Sukses membuat file truststore.jks dan keystore.jks, sekarang waktunya mengunggah kedua file tersebut ke dalam server untuk digunakan oleh aplikasi sederhana yang dibungkus ke dalam container. Contoh penggunaannya adalah sebagai berikut:


7. Menguji Aplikasi (1)
Seperti dapat kalian lihat pada tahap nomor 6, aplikasi simple yang dibuat menggunakan port 8081 sebagai port yang diekspos ke luar. Untuk menguji apakah Mutual Autentikasi berhasil, saya akan memasukkan ke dalam browser alamat domain atau IP dan menambahkan port 8081 di belakangnya (browser yang saya gunakan untuk pengujian adalah Firefox).

Akan terdapat peringatan ketika saya mencoba untuk mengakses aplikasi tersebut. Jika memilih “Terima Risikonya dan Lanjutkan” pun saya akan mendapati halaman error. Hal ini dikarenakan browser (dalam contoh kali ini Firefox) belum memiliki rootCA certificate di dalam repositorinya sebagai daftar CA yang terpercaya.
Untuk bisa membuat sertifikat yang digunakan oleh aplikasi dipercaya oleh browser, saya harus menambahkan RootCa certificate ke dalam Firefox. Sekaranglah waktunya untuk rootCA cert dari web EJBCA yang sudah diunduh tadi ditambahkan ke dalam browser. Caranya:
keytool -importkeystore -srckeystore <CA.jks> -destkeystore <Nama_CA.p12> -deststoretype PKCS12 openssl pkcs12 -in <Nama_CA.p12> -nokeys -out <Nama_CA.cer>


Untuk mendapatkan sertifikat dari rootCA yang nantinya akan diimpor ke dalam browser, kalian bisa mengekstraknya dari file .jks. Namun yang saya lakukan adalah mengubahnya terlebih dahulu ke dalam file .p12 dan baru kemudian mengambil file .cer-nya.
8. Mengimpor Sertifikat CA ke dalam Browser (Firefox)
Begitu sudah memiliki sertifikat dari rootCA (CAAuthentiationG1-chain.cer), saya harus mengimpornya ke dalam browser. Berikut ini adalah tahapan untuk mengimpornya:
- Pilih menu tiga garis yang ada di bagian kanan browser dan pilih pengaturan.
- Pada searchbox, masukkan keyword: sertifikat.
- Pilih tampilkan sertifikat.

Tahap 1 mengimpor sertifikat ke dalam browser - Tabel “Pengelola Sertifikat” akan muncul. Pada tab Otoritas, pilih impor.

Pilih tab impor untuk mengimpor sertifikat - Pilih sertifikat rootCA dalam bentuk file .cer yang sudah diekstrak dari file .p12 tadi.

sertifikat CA yang akan diimpor ke dalam repositori milik Firefox agar masuk dalam daftar CA yang terpercaya - Kemudian akan muncul sebuah tab baru untuk kalian memercayai CA yang baru diimpor tadi agar masuk dalam daftar CA terpercaya. Jangan lupa untuk mencentang “Percayai CA ini untuk mengidentifikasi situs web” dan kemudian pilih Oke.

Pilih percayai CA ini untuk megidentifikasi situs web dan tekan Oke
9. Menguji Aplikasi (2)
Setelah mengimpor sertifikat rootCA ke dalam browser, saya kembali mencoba untuk mengakses aplikasi melalui URL yang sama seperti sebelumnya. Pesan warning tidak akan muncul, tapi berganti menjadi pesan error yang berbeda. Kali ini pesan error di Firefox berbunyi, “Sambungan Aman Gagal” dengan kode kesalahan “SSL_BAD_CERT_ALERT”.
Hal ini dikarenakan saya baru mengimpor sertifikat rootCA ke dalam browser, tapi tidak dengan file .p12 milik klien. Saya harus juga memasukkan file .p12 (client_testing1.p12) ke dalam browser (bahkan sistem operasi).

10. Mengimpor file PKCS12 Klien ke Dalam OS
Untuk melengkapi tahapan Mutual Autentikasi, saya juga harus memasukkan PKCS12 klien (client_testing1.p12) ke dalam laptop kalian, setelah sebelumnya file PKCS12 milik server (server_testing1.p12) sudah diimpor ke dalam server.
Cara mengimpor sertifikat ke dalam laptop adalah sebagai berikut: (saya akan memberi contoh dengan menggunakan Macbook)
- Pilih file .p12 yang ingin diimpor (client_testing1.p12)
- Kalian akan diminta memasukkan password untuk membuka file PKCS12 tersebut dan memasukkannya ke dalam sistem operasi.

mengimpor file PKCS12 milik klien ke dalam laptop - Jika password-nya benar, maka public dan private key dari klien akan otomatis masuk ke dalam keychain access.

Public & private key sudah berhasil diimpor
11. Menguji Aplikasi (3)
Semua tahapan seharusnya sudah dilakukan dengan benar. Sekarang waktunya untuk melakukan pengujian terakhir. Agar lebih pasti lagi, saya akan menutup browser terlebih dahulu dan membukanya kembali. Saya akan memasukkan kembali URL yang sama seperti sebelumnya dan kini pesan yang tampil pun akan berbeda.
Sebuah window yang berisi detil informasi akan sertifikat klien yang baru saja kalian impor akan muncul. Sertifikat ini memang dibutuhkan untuk melakukan Mutual Autentikasi dengan server. Tekan Oke dan saya akan masuk ke dalam halaman pertama dari aplikasi kecil yang saya buat.


******
Dengan tampilnya halaman pertama dari aplikasi yang menandakan kalau proses Mutual Autentikasi antara server dan klien sudah berhasil, maka berakhirlah tulisan ini. Semoga informasi ini bisa berguna ya. Sampai jumpa di tulisan selanjutnya.
Sumber Tambahan
- Client Certificate for authentication Purpose → DI SINI.
- Recommended key usage for a client certificate → DI SINI.
- Setup & verify Mutual TLS Authentication with OpenSSL → DI SINI.
- Membedakan server & klien dalam Mutual TLS Authentication → DI SINI.
- Aplikasi sederhana untuk pengujian Mutual Autentikasi → DI SINI.
