In dieser Anleitung wird beschrieben, wie Sie einen Cloud HSM-Schlüssel für die Microsoft Authenticode-Signatur über PKCS#11 und Jsign erstellen.
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 signieren, ohne signtool verwenden zu müssen
Hinweise
Für diese Anleitung benötigen Sie Folgendes:
- Ein Windows-Computer mit den Artefakten, die Sie signieren möchten. Java muss auf diesem Computer installiert sein.
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.
Führen Sie gcloud auth application-default login
aus, falls Sie das noch nicht getan haben.
Laden Sie auf Ihrem Windows-Computer die JAR-Datei der neuesten Jsign-Version mit dem folgenden PowerShell-Befehl herunter:
wget https://github.com/ebourg/jsign/releases/download/JSIGN.VERSION/jsign-JSIGN.VERSION.jar -O jsign.jar
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 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 Jsign 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.
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 Jsign 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.
Führen Sie den Befehl jsign --help
aus, um eine Liste der unterstützten Dateiformate aufzurufen.
Signieren Sie die Artefakte mit Jsign, indem Sie Ihren Cloud KMS-Schlüssel und Ihr Zertifikat verwenden.
java -jar PATH_TO_JSIGN.JAR --storetype GOOGLECLOUD \
--storepass $(gcloud auth application-default print-access-token) \
--keystore projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING \
--alias KEY_NAME \
--certfile PATH_TO_CA.CERT
PATH_TO_ARTIFACT_TO_SIGN
Ersetzen Sie Folgendes:
PATH_TO_JSIGN.JAR
: der Pfad zujsign.jar
.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 Erklärung der einzelnen Befehlsoptionen finden Sie in der offiziellen Jsign-Dokumentation.