CNG-Anbieter und SignTool zum Signieren von Windows-Artefakten verwenden

Diese Anleitung enthält eine Anleitung zum Erstellen eines Cloud HSM-Schlüssels für Microsoft Authenticode-Signierung über unseren CNG-Anbieter und das SignTool

Eine Terraform-basierte Blueprint-Version dieser Anleitung finden Sie in der kms-solutions GitHub-Repository

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 mit dem Windows-Standardtool „SignTool“ signieren

Hinweise

Für diese Anleitung benötigen Sie Folgendes:

  • Windows-Computer mit den Artefakten, die Sie signieren möchten.
  • Die neueste Version des Cloud KMS-CNG-Anbieters, die kann mit dem enthaltenen MSI-Installationsprogramm auf Ihrem Windows-Computer installiert werden.
  • Cloud Shell oder Ihren eigenen Linux-Computer, um eine Anfrage zur Signatur des Zertifikats oder ein Zertifikat zu generieren. Auf diesem Computer die unter OpenSSL-Einrichtung dokumentierte Konfiguration abschließen, die PKCS#11-Bibliothek herunterladen und konfigurieren.

Führen Sie gcloud auth application-default login aus, falls Sie das noch nicht getan haben.

Falls noch nicht geschehen, laden Sie das neueste Windows SDK auf Ihrem Gerät herunter. Windows-Computer mit SignTool

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 Google 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 mit Ihrem Cloud KMS-Schlüssel verknüpfte HSM-Attestierung herunter: führen Sie die folgenden Schritte aus:

  1. Rufen Sie in der Google Cloud Console die Seite Key Management auf.

    Key Management aufrufen

  2. Wählen Sie den Schlüsselbund mit dem Schlüssel aus, den Sie attestieren möchten. Wählen Sie dann den Schlüssel aus.

  3. Klicken Sie auf Mehr . für die Schlüsselversion, die Sie attestieren möchten, und klicken Sie dann auf Attestierung überprüfen.

  4. Klicken Sie im Dialogfeld Attestierung 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, 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 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 SignTool, um deine Artefakte zu signieren.

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 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 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 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 Anfrage zur Zertifikatssignierung.

Achten Sie darauf, die richtigen -sigopt-Optionen für den Schlüsseltyp zu verwenden, den Sie verwenden. verwenden.

Sie können mit OpenSSL keine Objekt-ID verwenden, die länger als 100 Zeichen ist. Short verwenden 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 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 SignTool 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.

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 zu signtool.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 Zertifikat ca.cert
  • PATH_TO_ARTIFACT_TO_SIGN: der Pfad zum Artefakt, das Sie signieren möchten.

Ausführliche Erläuterung der einzelnen Befehlsoptionen und unterstützten Artefaktdateien finden Sie in der offiziellen SignTool-Dokumentation.