Harga HSM (Hardware Security Module) yang mahal membuat tidak semua perusahaan, institusi, atau perseorangan mampu membelinya dan mengimplementasikannya untuk mengamankan (seperti untuk enkripsi, dekripsi, autentikasi, dll) data sensitif yang mereka miliki. Untung saja di dunia ini masih banyak orang baik yang suka ngoprek dan dari oprekan tersebut hadirlah sesuatu yang bernama SoftHSM sebagai salah satu solusi “murah” untuk mengatasi harga HSM yang “mahal” itu.
Apa sih SoftHSM itu? SoftHSM (Software Implementation of HSM) merupakan bagian dari proyek OpenDNSSEC yang menghadirkan HSM tapi dalam bentuk software. Aneh, kan? Jelas aneh, karena “H” dalam HSM itu merupakan singkatan dari Hardware tapi SoftHSM ini justru hadir sebagai perangkat lunak. Namun begitulah adanya.
SoftHSM ini pada dasarnya memiliki fungsi yang sama dengan HSM pada umumya, seperti generate keys, signing data, enkripsi, dekripsi, dll. Hanya saja, yang mungkin tidak disediakan oleh SoftHSM ini adalah perlindungan keamanan terhadap hardware tempat ia dipasang seperti perlindungan yang dilakukan oleh HSM sebenarnya.
Baiklah, sudah cukup perkenalannya soal SoftHSM, sisanya bisa kalian baca di situsnya langsung. Sekarang waktunya masuk ke tujuan utama dari tulisan ini.
Bekerja dalam sebuah proyek CA (Certification Authority), saya pun menjadi cukup akrab dengan HSM. HSM ini saya gunakan untuk mengamankan keys yang saya terbitkan, serta untuk mengamankan transaksi yang terjadi ketika ada proses signing.
Dan pada kesempatan kali ini, saya ingin membagikan informasi mengenai cara untuk mengintegrasikan SoftHSM dengan EJBCA sebagai software yang saya gunakan di atas Ubuntu Server 16.04 (bisa juga diimplementasikan di Ubuntu Server 18.04)
Alat dan Bahan
- Ubuntu Server 16.04 yang sudah terpasang EJBCA 6.10.1.2 (Cara install EJBCA bisa dilihat DI SINI)
- SoftHSM 2.5.0 (Download DI SINI)
- Koneksi Internet
- Beer (Biar segar)
Tahap 1
- Meskipun SoftHSM tersedia dalam repositori milik Ubuntu, tapi saya lebih memilih untuk melakukan instalasinya secara manual lewat tarball. Mengapa? Karena saat saya mencoba memasang SoftHSM lewat perintah apt install dan melanjutkan konfigurasinya, terjadi banyak sekali error.
Untuk mengunduh versi tarball dari SoftHSM, jalankan perintah berikut:sudo wget -c https://dist.opendnssec.org/source/softhsm-2.5.0.tar.gz
Downloading SoftHSM 2.5.0 dengan wget - Kalau sudah diunduh, silakan lakukan proses ekstraksi pada file tarball tersebut dengan dan masuk ke dalam folder hasil ekstraksi tersebut dengan perintah:
sudo tar -zxvf softhsm-2.5.0.tar.gz cd softhsm-2.5.0

Proses ekstrak paket SoftHSM 2.5.0 - Eksekusi file configure dengan perintah:
sudo ./configure
./configure - Ekskusi configure bertujuan untuk menjalankan script yang akan memeriksa dependensi dari software SoftHSM.
- Saat mengeksekusi file configure, (mungkin) kalian mendapatkan error seperti ini:
configure: error: Can't find OpenSSL headers
Can’t find OpenSSL headers - Error tersebut terjadi karena belum dipasangnya library libssl-dev. Untuk memasangnya, jalankan perintah di bawah ini dan setelahnya kembali jalankan peritah ./configure:
sudo apt install libssl-dev
instalasi libssl-dev - Setelah melakukan instalasi libssl-dev dan kembali mengeksekusi file configure, kalian akan kembali mendapatkan pesan error yang kali ini berbunyi:
configure: error: OpenSSL library has no GOST support
OpenSSL Library has no GOST support - Error di atas terjadi karena engine GOST sudah kadaluarsa. Oleh sebab itu OpenSSL versi 1.1.0 atau lebih, sudah tidak lagi menyertakan engine GOST di dalamnya. Untuk “membuang” GOST saat mengkesekusi file configure, jalankan perintah berikut:
sudo ./configure --disable-gost
configure without ghost - Usai menjalankan perintah tersebut, konfigurasi akan berjalan dengan baik. Untuk melihat opsi apa saja yang disediakan ketika ingin mengeksekusi file configure, jalankan perintah:
sudo ./configure --helpDan banyak opsi akan bermunculan
- Sekarang waktunya untuk meng-compile source code dari SoftHSM. Caranya adalah dengan menjalankan perintah:
sudo make
make Proses compile ini akan memakan waktu cukup lama. SIlakan tunggu hingga prosesnya selesai.
- Setelah proses compile selesai, jalankan perintah berikut untuk meng-install SoftHSM
sudo make install
make install Kali ini prosesnya tidak akan lebih lama dari proses compile. Sama halnya seperti proses compile, biarkan proses instalasi ini berjalan hingga selesai.
Tahap Kedua
Selanjutnya adalah inisialisasi soft token. Perintah yang digunakan untuk inisialisasi tersebut adalah softhsm2-util. Berikut ini adalah perintah lengkapnya:
softhsm2-util --init-token --free --label <text>

Karena tidak didefinisikan di awal, ketika perintah tersebut dieksekusi, maka kalian akan diminta untuk memasukkan PIN untuk user dan SO. SO (Security Officer) PIN digunakan untuk menginisialisasi ulang token, sedangkan User PIN akan “diberikan” ke dalam aplikasi sehingga aplikasi bisa berinteraksi dengan SoftHSM lewat token. Itulah mengapa kalian harus mengatur SO dan User PIN.
Minimal PIN yang bisa kalian masukkan adalah 4 karakter, sedangkan maksmimalnya adalah 255 karakter, jadi silakan tentukan sendiri ya. Perintah free bertujuan untuk langsung menggunakan token yang belum terinisialisasi.
Setelah token ditambahkan, slot baru akan muncul secara otomatis sebagai token yang belum terinisiasi. Token yang sudah diinisialisasi akan dipindahkan ke slot lain berdasarkan nomor seri token. Untuk itu, bila kamu ingin berinteraksi dengan token, carilah token label-nya.
Mari kita lanjutkan. Karena saya ingin menggunakan 2 slot, maka saya akan menginisalisasi soft token lainnya di slot yang berbeda. Kalau tadi token label-nya adalah slotsaya, maka token label di slot berikutnya akan saya beri nama softhsm-test. Caranya:
softhsm2-util --init-token --slot <nilai_slot> --token <label> --label <text> --pin <User_PIN> --so-pin <Security_Officer_PIN> softhsm2-util --show-slots

Karena sudah didefinsikan di awal, kalian tidak akan diminta untuk memasukkan lagi PIN untuk User dan SO. Perintah softhsm2-util –show-slots bertujuan untuk menunjukkan slot yang tersedia sekaligus menunjukkan token yang berhasil diinisialisasi. Jadi sekarang ada 2 slot yang siap untuk digunakan.
Untuk melihat opsi apa saja yang bisa kalian tempelkan pada perintah softhsm2-util, berikut adalah pilihan lengkapnya:

Tahap Ketiga
Untuk berinteraksi dengan atau menguji SoftHSM, kali ini saya akan menggunakan interface PKCS11 dari OpenSC. Untuk bisa menggunakan OpenSC, Kalian terlebih dulu harus memasangnya. Jalankan perintah berikut untuk memasang OpenSC pada Ubuntu Server:
sudo apt-get install opensc

Dan untuk mengujinya, jalankan perintah berikut:
pkcs11-tool --module /usr/local/lib/softhsm/libsofthsm2.so -l -t

Opsi -t adalah opsi yang digunakan untuk menguji. Dari gambar di atas, terlihat kalau testing yang dilakukan berhasil.
Tahap Keempat
Sekarang adalah waktunya untuk mengintegrasikan dengan EJBCA. Setelah membuat 2 token di dua slot yang berbeda, restart service EJBCA kalian.
Jika sudah, akses halaman administrator EJBCA lewat browser. Masuk ke CA Functions → Crypto Token → Create New → fill it → Save .
Pada tahap ini, kalian akan menerbitkan crypto token dengan nama Test yang memanfaatkan slot dengan label softhsm-test.
Isikan field yang ada seperti berikut:
| Name | testing |
| Type | PKCS#11 |
| Authentication Code | ************* |
| Repeat Authentication Code | ************* |
| Auto Activation | checked |
| PKCS#11: Library | SoftHSM2 |
| PKCS#11: Reference Type | Slot/Token Label |
| PKCS#11: Reference | softhsm-test |
| PKCS#11: Attribute File | Default |

Berikutnya silakan tambahkan pasangan kunci sesuai yang kalian butuhkan. Pada contoh kali ini saya menambahkan CAEncryptKey, CASignKey, dan CATestKey dengan panjang ketiganya 4096.

Tahap Kelima
Untuk membuat Crypto Token yang baru, kembali ulangi tahapan yang sama yaitu CA Functions → Crypto Token → Create New → fill it → Save. Kali ini yang akan dibuat adalah crypto token dengan nama Testing yang memanfaatkan slot bernama slotsaya.
| Name | testing |
| Type | PKCS#11 |
| Authentication Code | ************* |
| Repeat Authentication Code | ************* |
| Auto Activation | checked |
| PKCS#11: Library | SoftHSM2 |
| PKCS#11: Reference Type | Slot/Token Label |
| PKCS#11: Reference | slotsaya |
| PKCS#11: Attribute File | Default |

Berikutnya silakan tambahkan pasangan kunci sesuai yang kalian butuhkan. Pada contoh kali ini saya menambahkan rootEncryptKey, rootSignKey, dan rootTestKey dengan panjang ketiganya 4096.

Kalau dilihat di dashboard, maka crypto token yang berhasil dibuat adalah seperti berikut:


Tambahan
Semua file konfigurasi mengenai SoftHSM ini bisa kalian temukan di /etc/softhsm2.conf. Untuk melakukan backup terhadap semua token dan objek yang sudah dibuat, kalian bisa melakukan copy seperti copy file biasa pada lokasi yang sudah didefinisikan di softhsm2.conf.
*****
Itu tadi sedikit sharing mengenai integrasi antara SoftHSM2 dengan EJBCA 6.10.1.2 yang berjalan di atas Ubuntu Server 16.04. Semoga informasi di atas bisa berguna ya. Mau diimplementasikan di production monggo, kalau nggak juga tidak masalah 🙂

Comments are closed.