Diese Anleitung enthält eine Anleitung zum Erstellen eines Cloud HSM-Schlüssels für Microsoft Authenticode-Signierung über PKCS#11 und Jsign
Anwendungsfälle
Der in diesem Dokument beschriebene Workflow hilft bei der Umsetzung folgender Unternehmen: Sicherheitsanforderungen:
- Signieren Sie die Firmware mit einem privaten Schlüssel, der durch ein FIPS140-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:
- Windows-Computer mit den Artefakten, die Sie signieren möchten. Stellen Sie sicher, dass Java auf diesem Computer installiert ist.
Cloud Shell oder Ihren eigenen Linux-Computer, um eine Anfrage zur Signatur des Zertifikats oder ein Zertifikat zu generieren. Auf diesem Computer Schließen Sie die Konfiguration ab, die unter OpenSSL-Einrichtung dokumentiert ist.
Führen Sie gcloud auth application-default login
aus, falls noch nicht geschehen.
Laden Sie auf Ihrem Windows-Computer die aktuelle Jsign-release-JAR-Datei herunter. mit dem folgenden PowerShell-Befehl:
wget https://github.com/ebourg/jsign/releases/download/JSIGN.VERSION/jsign-JSIGN.VERSION.jar -O jsign.jar
Konfiguration
In Cloud KMS gehosteten Signaturschlüssel erstellen
Cloud KMS mit Cloud Shell oder Ihrem eigenen Computer erstellen Schlüsselbund in Ihrem Google Cloud-Projekt mit dem folgenden Befehl an:
gcloud kms keyrings create "KEY_RING" --location "LOCATION"
Erstellen Sie dann in Ihrem Cloud KMS-EC-P256-SHA256
-Hardwaresignaturschlüssel
Google Cloud-Projekt in dem gerade erstellten Schlüsselbund:
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 der Nachweis, dass sich Ihr Schlüssel in einem HSM befindet. Dieser Nachweis könnte von Ihrer Zertifizierungsstelle benötigt, um ein Extended Validation (EV) auszustellen Zertifikat.
So laden Sie die mit Ihrem Cloud KMS-Schlüssel verknüpfte HSM-Attestierung herunter: führen Sie die folgenden Schritte aus:
Rufen Sie in der Google Cloud Console die Seite Key Management auf.
Wählen Sie den Schlüsselbund aus, der den zu attestierenden Schlüssel enthält, und wählen Sie den Schlüssel aus.
Klicken Sie auf Mehr more_vert. für die Schlüsselversion, die Sie attestieren möchten, und klicken Sie dann auf Attestierung überprüfen.
Klicken Sie im Dialogfeld Bestätigung bestätigen auf Attestierungspaket herunterladen. Dadurch wird eine ZIP-Datei mit der Attestierung und dem Zertifikat heruntergeladen Ketten.
Unter Attestierung parsen finden Sie eine vollständige Anleitung zum Prüfen Sie die heruntergeladene Attestierung.
Selbst signiertes Zertifikat mit OpenSSL erstellen
Dieser Schritt ist optional, hilft Ihnen aber, sich mit den nachfolgenden Schritten vertraut zu machen. bevor Sie den Prozess und die Kosten für den Erwerb eines Zertifikats durchlaufen. von einer Zertifizierungsstelle signiert.
Generieren Sie mit Cloud Shell oder Ihrem eigenen Computer ein selbst signiertes Zertifikat mit dem von Cloud KMS gehosteten Signierschlüssel. Mit OpenSSL können Sie PKCS #11-URI anstelle eines Dateipfads und identifizieren Sie den Schlüssel anhand seines Labels. 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.
haben Sie möglicherweise nicht die erforderlichen Berechtigungen, um Cloud KMS zu verwenden.
Signaturschlüssel.
Sie sollten jetzt ein Zertifikat haben, das so aussieht:
-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
Kopieren Sie das Zertifikat auf Ihren Windows-Computer, um es mit Jsign, um Ihre Artefakte zu signieren.
Neue Zertifikatsignierungsanfrage erstellen
Sie können eine Anfrage zur Signierung des Zertifikats (Certificate Signing Request, CSR) für ein Cloud HSM generieren Signaturschlüssel. Führen Sie diese Schritte aus, wenn Ihre Zertifizierungsstelle eine CSR erfordert um ein neues Zertifikat für die Codesignatur 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 die Sie generieren möchten.DIGEST_FLAG
: Ein Flag, das den Typ des Digests angibt. Verwenden Sie-sha256
,-sha384
oder-sha512
, je nach Algorithmus des Schlüssels.KEY_ID
: die vollständig qualifizierte Ressourcen-ID einer asymmetrischen Signierschlüsselversion, z. B.projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
.REQUEST_NAME
: ein Name für die Anfrage zur Zertifikatssignierung.
Achten Sie darauf, die richtigen -sigopt
-Optionen für den verwendeten Schlüsseltyp zu verwenden.
Nachdem Sie nun über Ihren CSR verfügen, können Sie ihn zu Ihrem Zertifikat hinzufügen Zertifizierungsstelle (CA), um das Signaturzertifikat zu erhalten. Bereitgestelltes Zertifikat verwenden von Ihrer Zertifizierungsstelle erhalten.
Artefakt mit Jsign signieren
Nachdem Sie nun ein Zertifikat (entweder selbst signiertes oder von der Zertifizierungsstelle erhalten) und auf Ihren Windows-Computer kopiert haben. können Sie damit ein Windows-Artefakt signieren.
Eine Liste der unterstützten Dateiformate erhalten Sie mit dem Befehl jsign --help
.
Verwenden Sie Jsign, um die Artefakte mit Ihrem Cloud KMS-Schlüssel und Ihrem Zertifikat.
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
: Pfad zum Artefakt, das die Sie unterschreiben möchten.
Eine ausführliche Erläuterung der einzelnen Befehlsoptionen finden Sie in der offiziellen Jsign-Dokumentation