Menggunakan Penyedia CNG dan SignTool untuk menandatangani artefak Windows

Panduan ini memberikan petunjuk untuk membuat kunci Cloud HSM untuk penandatanganan Microsoft Authenticode melalui penyedia CNG dan SignTool kami.

Anda dapat menemukan versi blueprint berbasis Terraform dari tutorial ini di repositori GitHub kms-solutions.

Kasus penggunaan

Alur kerja yang diuraikan dalam dokumen ini membantu memenuhi kebutuhan keamanan perusahaan berikut:

  • Tanda tangani firmware dengan kunci pribadi yang dilindungi oleh HSM FIPS140-2 Level 3.
  • Tanda tangani artefak Windows menggunakan alat SignTool standar Windows.

Sebelum memulai

Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut:

  • Komputer Windows dengan artefak yang ingin Anda tanda tangani.
  • Rilis penyedia CNG Cloud KMS terbaru, yang dapat diinstal di komputer Windows menggunakan penginstal .msi yang disertakan.
  • Cloud Shell atau mesin Linux Anda sendiri, untuk membuat permintaan penandatanganan sertifikat atau sertifikat. Di komputer ini, selesaikan konfigurasi yang didokumentasikan dalam Penyiapan OpenSSL, untuk mendownload dan mengonfigurasi library PKCS#11.

Jangan lupa untuk menjalankan gcloud auth application-default login jika Anda belum melakukannya.

Jika Anda belum melakukannya, download Windows SDK terbaru di komputer Windows, yang menyertakan SignTool.

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 menggunakan perintah berikut:

gcloud kms keyrings create "KEY_RING" --location "LOCATION"

Kemudian, buat kunci penandatanganan hardware EC-P256-SHA256 Cloud KMS di projectGoogle Cloud , 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"

Mendownload 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:

  1. Di konsol Google Cloud, buka halaman Key Management.

    Buka Key Management

  2. Pilih key ring yang berisi kunci yang ingin Anda sahkan, lalu pilih kunci.

  3. Klik Lainnya untuk versi kunci yang ingin Anda sahkan, lalu klik Verifikasi pengesahan.

  4. Dalam dialog Verifikasi pengesahan, klik Download paket pengesahan. Tindakan ini akan mendownload file zip yang berisi rantai pengesahan dan sertifikat.

Lihat Mengurai pengesahan untuk mendapatkan 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 melalui proses dan biaya pembelian sertifikat yang ditandatangani oleh Certificate Authority.

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. Dalam 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 ditetapkan 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 komputer Windows agar Anda dapat menggunakannya dengan SignTool untuk menandatangani artefak.

Membuat permintaan penandatanganan sertifikat baru

Anda dapat membuat permintaan penandatanganan sertifikat (CSR) untuk kunci penandatanganan Cloud HSM. Selesaikan langkah-langkah ini jika otoritas sertifikasi Anda memerlukan CSR untuk membuat sertifikat baru guna menandatangani kode.

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: flag yang menunjukkan jenis ringkasan. Gunakan -sha256, -sha384, atau -sha512, bergantung pada algoritma kunci.
  • KEY_ID: ID resource yang sepenuhnya memenuhi syarat dari versi kunci penandatanganan assimetris—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.

Anda tidak dapat menggunakan ID objek yang lebih dari 100 karakter dengan OpenSSL. Gunakan nama KeyRing dan CryptoKey singkat, atau gunakan pkcs11:object=KEY_NAME. Untuk mengetahui informasi selengkapnya tentang batas ID objek OpenSSL, lihat masalah terkait di GitHub.

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 SignTool

Setelah berhasil membuat sertifikat (ditandatangani sendiri atau diperoleh dari Certificate Authority) dan menyalinnya ke komputer Windows, Anda dapat menggunakannya untuk menandatangani artefak Windows.

Gunakan SignTool untuk menandatangani artefak, menggunakan kunci Cloud KMS dan sertifikat Anda.

"PATH_TO_SIGNTOOL.EXE" sign ^
  /v /debug /fd sha256 /t http://timestamp.digicert.com ^
  /f PATH_TO_CA.CERT ^
  /csp "Google Cloud KMS Provider" ^
  /kc projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1 ^
  PATH_TO_ARTIFACT_TO_SIGN

Ganti kode berikut:

  • PATH_TO_SIGNTOOL.EXE: jalur ke signtool.exe (misalnya, C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.19041.0\\x64\\signtool.exe).
  • PATH_TO_CA.CERT: jalur ke sertifikat Anda ca.cert.
  • PATH_TO_ARTIFACT_TO_SIGN: jalur ke artefak yang ingin Anda tanda tangani.

Untuk penjelasan mendetail tentang setiap opsi perintah dan format file artefak yang didukung, lihat dokumentasi SignTool resmi.