Menggunakan kunci Cloud HSM dengan OpenSSL

Panduan ini memberikan petunjuk untuk menyiapkan OpenSSL guna menggunakan kunci Cloud HSM di Debian 11 (Bullseye). Petunjuk ini umumnya berlaku meskipun Anda menggunakan OS atau lingkungan lain, tetapi perhatikan bahwa mungkin ada sedikit perbedaan.

Persyaratan

Download rilis library untuk memulai. Untuk mengetahui detail tambahan tentang library PKCS #11, lihat panduan pengguna.

Sebelum memulai, instal paket libengine-pkcs11-openssl.

sudo apt-get update
sudo apt-get install libengine-pkcs11-openssl

Konfigurasi

Menetapkan variabel lingkungan PKCS11_MODULE_PATH.

Agar openssl dapat menggunakan library PKCS #11, tetapkan variabel lingkungan PKCS11_MODULE_PATH:

export PKCS11_MODULE_PATH="/path/to/libkmsp11.so"

Untuk menetapkan variabel lingkungan secara permanen, tambahkan export PKCS11_MODULE_PATH="/path/to/libkmsp11.so" ke /etc/profile dengan menjalankan perintah berikut:

echo 'export PKCS11_MODULE_PATH="/path/to/libkmsp11.so"' | sudo tee -a /etc/profile

Konfigurasi library PKCS #11

Library PKCS #11 memerlukan file konfigurasi YAML untuk menemukan resource Cloud KMS. YAML minimal harus mengonfigurasi satu token PKCS #11.

Jika Anda menggunakan OpenSSL dengan proses lain yang mungkin berakhir dengan forking (misalnya, Apache atau Nginx), Anda juga harus memastikan bahwa kolom refresh_interval_secs tetap tidak ditetapkan, atau ditetapkan ke 0.

Contoh file konfigurasi:

---
tokens:
  - key_ring: "projects/my-project/locations/us-central1/keyRings/my-keyring"

Dengan konfigurasi ini, semua kunci penandatanganan dan dekripsi asimetris di my-keyring akan tersedia di library.

Anda harus menetapkan izin pada file konfigurasi agar hanya dapat ditulis oleh pemilik file. Arahkan KMS_PKCS11_CONFIG ke file konfigurasi Anda:

export KMS_PKCS11_CONFIG="/path/to/pkcs11-config.yaml"

Sekali lagi, Anda dapat membuat setelan ini permanen dengan menambahkannya ke /etc/profile.

echo 'export KMS_PKCS11_CONFIG="/path/to/pkcs11-config.yaml"' | sudo tee -a /etc/profile

Menjalankan perintah OpenSSL

Dengan mesin dan library yang dikonfigurasi dengan benar, Anda kini dapat menggunakan mesin dalam perintah OpenSSL.

Saat membuat tanda tangan asimetris, perlu diingat bahwa kunci Cloud KMS dibatasi untuk menggunakan satu ringkasan. Misalnya, CryptoKeyVersion dengan algoritma EC_SIGN_P256_SHA256 harus selalu digunakan bersama dengan ringkasan SHA-256. Hal ini sesuai dengan flag -sha256 di OpenSSL. Kunci yang memerlukan ringkasan SHA-384 atau SHA-512 harus digunakan dengan flag -sha384 atau -sha512.

Membuat tanda tangan baru

Dengan asumsi ada kunci bernama foo di key ring yang dikonfigurasi, gunakan perintah berikut untuk membuat tanda tangan di bar.txt:

openssl dgst -sha256 -engine pkcs11 -keyform engine -sign pkcs11:object=foo bar.txt

Output perintah ini adalah biner yang tidak diformat.

Perintah tersebut mengasumsikan bahwa Anda menggunakan kunci yang menggunakan ringkasan SHA-256, sehingga argumen -sha256 digunakan. Opsi -sha384 atau -sha512 akan sesuai untuk kunci Cloud HSM yang menggunakan jenis ringkasan tersebut.

Untuk kunci RSA-PSS, jangan lupa untuk menggunakan opsi -sigopt yang telah dibahas sebelumnya.

Membuat permintaan penandatanganan sertifikat baru

Anda juga dapat membuat permintaan penandatanganan sertifikat (CSR) untuk kunci penandatanganan Cloud HSM. Hal ini berguna jika otoritas sertifikat Anda memerlukan CSR untuk membuat sertifikat baru untuk penandatanganan kode, atau untuk melindungi sesi web TLS.

openssl req -new -subj '/CN=test/' -sha256 -engine pkcs11 \
  -keyform engine -key pkcs11:object=foo > my-request.csr

Membuat sertifikat yang ditandatangani sendiri baru

Untuk pengembangan dan pengujian lokal, Anda dapat menggunakan sertifikat yang ditandatangani sendiri untuk kunci penandatanganan Cloud HSM. Sertifikat yang ditandatangani sendiri juga berguna untuk penandatanganan token SAML.

openssl req -new -x509 -days 3650 -subj '/CN=test/' -sha256 -engine pkcs11 \
  -keyform engine -key pkcs11:object=foo > my-request.crt

Memecahkan masalah dengan PKCS #11 Spy

PKCS #11 Spy adalah alat open source yang mencatat konten interaksi melalui antarmuka PKCS #11. Library ini melakukannya dengan berada di antara aplikasi dan library PKCS #11, serta mencatat semua panggilan yang dilakukan. Hal ini dapat membantu pemecahan masalah.

Untuk menggunakan PKCS #11 Spy, Anda harus menginstal paket opensc. Paket opensc berisi Spy PKCS #11. Untuk memastikan opensc diinstal, jalankan perintah berikut:

sudo apt-get install opensc

Kemudian, tetapkan variabel lingkungan PKCS11_MODULE_PATH untuk mengarahkan OpenSSL ke library Spy PKCS #11 dengan menjalankan perintah berikut:

export PKCS11_MODULE_PATH=/usr/lib/x86_64-linux-gnu/pkcs11-spy.so

Terakhir, arahkan PKCS #11 Spy ke library PKCS #11 Cloud HSM dengan menetapkan variabel lingkungan PKCS11SPY dan PKCS11SPY_OUTPUT. Untuk menetapkan variabel lingkungan ini, jalankan perintah berikut:

export PKCS11SPY="/path/to/libkmsp11.so"
# Optional, stderr will be used for logging if not set
export PKCS11SPY_OUTPUT="/path/to/pkcs11-spy.log"