Suatu hari, saya diminta menerbitkan sebuah sertifikat elektronik untuk atasan saya. File untuk sertifikat elektronik tersebut berekstensi .p12. Untuk kalian yang belum mengenal apa itu file berkstensi .p12 atau PKCS #12, saya akan coba jelaskan menurut apa yang saya tahu ya.
File PKCS #12 merupakan sebuah file untuk menyimpan banyak objek kriptografi sebagai sebuah file tunggal (satu file). File PKCS #12 ini biasanya digunakan untuk menyimpan kunci publik (public key) dan kunci privat (private key) secara bersamaan. PKCS #12 ini merupakan salah satu bagian dari sebuah standar yang bernama Public-Key Cryptography Standards (PKCS) yang dikeluarkan oleh RSA Laboratories.
Benar saja, seperti apa yang sudah saya duga sebelumnya, setelah saya menerbitkan sertifikat elektronik untuknya, ia meminta bantuan saya untuk mengekstrak file PKCS #12 tersebut menjadi 2 file terpisah, yaitu file kunci publik dan file kunci privatnya. Dan untuk kalian yang belum tahu bagaimana cara memecahnya, berikut tuorial singkat dari saya:
- Masuk ke dalam direktori dimana file p12 kamu berada. Dalam contoh kali ini, file PKCS #12 saya bernama superadmin.p12 dan terletak di Desktop.

superadmin.p12 - Setelah berada pada direktori dimana file PKCS #12 kalian berada, yang harus kalian lakukan selanjutnya adalah mengeluarkan kunci privatnya dengan perintah openssl. Berikut ini syntaxnya:
openssl pkcs12 -in <file p12> -nocerts -out <nama kunci privat.pem>
Ekstrak p12 menjadi Private Key penjelasan:
- pkcs12
PKCS#12 Data Management - -in
inputan berupa file berekstensi .p12 - -nocerts
Karena ingin mengekstrak kunci privat, maka nocerts dibutuhkan agar yang terekstrak bukanlah sertifikatnya (kunci publiknya) - -out
Nama untuk keluarannya yang berekstensi .pem
Setelah mengeksekusi perintah di atas, kalian akan diminta untuk memasukkan password dari p12-nya sebanyak kurang lebih 3x. Pastikan kalian memasukan semuanya dengan benar, karena kalau tidak, kunci privatnya tidak akan tersekstrak.

2 contoh dimana kegagalan terjadi saat proses ekstraksi karena salah memasukkan password Dari perintah di atas, saya mengekstrak kunci privat dengan nama privateKey.pem
- pkcs12
- Setelah sukses mengekstrak kunci privat, sekarang waktunya untuk mengekstrak kunci publiknya. Caranya adalah:
openssl pkcs12 -in <file p12> -clcerts -nokeys -out <nama kunci publik.pem>
proses ekstraksi kunci publik penjelasan:
- pkcs12
PKCS#12 Data Management - -in
inputan berupa file berekstensi .p12 - -nokeys
Karena ingin mengekstrak kunci publik, maka nokeys dibutuhkan agar yang terekstrak bukanlah key-nya (kunci privatnya) - -out
Nama untuk keluarannya yang berekstensi .pem
Setelah mengeksekusi perintah di atas, kalian akan diminta untuk memasukkan password dari p12-nya sebanyak kurang lebih 1x. Pastikan kalian memasukan dengan benar, karena kalau tidak, kunci publiknya tidak akan tersekstrak. Pada perintah di atas, saya mengekstrak kunci publik dengan nama publicCert.pem
- pkcs12
- Kini sudah ada 2 file .pem baru di dalam direktori kalian. Gunakan perintah ls -al untuk melihat detil dari kedua file yang baru dibuat (privatKey.pem dan publicCert.pem)

Kunci publik dan privat yang sudah terpisah
Mencocokkan Kunci Publik dan Privat
Sampai tahap ini, kunci privat dan kunci publik sudah terpecah atau tersekstrak dengan baik. Namun kalian pasti ada yang bertanya bagaimana cara mengetahui kalau kunci publik dan kunci privat tersebut adalah pasangan yang sesuai? Namanya keypair alias pasangan kunci, pastinya harus cocok, bukan?
- Baca juga: Cara Merotasi Video dengan FFmpeg
Nah, untuk mencocokkan pasangan kunci, maka kalian harus mencari modulus dari kedua file tersebut (kunci publik dan privat). Bila hasil keduanya sama, maka bisa dipastikan keduanya adalah pasangan yang cocok. Tapi jika tidak sama, maka itu bukanlah pasangan kunci yang tepat.
Tanpa berlama-lama lagi, berikut syntax untuk mencari nilai modulusnya:
openssl x509 -in <nama kunci publik.pem> -noout -modulus

Keterangan:
- x509
x509 Certificate Data Management - -in
Nama file masukan (inputan) - -noout
Agar tidak ada hasil keluaran berupa file - -modulus
Nilai modulus
Seperti dapat terlihat di atas, hasil yang keluar adalah karakter random yang sangat panjang milik kunci publik. Kalau memang kunci privat yang kalian miliki adalah pasangan kunci dari kunci publik tersebut, seharusnya nilai modulusnya itu sama. Namun akan sulit rasanya membandingkan karakter sepanjang itu. Untuk meminimalisasinya, mari hashing karakter di atas ke dalam format md5 dan baru setelah itu dibandingkan nilainya. Caranya:
Modulus Kunci Privat
openssl rsa -in <kunci privat.pem> -noout -modulus | openssl md5
Modulus Kunci Publik
openssl x509 -in <kunci publik.pem> -noout -modulus | openssl md5

Dari gambar di atas, terlihat kalau hasil hashing dari modulus kedua kunci adalah sama. Hal tersebut berarti keduanya meruoakan pasangan yang cocok.
******
Itu tadi sedikit cara untuk memecah file p12 menjadi kunci publik dan kunci privat yang terpisah, serta cara untuk mencari nilai modulus dari tiap kunci. Semoga tutorial singkat di atas bisa berguna untuk kalian ya. Apabila ada pertanyaan, baik itu seputar tulisan di atas ataupun bukan, jangan ragu untuk menanyakannya di kolom komentar ya.
Terima kasih
Sampai jumpa di tulisan selanjutnya.
