Codesignierung (Code Signing) mit Azure Key Vault

Das Code Signing-Zertifikat für die Code-Signierung muss sicher gespeichert werden. Dazu können Sie auch einfach das HSM in der Cloud - Azure Key Vault - verwenden. Unser Leitfaden hilft Ihnen bei der Einrichtung des Azure Key Vault und bei der Einstellung, aber Sie finden dort auch das Kommando zum Signieren, das Sie mit Azure-Daten erstellen müssen. Er hilft Ihnen also bei allem.

Code Signing-Zertifikat muss sicher aufbewahrt werden

Code Signing-Zertifikate werden nur für sichere Geräte ausgestellt - sie müssen sich auf dem HSM befinden. Dies kann in zwei Formen geschehen - entweder mit traditioneller Hardware, die teuer in der Anschaffung ist, oder Cloud-basiert, die dieselbe Aufgabe erfüllt. Azure Key Vault, das wir heute verwenden werden, ist FIPS 140-2 Level 2 und 3 konform, so dass es zur Speicherung von Code-Singing-Zertifikaten verwendet werden kann. Weitere Informationen über den Dienst finden Sie auf der Seite des Azure Key Vault.

Einrichten und Konfigurieren von Azure Key Vault

Natürlich gibt es auch eine Alternative zu KeyLocker. Viele Kunden nutzen Azure-Cloud-Dienste, die eine sichere Schlüsselspeicherung (HSM) ermöglichen. Mit Azure Key Vault können Sie Ihr Code Signing-Zertifikat in der Cloud speichern und müssen sich um nichts weiter kümmern.

Um mit einem Zertifikat in Azure zu signieren, müssen Sie Folgendes tun:

  1. Das Zertifikat in den Azure Key Vault holen (den CSR erstellen, dann die Antwort importieren).
  2. Eine Anwendung erstellen, die Sie zum Signieren aufrufen wollen.
  3. Die Anwendung zu Access policies Ihres Key Vault hinzufügen.
  4. Die Support-Software auf Ihrem Rechner installieren.

Gehen wir also die Schritte Schritt für Schritt durch. Hier sind sie für fortgeschrittene Benutzer vereinfacht, wenn Sie detaillierte Anweisungen benötigen, verwenden Sie diese Anleitung auf GitHub. Sie können den Teil über den Kauf und die Verifizierung eines Zertifikats ignorieren, da dies über uns erfolgt.

Erwerb des Code Signing-Zertifikats und Einrichten in Azure

Ein Code Signing- Zertifikat zu erhalten ist einfach. Bei SSLmarket können Sie ein Code Signing-Zertifikat mit Speicherung auf dem HSM erwerben. Dann erstellen Sie einen CSR in Azure und senden diese an uns. Sobald das Zertifikat ausgestellt ist, senden wir Ihnen den signierten öffentlichen Schlüssel (=Zertifikat) und Sie importieren diese Antwort in Azure.

Gehen Sie in Azure Key Vault über das linke Menü zu Certificates und klicken Sie auf Create a certificate. Wählen Sie im allgemeinen Formular den Zertifikatsnamen, dann Common name (Achtung, er wird als Name des Unterzeichners angezeigt), und wählen Sie Certificate issued by non-integrated CA als CA-Typ. Wählen Sie PEM als Format.

CSR in Azure Erstellen
CSR in Azure Erstellen

Sie müssen die Advanced Policy Configuration manuell konfigurieren. Klicken Sie daher auf Not configured und stellen Sie Folgendes ein:

  • Extended Key Usages (EKU) auf 1.3.6.1.5.5.7.3.3
  • Key Size für RSA mindestens 3072b, für EC mindestens P-256
  • Privater Schlüssel als Not expordable, wenn es sich um ein CS EV-Zertifikat handeln soll
Advanced policy configuration
Advanced policy configuration

In der Kategorie In progress, failed or cancelled sehen Sie das neue Zertifikat. Gehen Sie zu den Details und klicken Sie auf Certificate Operation, woraufhin sich ein weiteres Detail öffnet, in dem Sie den CSR herunterladen können. Das ausgestellte Zertifikat wird dann an der gleichen Stelle übe Merge Signed Request importiert.

CSR im Certificate Operation herunterladen
CSR im Certificate Operation herunterladen

Sie verwenden das heruntergeladene Zertifikat, um ein Zertifikat bei SSLmarket zu bestellen. Sie können es für OV und EV Code Signing verwenden, das auf dem HSM gespeichert ist.

Eine Anwendung erstellen

Neben der Erstellung eines Schlüsseltresors in der Ressourcengruppe (Key Vaultu in Resource Group) und der Speicherung des Zertifikats müssen Sie eine Anwendung in Microsoft Entra ID (ehemals Azure Active Directory) und ihr Geheimnis erstellen; beide werden für die Authentifizierung und den Zugriff auf den Tresor verwendet.

Gehen Sie zur Microsoft Entra ID-Übersicht und wählen Sie im linken Menü App registrations- Geben Sie dann eine neue Anwendungsregistrierung ein, benennen Sie sie und wählen Sie die Zugriffsoption Accounts in this organizational directory only (Default Directory only - Single tenant). Sobald die Anwendung erstellt ist, sehen Sie die Application ID, die für das Signieren als "Client-ID" benötigt wird.

Gehen Sie in den Anwendungsdetails im linken Menü auf die Agenda Certificates & secrets. Hier erstellen Sie ein neues Client secret und benennen es. Kopieren Sie das Secret Value und speichern Sie es, denn Sie werden es nicht wieder sehen.

Access policies Einstellung

Jetzt müssen wir zum KeyVault zurückkehren.

Wechseln Sie zunächst das Rechtemodell von Azure role-based access (RBAC) zu Vault access policy.

Azure Permission model
Azure Permission model

Wählen Sie im linken Menü Access Policies und klicken Sie auf Create. Erstellen Sie eine Access policy, die auf die von Ihnen erstellte Anwendung angewendet werden soll. Es sind mindestens die folgenden Berechtigungen erforderlich:

  • Key permissions - Verify, Sign, Get, List
  • Secret permissions - Get, List
  • Certificate permissions - Get, List

Wählen Sie die Anwendung im zweiten Schritt aus und suchen Sie sie anhand ihres Namens.

Azure - Create Acess Policy
Azure - Create Acess Policy

Das ist alles, was Sie in der Azure-Schnittstelle einrichten müssen.

Installation von Support-Software

Installieren Sie Folgendes auf Ihrem Computer:

  • .net SDK 6.0.200, Windows x64; download
  • .net ASP.NET Core Runtime 6.0.2, Windows x64; download
  • Azure SignTool, installieren Sie mit cmd: dotnet tool install --global AzureSignTool

Herzlichen Glückwunsch, Sie können nun Azure SignTool verwenden, um Code mit einem Zertifikat zu signieren, das im Key Vault gespeichert ist.

Zertifikatssignierung in Azure Key Vault

Jetzt, wo alles zur Unterschrift bereit ist, ist es am wichtigsten, dass wir alle Informationen haben, die wir für den Unterzeichnungsauftrag benötigen. Das sieht dann so aus: azuresigntool sign -kvt KEY-VAULT-DIRECTORY-ID -kvu KEY-VAULT-URI -kvi APPLICATION-CLIENT-ID -kvc CERTIFICATE-NAME -kvs CLIENT-SECRET -tr http://timestamp.digicert.com -v PATH-TO-EXECUTABLE

Was ist was:

  • Kvt ist directory id Ihres Azure Key Vault
  • kvu ist URL des Azure Key Vaultu. Sie finden ihn auf der Hauptseite als DNS Name.
  • kvi ist application id Azure app, die Sie registriert haben.
  • kvc ist friendly name des Zertifikats, das Sie verwenden möchten. Sie haben diese Bezeichnung selbst gewählt.
  • kvs ist client secret, das Sie für die Anwendung erzeugt haben.
  • tr ist URL timestamp des Servers. Achten Sie darauf, einen Zeitstempel zu verwenden, um sicherzustellen, dass die Signatur auch nach Ablauf des Zertifikats vertrauenswürdig ist.
  • v gibt den Speicherort der zu unterzeichnenden Datei an.

Alle oben genannten Angaben sind in der Azure-Schnittstelle zu finden.