Signer des artefacts Windows à l'aide du fournisseur CNG et de SignTool

Ce guide explique comment créer une clé Cloud HSM pour la signature Microsoft Authenticode via notre fournisseur CNG et SignTool.

Vous trouverez une version du plan basée sur Terraform de ce tutoriel dans la dépôt GitHub kms-solutions.

Cas d'utilisation

Le workflow décrit dans ce document s'adresse aux entreprises suivantes : en matière de sécurité:

  • Signez le micrologiciel à l'aide d'une clé privée protégée par un module HSM FIPS140-2 de niveau 3.
  • Signez les artefacts Windows à l'aide de l'outil SignTool standard de Windows.

Avant de commencer

Pour suivre ce tutoriel, vous avez besoin des éléments suivants:

  • Une machine Windows avec les artefacts que vous souhaitez signer.
  • La dernière version du fournisseur GNC Cloud KMS, peut être installé sur votre machine Windows à l'aide du programme d'installation .msi inclus.
  • Cloud Shell ou votre propre machine Linux pour générer une demande de signature de certificat ou un certificat. Sur cette machine, suivez la configuration décrite dans la section Configurer OpenSSL pour téléchargez et configurez notre bibliothèque PKCS#11.

N'oubliez pas d'exécuter gcloud auth application-default login si ce n'est pas déjà fait.

Si vous ne l'avez pas déjà fait, téléchargez la dernière version du SDK Windows sur votre Windows, qui inclut SignTool.

Configuration

Créer une clé de signature hébergée par Cloud KMS

À l'aide de Cloud Shell ou de votre propre machine, créez Cloud KMS dans votre projet Google Cloud à l'aide de la commande suivante:

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

Ensuite, créez une clé de signature matérielle EC-P256-SHA256 Cloud KMS dans votre Google Cloud, dans le trousseau de clés que vous venez de créer:

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"

Télécharger l'attestation HSM

Une attestation HSM est la preuve que votre clé réside dans un HSM. Cette preuve peut être requise par votre autorité de certification (CA) pour émettre un certificat de validation étendue (EV).

Pour télécharger l'attestation HSM associée à votre clé Cloud KMS, procédez comme suit : procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Gestion des clés.

    Accéder à Key Management

  2. Sélectionnez le trousseau de clés contenant la clé que vous souhaitez attester, puis sélectionnez la clé.

  3. Cliquez sur Plus . pour la version de clé que vous souhaitez attester, puis cliquez sur Valider l'attestation.

  4. Dans la boîte de dialogue Valider l'attestation, cliquez sur Télécharger le groupe d'attestations. Un fichier ZIP contenant l'attestation et le certificat est alors téléchargé chaînes.

Pour obtenir des instructions détaillées sur la validation de l'attestation téléchargée, consultez la section Analyser l'attestation.

Créer un certificat autosigné avec OpenSSL

Cette étape est facultative, mais vous permet de vous familiariser avec étapes avant de suivre le processus et le coût d'achat d'un certificat signé par une autorité de certification.

À l'aide de Cloud Shell ou de votre propre machine, générez un certificat autosigné à l'aide de la clé de signature hébergée par Cloud KMS. Vous pouvez utiliser OpenSSL pour utiliser URI PKCS #11 au lieu d'un chemin d'accès au fichier et identifiez la clé par son étiquette. Dans bibliothèque Cloud KMS PKCS #11, le libellé de clé équivaut à la Nom de la CryptoKey.

openssl req -new -x509 -days 3650 -subj '/CN=test/' -sha256 -engine pkcs11 \
  -keyform engine -key pkcs11:object=KEY_NAME > ca.cert

Si cette commande échoue, il est possible que PKCS11_MODULE_PATH ait été défini de manière incorrecte ou que vous ne disposiez pas des autorisations nécessaires pour utiliser la clé de signature Cloud KMS.

Vous devriez maintenant avoir un certificat semblable à celui-ci :

-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----

Copiez le certificat sur votre ordinateur Windows afin de pouvoir l'utiliser avec SignTool pour signer vos artefacts.

Créer une nouvelle requête de signature de certificat

Vous pouvez générer une demande de signature de certificat (CSR) pour une clé de signature Cloud HSM. Suivez ces étapes si votre autorité de certification exige une CSR afin de générer un nouveau certificat pour la signature de code.

À l'aide de Cloud Shell ou de votre propre machine, exécutez la commande suivante:

openssl req -new -subj '/CN=CERTIFICATE_NAME/' DIGEST_FLAG \
  -engine pkcs11 -keyform engine \
  -key pkcs11:id=KEY_ID > REQUEST_NAME.csr

Remplacez les éléments suivants :

  • CERTIFICATE_NAME: nom du certificat que vous que vous voulez générer.
  • DIGEST_FLAG: indicateur indiquant le type de condensé. Utilisez -sha256, -sha384 ou -sha512 selon l'algorithme de la clé.
  • KEY_ID: ID de ressource complet d'une instance version de clé de signature (par exemple, projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
  • REQUEST_NAME: nom de la requête de signature de certificat.

Veillez à utiliser les options -sigopt appropriées pour le type de clé que vous utilisent.

Vous ne pouvez pas utiliser un ID d'objet de plus de 100 caractères avec OpenSSL. Utilisez des noms KeyRing et CryptoKey courts, ou utilisez pkcs11:object=KEY_NAME à la place. Pour en savoir plus sur la limite d'ID d'objets OpenSSL, consultez problème associé sur GitHub.

Maintenant que vous disposez de votre requête de signature de certificat, vous pouvez la transmettre à votre certificat pour obtenir le certificat de signature. Utiliser le certificat fourni par votre autorité de certification dans la section suivante.

Signer un artefact avec SignTool

Maintenant que vous avez créé un certificat (autosigné ou obtenu auprès de l'autorité de certification) et l'avez copié sur votre machine Windows, vous pouvez l’utiliser pour signer un artefact Windows.

Utilisez SignTool pour signer les artefacts, à l'aide de votre clé Cloud KMS et de votre certificat.

"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

Remplacez les éléments suivants :

  • PATH_TO_SIGNTOOL.EXE: chemin d'accès à signtool.exe (par exemple, C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.19041.0\\x64\\signtool.exe).
  • PATH_TO_CA.CERT: chemin d'accès à votre certificat ca.cert.
  • PATH_TO_ARTIFACT_TO_SIGN: le chemin d'accès à l'artefact que que vous voulez signer.

Pour une explication détaillée de chaque option de commande et des formats de fichier d'artefact compatibles, consultez la documentation officielle de SignTool.