Panduan ini memberikan petunjuk untuk membuat kunci Cloud HSM untuk penandatanganan Microsoft Authenticode melalui PKCS#11 dan Jsign.
Kasus penggunaan
Alur kerja yang diuraikan dalam dokumen ini membantu memenuhi kebutuhan keamanan perusahaan berikut:
- Menandatangani firmware dengan kunci pribadi yang dilindungi oleh HSM FIPS140-2 Level 3.
- Menandatangani artefak Windows tanpa harus menggunakan signtool.
Sebelum memulai
Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut:
- Mesin Windows dengan artefak yang ingin Anda tandatangani. Pastikan Java diinstal di mesin ini.
Cloud Shell atau mesin Linux Anda sendiri, untuk membuat permintaan penandatanganan sertifikat atau sertifikat. Di komputer ini, selesaikan konfigurasi yang didokumentasikan dalam Penyiapan OpenSSL.
Jangan lupa jalankan gcloud auth application-default login jika Anda belum melakukannya.
Di komputer Windows Anda, download file JAR rilis Jsign terbaru menggunakan perintah PowerShell berikut:
wget https://github.com/ebourg/jsign/releases/download/JSIGN.VERSION/jsign-JSIGN.VERSION.jar -O jsign.jar
Konfigurasi
Membuat kunci penandatanganan yang dihosting Cloud KMS
Dengan menggunakan Cloud Shell atau komputer Anda sendiri, buat key ring Cloud KMS di project Google Cloud Anda menggunakan perintah berikut:
gcloud kms keyrings create "KEY_RING" --location "LOCATION"
Kemudian, buat kunci penandatanganan hardware EC-P256-SHA256 Cloud KMS di project
Google Cloud Anda, di key ring yang baru saja Anda buat:
gcloud kms keys create "KEY_NAME" --keyring "KEY_RING" \
--project "PROJECT_ID" --location "LOCATION" \
--purpose "asymmetric-signing" --default-algorithm "ec-sign-p256-sha256" \
--protection-level "hsm"
Download pengesahan HSM
Pengesahan HSM adalah bukti bahwa kunci Anda berada di HSM. Bukti ini mungkin diperlukan oleh Certificate Authority (CA) Anda untuk menerbitkan sertifikat Extended Validation (EV).
Untuk mendownload pengesahan HSM yang terkait dengan kunci Cloud KMS Anda, selesaikan langkah-langkah berikut:
Di konsol Google Cloud , buka halaman Key Management.
Pilih key ring yang berisi kunci yang ingin Anda buktikan, lalu pilih kunci.
Klik Lainnya more_vert untuk versi kunci yang ingin Anda buktikan, lalu klik Verifikasi pengesahan.
Dalam dialog Verifikasi pengesahan, klik Download paket pengesahan. Tindakan ini akan mendownload file zip yang berisi rantai pengesahan dan sertifikat.
Lihat Mem-parsing pengesahan untuk mengetahui petunjuk lengkap tentang cara memverifikasi pengesahan yang didownload.
Membuat sertifikat yang ditandatangani sendiri dengan OpenSSL
Langkah ini bersifat opsional, tetapi membantu Anda memahami langkah-langkah berikutnya sebelum Anda menjalani proses dan pengeluaran untuk membeli sertifikat yang ditandatangani oleh Otoritas Sertifikat.
Dengan menggunakan Cloud Shell atau mesin Anda sendiri, buat sertifikat yang ditandatangani sendiri dengan kunci penandatanganan yang dihosting Cloud KMS. Anda dapat menggunakan OpenSSL untuk menggunakan URI PKCS #11, bukan jalur file, dan mengidentifikasi kunci berdasarkan labelnya. Di library PKCS #11 Cloud KMS, label kunci setara dengan nama CryptoKey.
openssl req -new -x509 -days 3650 -subj '/CN=test/' -sha256 -engine pkcs11 \
-keyform engine -key pkcs11:object=KEY_NAME > ca.cert
Jika perintah ini gagal, PKCS11_MODULE_PATH mungkin telah disetel dengan salah, atau
Anda mungkin tidak memiliki izin yang tepat untuk menggunakan kunci penandatanganan Cloud KMS.
Sekarang Anda akan memiliki sertifikat yang terlihat seperti ini:
-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
Salin sertifikat ke mesin Windows Anda agar Anda dapat menggunakannya dengan Jsign untuk menandatangani artefak Anda.
Buat permintaan penandatanganan sertifikat baru
Anda dapat membuat permintaan penandatanganan sertifikat (CSR) untuk kunci penandatanganan Cloud HSM. Selesaikan langkah-langkah ini jika otoritas sertifikat Anda memerlukan CSR untuk membuat sertifikat baru bagi penandatanganan kode.
Dengan menggunakan Cloud Shell atau mesin Anda sendiri, jalankan perintah berikut:
openssl req -new -subj '/CN=CERTIFICATE_NAME/' DIGEST_FLAG \
-engine pkcs11 -keyform engine \
-key pkcs11:id=KEY_ID > REQUEST_NAME.csr
Ganti kode berikut:
CERTIFICATE_NAME: nama untuk sertifikat yang ingin Anda buat.DIGEST_FLAG: tanda yang menunjukkan jenis ringkasan. Gunakan-sha256,-sha384, atau-sha512, bergantung pada algoritma kunci.KEY_ID: ID resource yang memenuhi syarat sepenuhnya dari versi kunci penandatanganan asimetris—misalnya,projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1.REQUEST_NAME: nama untuk permintaan penandatanganan sertifikat.
Pastikan Anda menggunakan opsi -sigopt yang benar untuk jenis kunci yang Anda gunakan.
Setelah memiliki CSR, Anda dapat memberikannya ke Certificate Authority (CA) untuk mendapatkan sertifikat penandatanganan. Gunakan sertifikat yang disediakan oleh CA Anda di bagian berikutnya.
Menandatangani artefak dengan Jsign
Setelah berhasil membuat sertifikat (baik yang ditandatangani sendiri maupun yang diperoleh dari Otoritas Sertifikat) dan menyalinnya ke komputer Windows, Anda dapat menggunakannya untuk menandatangani artefak Windows.
Untuk mengetahui daftar format file yang didukung, jalankan perintah jsign --help.
Gunakan Jsign untuk menandatangani artefak, menggunakan kunci Cloud KMS dan sertifikat Anda.
java -jar PATH_TO_JSIGN.JAR --storetype GOOGLECLOUD \
--storepass $(gcloud auth application-default print-access-token) \
--keystore projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING \
--alias KEY_NAME \
--certfile PATH_TO_CA.CERT
PATH_TO_ARTIFACT_TO_SIGN
Ganti kode berikut:
PATH_TO_JSIGN.JAR: jalur kejsign.jar.PATH_TO_CA.CERT: jalur ke sertifikat Andaca.cert.PATH_TO_ARTIFACT_TO_SIGN: jalur ke artefak yang ingin Anda tandatangani.
Untuk penjelasan mendetail tentang setiap opsi perintah, lihat dokumentasi Jsign resmi.