In dieser Anleitung wird beschrieben, wie Sie einen Cloud HSM-Schlüssel für die Microsoft Authenticode-Signatur über unseren CNG-Anbieter und SignTool erstellen.
Eine Terraform-basierte Blueprint-Version dieser Anleitung finden Sie im GitHub-Repository von kms-solutions.
Anwendungsfälle
Der in diesem Dokument beschriebene Workflow hilft, die folgenden Sicherheitsanforderungen von Unternehmen zu erfüllen:
- Signieren Sie die Firmware mit einem privaten Schlüssel, der durch ein FIPS 140-2 Level 3 HSM geschützt ist.
- Windows-Artefakte mit dem Windows-Standardtool „SignTool“ signieren
Hinweise
Für diese Anleitung benötigen Sie Folgendes:
- Ein Windows-Computer mit den Artefakten, die Sie signieren möchten.
- Die neueste Version des Cloud KMS CNG-Anbieters, die mit dem enthaltenen .msi-Installationsprogramm auf Ihrem Windows-Computer installiert werden kann.
Cloud Shell oder Ihren eigenen Linux-Computer, um eine Anfrage zur Signatur des Zertifikats oder ein Zertifikat zu generieren. Führen Sie auf diesem Computer die in OpenSSL-Einrichtung beschriebene Konfiguration aus, um unsere PKCS#11-Bibliothek herunterzuladen und zu konfigurieren.
Führen Sie gcloud auth application-default login
aus, falls Sie das noch nicht getan haben.
Laden Sie das neueste Windows SDK auf Ihren Windows-Computer herunter, sofern Sie dies noch nicht getan haben. Es enthält SignTool.
Konfiguration
Von Cloud KMS gehosteten Signaturschlüssel erstellen
Erstellen Sie mit Cloud Shell oder auf 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-EC-P256-SHA256
-Hardware-Signaturschlüssel 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 kann von Ihrer Zertifizierungsstelle (Certificate Authority, CA) für die Ausstellung eines EV-Zertifikats (Extended Validation) verlangt werden.
So laden Sie die HSM-Attestierung herunter, die mit Ihrem Cloud KMS-Schlüssel verknüpft ist:
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 prüfen.
Klicken Sie im Dialogfeld Bestätigung bestätigen auf Attestierungspaket herunterladen. Dadurch wird eine ZIP-Datei mit den Attestierungs- und Zertifikatsketten heruntergeladen.
Eine ausführliche Anleitung zum Verifizieren der heruntergeladenen Attestierung finden Sie unter Attestierung parsen.
Selbst signiertes Zertifikat mit OpenSSL erstellen
Dieser Schritt ist optional, aber er hilft Ihnen, sich mit den nachfolgenden Schritten vertraut zu machen, bevor Sie den Prozess und die Kosten für den Kauf eines von einer Zertifizierungsstelle signierten Zertifikats durchlaufen.
Generieren Sie mit Cloud Shell oder Ihrem eigenen Computer ein selbst signiertes Zertifikat mit dem von Cloud KMS gehosteten Signaturschlüssel. Sie können mit OpenSSL einen PKCS #11-URI anstelle eines Dateipfads verwenden und den Schlüssel anhand seines Labels identifizieren. In der Cloud KMS-PKCS #11-Bibliothek entspricht das Schlüssellabel dem Namen des CryptoKey.
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 für die Signierung des Zertifikats (Certificate Signing Request, CSR) für einen Cloud HSM-Signaturschlü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 in Cloud Shell oder auf Ihrem eigenen Computer den folgenden Befehl 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 die Art des Digests angibt. Verwenden Sie je nach Algorithmus des Schlüssels-sha256
,-sha384
oder-sha512
.KEY_ID
: die voll qualifizierte Ressourcen-ID einer Version eines asymmetrischen Signaturschlüssels, z. B.projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
.REQUEST_NAME
: ein Name für die Zertifikatsignaturanfrage.
Achten Sie darauf, die richtigen -sigopt
-Optionen für den verwendeten Schlüsseltyp zu verwenden.
Mit OpenSSL können Sie keine Objekt-ID verwenden, die länger als 100 Zeichen ist. Verwenden Sie kurze KeyRing
- und CryptoKey
-Namen oder verwenden Sie stattdessen pkcs11:object=KEY_NAME
.
Weitere Informationen zum Limit für OpenSSL-Objekt-IDs finden Sie im entsprechenden Problem auf GitHub.
Nachdem Sie den CSR erhalten haben, können Sie ihn an Ihre Zertifizierungsstelle (Certificate Authority, CA) senden, um das Signaturzertifikat zu erhalten. Verwenden Sie im nächsten Abschnitt das von Ihrer Zertifizierungsstelle bereitgestellte Zertifikat.
Artefakt mit SignTool signieren
Nachdem Sie ein Zertifikat (entweder selbst signiert oder von der Zertifizierungsstelle erhalten) erstellt und auf Ihren Windows-Computer kopiert haben, können Sie damit ein Windows-Artefakt signieren.
Signieren Sie die Artefakte mit SignTool, indem Sie Ihren Cloud KMS-Schlüssel und Ihr Zertifikat verwenden.
"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 ausführliche Erläuterung der einzelnen Befehlsoptionen und unterstützten Dateiformate für Artefakte finden Sie in der offiziellen SignTool-Dokumentation.