Cara Menandatangani Archive dan Memverifikasinya

Beberapa hari yang lalu, saat berkunjung ke tempat client untuk mempresentasikan penggunaan tanda tangan elektronik, saya sempat terkejut dengan permintaannya. Bukan karena permintaannya yang aneh, hanya saja saya belum pernah mencoba melakukan permintaan tersebut. “Pak, bisa tidak tanda tangan elektronik itu dibubuhkan pada file archive seperti rar, zip, tar, dan teman-temannya?” Tanya salah seorang client.

“Duh, kalau itu saya harus coba dulu pak. Secara teori, hal tersebut sangat dimungkinkan. Semua jenis file bisa ditandatangani secara elektronik, hanya saja (mungkin) caranya yang tidak sama.” Jawab saya.

Usai menjawab pertanyaan tersebut, saya pun langsung mencari tahu cara untuk menandatangani file archive dan ternyata memang bisa. Sesuai perkiraan saya, caranya pun sedikit berbeda. Kalau file dokumen seperti doc, docx, xlsx, & pdf yang biasa saya tanda tangani, tanda tangan elektroniknya langsung melekat di atas file dan bisa langsung diverifikasi dengan aplikasi semacam Adobe Acrobat atau aplikasi office. Sedangkan untuk archive ini, akan muncul 1 file baru yang nantinya akan dibandingkan dengan archive yang lama. Jika cocok, maka file tidak mengalami perubahan. Namun jika tidak, maka dapat dipastikan archive tersebut sudah mengalami perubahan.

Salah satu fungsi dari penggunaan tanda tangan elektronik pada sebuah file adalah untuk menjaga keaslian file tersebut. Sebab bila file yang sudah ditandatangani diubah, sudah pasti tanda tangan elektronik di atasnya akan hilang.

Daripada bingung dengan penjelasan saya yang agak rumit tadi, lebih baik langsung ke prakteknya saja ya.

  1. Saya punya 2 file. Yang pertama adalah file archive bernama dailyvoyagers_com.zip yang mau saya tandatangani. Kedua adalah file PKCS 12 bernama darius1.p12 yang merupakan sertifikat elektronik kepunyaan saya.

    File awal yang saya miliki
  2. Apabila saya ekstrak, isi dari dailyvoyagers_com.zip adalah dailyvoyagers_com.ca-bundle dan dailyvoyagers_com.crt

    Isi dari file dailyvoyagers_com.zip
  3. Untuk menandatangani sebuah file, kalian perlu menggunakan private key (key). Untuk memverifikasinya, kalian perlu menggunakan public key (certificate). Nah, pada kesempatan kali ini, saya hanya mempunyai sebuah file PKCS 12 dimana private key dan public key-nya “menyatu” di dalamnya. Untuk itu, saya perlu memecah file tersebut, jalankan perintah berikut di terminal:
    Private key

    openssl pkcs12 -in <file.p12> -nocerts -out <nama_private_key.pem>
    Mengekstrak Private Key

    Public Key

    openssl rsa -in <kunci_privat.pem> -passin pass:<password_kunci_privat> -pubout -out <Nama_kunci_publik.pem>
    Membuat pasangan kunci

    Selama proses ekstraksi, kalian akan diminta untuk memasukkan password. Password tersebut adalah password pembungkus dari file PKCS 12 yang kalian miliki. Masukkan password tersebut dengan benar. Karena jika salah, maka proses ekstraksi akan gagal.

  4. Dari proses di atas, terbentuklah 2 file baru bernama privatDarius.pem yang merupakan kunci privat saya dan publikDarius.pem yang merupakan kunci publik milik saya. Jadi sekarang sudah ada 4 file dalam folder saya
    Total sekarang ada 4 file: archive, PKCS12, kunci privat dan kunci publik

     

Penandatanganan

Untuk menandatangani archive (dailyvoyagers_com.zip), kalian masih menggunakan perintah openssl dan membutuhkan kunci privat (privatDarius.pem). Caranya:

openssl dgst -sha256 -sign <kunci_privat.pem> -out <Nama_file_keluarannya> <nama_file_yang_mau_ditandatangani>
Proses pemberian tanda tangan pada file dailyvoyagers_com.zip

*Pada saat ingin menandatangani, kalian akan diminta untuk memasukkan password dari kunci privat yang kalian set saat ekstraksi tadi. Pastikan kalian memasukkannya dengan benar

Sekarang terbentuklah sebuah file baru dengan nama dailyvoyagers_com.zip.sig yang merupakan hash dari file dailyvoyagers_com.zip yang berhasil ditandatangani.

Terbentuknya file baru dailyvoyagers_com.zip.sig

Verifikasi

Untuk memverifikasi archive yang sudah ditandatangani (dailyvoyagers_com.zip.sig), kalian masih menggunakan perintah openssl dan membutuhkan kunci publik (publikDarius.pem). Caranya:

openssl dgst -sha256 -verify <kunci_publik.pem> -signature <nama_file_yang_ditandatangani> <nama_file_yang_lama> 
Verifikasi OK, file sesuai

Dari gambar di atas, bisa dilihat kalau verifikasi berjalan dengan lancar sebab tertulis Verification OK. Jika tidak, maka yang akan tertulis adalah Verification Failure.

Mari kita uji ulang dengan cara mengekstrak file dailyvoyagers_com.zip → menghapus file dailyvoyagers_com.crt → mengkompresi kembali dengan nama dailyvoyagers_com.zip → memverifikasinya. Maka hasil yang didapat adalah sebagai berikut:

Verification Failure

Kenapa bisa terjadi seperti itu? Karena isinya sudah berbeda dan hash-nya pun berbeda.

Troubleshoot

Bila kalian menemui masalah seperti ini

proses verifikasi namun gagal

Hal tersebut karena openssl dgst -sha256 -verify publikDarius.pem mengharapkan publikDarius.pem berada dalam format X.509. Sayangnya, kunci publik yang saya contohkan di atas tidak berada dalam format tersebut. Sebenarnya, RAW Format itu ada di dalam file publikDarius.pem hanya saja perintah openssl dgst itu tidak bisa memprosesnya secara lengkap sekaligus.

Untuk memperbaiki masalah tersebut, maka kita harus mengekstraknya dari certificate yang sudah ada. Caranya:

openssl x509 -pubkey -noout -in <kunci_publik.pem> > <kunci_publik_baru.pem>
kunci publik format X.509

Setelah berhasil, jalankan kembali proses verifikasi, namun dengan menggunakan kunci publik yang sudah dalam format baru (X.509).

Verifikasi berhasil

Sudah beres, kan? unable to load key itu biasanya terjadi karena pengguna membuat kunci publik dengan cara:

openssl pkcs12 -in <file.p12> -clcerts -nokeys -out <kunci_publik.pem>
Public key

dan bukan seperti yang saya contohkan di atas. Memang sama-sama kunci publik, hanya saja formatnya yang berbeda.

One comment

Leave a Reply

Your email address will not be published. Required fields are marked *