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 de ce tutoriel basée sur un plan Terraform dans le dépôt GitHub kms-solutions.
Cas d'utilisation
Le workflow décrit dans ce document permet de répondre aux besoins de sécurité des entreprises suivants:
- Signez le micrologiciel avec une clé privée protégée par un HSM FIPS 140-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 CNG Cloud KMS, qui peut être installée sur votre machine Windows à l'aide de l'installateur .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, terminez la configuration décrite dans la section Configuration d'OpenSSL pour télécharger et configurer 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 ordinateur 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 un trousseau de clés 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 projetGoogle 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:
Dans la console Google Cloud, accédez à la page Gestion des clés.
Sélectionnez le trousseau de clés contenant la clé que vous souhaitez attester, puis sélectionnez la clé.
Cliquez sur Plus more_vert pour obtenir la version de clé que vous souhaitez attester, puis sur Valider l'attestation.
Dans la boîte de dialogue Valider l'attestation, cliquez sur Télécharger le groupe d'attestations. Un fichier ZIP contenant les chaînes d'attestation et de certificat est alors téléchargé.
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 elle vous permet de vous familiariser avec les étapes suivantes avant de passer par la procédure et les dépenses 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é avec la clé de signature hébergée par Cloud KMS. Vous pouvez utiliser OpenSSL pour utiliser un URI PKCS #11 au lieu d'un chemin de fichier et identifier la clé par son libellé. Dans la bibliothèque PKCS #11 Cloud KMS, le libellé de clé équivaut au 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 demande de signature de certificat afin de générer un nouveau certificat pour la signature du 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 souhaitez générer.DIGEST_FLAG
: indicateur indiquant le type de récapitulatif. Utilisez-sha256
,-sha384
ou-sha512
, en fonction de l'algorithme de la clé.KEY_ID
: ID de ressource complet d'une version de clé de signature asymétrique (par exemple,projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
).REQUEST_NAME
: nom de la demande de signature de certificat.
Assurez-vous d'utiliser les options -sigopt
appropriées pour le type de clé que vous utilisez.
Vous ne pouvez pas utiliser d'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'objet OpenSSL, consultez le problème associé sur GitHub.
Maintenant que vous disposez de votre requête de signature de certificat, vous pouvez la fournir à votre autorité de certification (CA) pour obtenir le certificat de signature. Utilisez 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 ordinateur 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 certificatca.cert
.PATH_TO_ARTIFACT_TO_SIGN
: chemin d'accès à l'artefact que vous souhaitez 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.