In dieser Anleitung wird beschrieben, wie Sie einen Cloud HSM-Schlüssel für die Microsoft Authenticode-Signierung über unseren CNG-Anbieter und SignTool erstellen.
Eine auf Terraform basierende Blueprint-Version dieser Anleitung finden Sie im GitHub-Repository „kms-solutions“.
Anwendungsfälle
Der in diesem Dokument beschriebene Workflow hilft, die folgenden Sicherheitsanforderungen von Unternehmen zu erfüllen:
- Firmware mit einem privaten Schlüssel signieren, der durch ein FIPS140-2 Level 3-HSM geschützt ist.
- Windows-Artefakte mit dem Windows-Standardtool SignTool signieren.
Hinweis
Für diese Anleitung benötigen Sie Folgendes:
- Ein Windows-Computer mit den Artefakten, die Sie signieren möchten.
- Die aktuelle Version des Cloud KMS CNG-Anbieters, die mit dem enthaltenen MSI-Installationsprogramm auf Ihrem Windows-Computer installiert werden kann.
Cloud Shell oder Ihr eigener Linux-Computer, um eine Anfrage zur Signierung des Zertifikats oder ein Zertifikat zu generieren. Führen Sie auf diesem Computer die in OpenSSL-Einrichtung dokumentierte Konfiguration aus, um unsere PKCS#11-Bibliothek herunterzuladen und zu konfigurieren.
Denken Sie daran, gcloud auth application-default login auszuführen, falls Sie das noch nicht getan haben.
Laden Sie das aktuelle Windows SDK auf Ihrem Windows-Computer herunter, falls Sie dies noch nicht getan haben. Es enthält SignTool.
Konfiguration
Von Cloud KMS gehosteten Signaturschlüssel erstellen
Erstellen Sie mit Cloud Shell oder Ihrem eigenen Computer einen Cloud KMS-Schlüsselbund in Ihrem Google Cloud -Projekt mit dem folgenden Befehl:
gcloud kms keyrings create "KEY_RING" --location "LOCATION"
Erstellen Sie dann in IhremGoogle Cloud -Projekt einen Cloud KMS-Hardwaresignaturschlüssel EC-P256-SHA256 im Schlüsselbund, den Sie gerade erstellt haben:
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"
HSM-Attestierung herunterladen
Eine HSM-Attestierung ist ein Nachweis dafür, dass sich Ihr Schlüssel in einem HSM befindet. Dieser Nachweis ist möglicherweise erforderlich, damit Ihre Zertifizierungsstelle ein EV-Zertifikat ausstellen kann.
So laden Sie die HSM-Attestierung für Ihren Cloud KMS-Schlüssel herunter:
Rufen Sie in der Google Cloud Console die Seite Schlüsselverwaltung auf.
Wählen Sie den Schlüsselbund mit dem Schlüssel aus, den Sie attestieren möchten. Wählen Sie dann den Schlüssel aus.
Klicken Sie für die zu attestierende Schlüsselversion auf das Dreipunkt-Menü more_vert und dann auf Attestierung bestätigen.
Klicken Sie im Dialogfeld Bestätigung überprüfen auf Bestätigungsbundle herunterladen. Dadurch wird eine ZIP-Datei mit den Attestierungs- und Zertifikatsketten heruntergeladen.
Eine vollständige Anleitung zum Überprüfen der heruntergeladenen Attestierung finden Sie unter Attestierung parsen.
Selbst signiertes Zertifikat mit OpenSSL erstellen
Dieser Schritt ist optional, hilft Ihnen aber, sich mit den nachfolgenden Schritten vertraut zu machen, bevor Sie ein von einer Zertifizierungsstelle signiertes Zertifikat kaufen.
Generieren Sie mit Cloud Shell oder Ihrem eigenen Computer ein selbst signiertes Zertifikat mit dem von Cloud KMS gehosteten Signaturschlüssel. Sie können OpenSSL verwenden, um einen PKCS #11-URI anstelle eines Dateipfads zu verwenden und den Schlüssel anhand seines Labels zu identifizieren. In der Cloud KMS PKCS #11-Bibliothek entspricht das Schlüssellabel dem CryptoKey-Namen.
openssl req -new -x509 -days 3650 -subj '/CN=test/' -sha256 -engine pkcs11 \
-keyform engine -key pkcs11:object=KEY_NAME > ca.cert
Wenn dieser Befehl fehlschlägt, wurde PKCS11_MODULE_PATH möglicherweise falsch festgelegt oder Sie haben nicht die erforderlichen Berechtigungen zur Verwendung des Cloud KMS-Signaturschlüssels.
Sie sollten jetzt ein Zertifikat haben, das so aussieht:
-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
Kopieren Sie das Zertifikat auf Ihren Windows-Computer, damit Sie es mit SignTool zum Signieren Ihrer Artefakte verwenden können.
Neue Zertifikatsignierungsanfrage erstellen
Sie können eine Anfrage zum Signieren eines Zertifikats (Certificate Signing Request, CSR) für einen Cloud HSM-Signierschlüssel generieren. Führen Sie diese Schritte aus, wenn Ihre Zertifizierungsstelle eine CSR benötigt, um ein neues Zertifikat für die Codesignierung zu generieren.
Führen Sie den folgenden Befehl mit Cloud Shell oder auf Ihrem eigenen Computer aus:
openssl req -new -subj '/CN=CERTIFICATE_NAME/' DIGEST_FLAG \
-engine pkcs11 -keyform engine \
-key pkcs11:id=KEY_ID > REQUEST_NAME.csr
Ersetzen Sie Folgendes:
CERTIFICATE_NAME: ein Name für das Zertifikat, das Sie generieren möchten.DIGEST_FLAG: Ein Flag, das den Typ des Digests angibt. Verwenden Sie-sha256,-sha384oder-sha512, je nach Algorithmus des Schlüssels.KEY_ID: die voll qualifizierte Ressourcen-ID einer asymmetrischen Signaturschlüsselversion, z. B.projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1.REQUEST_NAME: ein Name für die Zertifikatsignierungsanfrage.
Achten Sie darauf, dass Sie die richtigen -sigopt-Optionen für den verwendeten Schlüsseltyp verwenden.
Mit OpenSSL können Sie keine Objekt-ID verwenden, die länger als 100 Zeichen ist. Verwenden Sie kurze Namen für KeyRing und CryptoKey oder verwenden Sie stattdessen pkcs11:object=KEY_NAME.
Weitere Informationen zum OpenSSL-Limit für Objekt-IDs finden Sie in diesem GitHub-Problem.
Nachdem Sie den CSR haben, können Sie ihn Ihrer Zertifizierungsstelle (CA) zur Verfügung stellen, um das Signaturzertifikat zu erhalten. Verwenden Sie das Zertifikat, das von Ihrer Zertifizierungsstelle bereitgestellt wurde, im nächsten Abschnitt.
Artefakt mit SignTool signieren
Nachdem Sie ein Zertifikat (entweder selbst signiert oder von der Zertifizierungsstelle bezogen) erstellt und auf Ihren Windows-Computer kopiert haben, können Sie es zum Signieren eines Windows-Artefakts verwenden.
Signieren Sie die Artefakte mit SignTool und Ihrem Cloud KMS-Schlüssel und Ihrem Zertifikat.
"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
Ersetzen Sie Folgendes:
PATH_TO_SIGNTOOL.EXE: der Pfad zusigntool.exe(z. B.C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.19041.0\\x64\\signtool.exe) verwenden.PATH_TO_CA.CERT: der Pfad zu Ihrem Zertifikatca.cert.PATH_TO_ARTIFACT_TO_SIGN: Der Pfad zum Artefakt, das Sie signieren möchten.
Eine detaillierte Beschreibung der einzelnen Befehlsoptionen und unterstützten Artefaktdateiformate finden Sie in der offiziellen SignTool-Dokumentation.