Jenkins ist ein Open-Source-Automatisierungstool, das häufig für die kontinuierliche Integration und Bereitstellung (CI/CD) von Softwareanwendungen eingesetzt wird. Jenkins bietet eine webbasierte Benutzeroberfläche, die die Konfiguration und Verwaltung von Jobs vereinfacht. Dabei handelt es sich um automatisierte Aufgaben, die so geplant werden können, dass sie zu bestimmten Zeiten ausgeführt oder durch bestimmte Ereignisse ausgelöst werden. Mit diesen Jobs können Sie Code kompilieren, Tests ausführen, Anwendungen bereitstellen und viele weitere Aufgaben der Softwareentwicklung erledigen.
Zu den wichtigsten Funktionen von Jenkins gehören:
-
Einfache Installation und Einrichtung
Jenkins lässt sich einfach installieren und konfigurieren und kann auf einer Vielzahl von Betriebssystemen und Plattformen eingerichtet werden.
-
Leistungsstarkes Jobmanagement
Mit Jenkins können Sie Jobs erstellen und verwalten. Dabei handelt es sich um automatisierte Aufgaben, die zu bestimmten Zeiten oder durch bestimmte Ereignisse ausgeführt werden können. Mit Jobs können Sie Code kompilieren, Tests ausführen, Anwendungen bereitstellen und viele weitere Aufgaben der Softwareentwicklung ausführen.
-
Große Auswahl an Plugins und Integrationen
Jenkins verfügt über eine große Anzahl an Plugins und Integrationen, die die Zusammenarbeit mit vielen verschiedenen Tools und Technologien ermöglichen. Dies macht es hochgradig anpassbar und flexibel.
-
Unterstützung für Pipelines
Jenkins bietet umfassende Unterstützung für Pipelines, die einen Softwareentwicklungs-Workflow definieren. Pipelines können mithilfe von Code definiert werden, wodurch sie hochgradig anpassbar und leicht versionierbar sind.
-
Integrierte Testunterstützung
Jenkins bietet integrierte Unterstützung für viele verschiedene Testarten, darunter Unit-Tests, Integrationstests und Funktionstests. Dies erleichtert die Durchführung von Tests im Rahmen eines kontinuierlichen Integrationsworkflows und stellt sicher, dass alle Codeänderungen vor der Bereitstellung in der Produktion gründlich getestet werden.
-
Skalierbarkeit
Jenkins lässt sich problemlos skalieren, um große Entwicklungsteams und komplexe Softwareentwicklungs-Workflows zu unterstützen.
-
Open-Source
Jenkins ist Open-Source-Software, d. h. die Nutzung ist kostenlos und kann an die spezifischen Anforderungen Ihres Entwicklungsteams angepasst werden.
Codesigning mit Jenkins
Um Codesigning mit Jenkins durchzuführen, führen Sie die folgenden Schritte aus.
Die Codesignierung ist ein Verfahren, das die Legitimität des Autors sowie die Originalität und Authentizität digitaler Informationen, insbesondere von Softwarecode, überprüft. Sie stellt außerdem sicher, dass es sich nicht um Schadcode handelt. Darüber hinaus garantiert sie, dass diese Informationen nach der digitalen Signatur nicht verändert, verfälscht oder gelöscht wurden.
Die Integration von Jenkins mit Codesignierung erfolgt kurzgefasst: Installieren Sie SignTool und den KSP-Client auf dem Jenkins-Agenten. Weisen Sie dem Jenkins-Dienstkonto nur die spezifischen, eingeschränkten Berechtigungen zu, die KSP benötigt (keine lokalen Administratorrechte). Fügen Sie anschließend eine Pipeline-Stufe hinzu, die SignTool für das bei KSP registrierte Zertifikat aufruft. Der private Schlüssel verbleibt dabei stets im HSM; die Pipeline greift niemals direkt darauf zu.
Wichtige Erkenntnisse
- Das Jenkins-Dienstkonto benötigt zum Signieren niemals vollständige lokale Administratorrechte. Falls ein Berechtigungsfehler auftritt, erteilen Sie dem KSP oder dem Signaturtool die benötigten Zugriffsrechte und verwenden Sie nicht standardmäßig Administratorrechte, um den Fehler zu beheben.
- Diese Seite behandelt Jenkins speziell als Plattform-Tutorial. Die umfassendere Referenzarchitektur, Genehmigungsprozesse und das Modell für Prüfnachweise finden Sie hier: Best Practices für die Codesignierung im Softwareentwicklungszyklus.
Voraussetzungen für die Durchführung dieser Aufgabe sind:
- Jenkins-Setup und -Konfiguration auf Ihrem Gerät
- Signtool installiert und konfiguriert
- ECSigning KSP installiert und konfiguriert.
Um Jenkins einzurichten und zu konfigurieren, folgen Sie dem Link.
Führen Sie zum Einrichten und Konfigurieren von Signtool die folgenden Schritte aus:
Signtool kann als Teil des Windows SDK heruntergeladen werden. Windows SDK herunterladen: ( developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/ )
Sie können auswählen, nur die Windows SDK-Signaturtools für Desktop-Apps zu installieren.
Öffnen Sie die Datei winsdksetup.exe. Merken Sie sich den im Installationspfad angezeigten Standardpfad, da dieser beim Ausführen dieser Befehle über die Eingabeaufforderung hilfreich ist.

Auf der Datenschutzseite von Windows Kits können Sie Microsoft mit beiden Optionen das Sammeln von Erkenntnissen gestatten. Klicken Sie auf „Weiter“.

Akzeptieren Sie die Lizenzvereinbarung

Deaktivieren Sie alle Funktionen außer „Windows SDK Signing Tools for Desktop Apps“ und wählen Sie dann „Installieren“.

Wenn Sie gefragt werden, ob Sie dieser App Änderungen erlauben möchten, wählen Sie „Ja“.


Klicken Sie auf die Windows-Suchleiste in der Taskleiste, geben Sie „Systemumgebungsvariablen bearbeiten“ ein und wählen Sie die gleichnamige Option in der Systemsteuerung aus.

Klicken Sie auf Umgebungsvariablen.

Bevor Sie die Variablenliste bearbeiten, navigieren Sie im Datei-Explorer zum Installationsverzeichnis des Windows SDK. Kopieren Sie den Pfad des Ordners, der die Anwendung „signtool“ enthält. Der Standardpfad lautet C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64 ( siehe Screenshot unten). Klicken Sie mit der rechten Maustaste und kopieren Sie den Pfad wie abgebildet. Die Anwendung „signtool“ finden Sie auch am Ende der Dateiliste. Dies ist der Befehl, den Sie ausführen müssen.

Klicken Sie in der Liste „Systemvariablen“ auf „Neu“. Geben Sie dann „Path“ als Variablennamen ein und kopieren Sie den zuvor genannten Pfad. Klicken Sie anschließend im Fenster „Umgebungsvariablen “ und im Fenster „Systemeigenschaften “ auf „OK“.

Um die Installation zu testen, öffnen Sie die Eingabeaufforderung und geben Sie „signtool“ ein. Die Ausgabe sollte wie unten gezeigt aussehen.

Der Standardinstallationsort für signtool ist beispielsweise: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64
Um KSP einzurichten, führen Sie die folgenden Schritte aus:
Encryption Consulting bietet Ihnen mit CodeSignSecure eine Lösung, die Ihnen manipulationssichere Speicherung Ihrer Schlüssel sowie vollständige Transparenz und Kontrolle über Ihre Codesignierungsaktivitäten ermöglicht. Die privaten Schlüssel des Codesignierungszertifikats können in einem HSM gespeichert werden, um die Risiken gestohlener, beschädigter oder missbrauchter Schlüssel zu eliminieren.
Wenn Sie unsere Lösung verwenden, können Sie das KSP mit den folgenden Schritten herunterladen:
- Anmelden bei Code Sign Secure.
-
Navigieren Sie zu: Repository für Signaturtools.

- Download „Verschlüsselungsberatung CNG-SigningKSP“
-
Installieren Sie die Client-Tools mit dem MSI-Installationsprogramm. Das MSI-Installationsprogramm automatisiert einen Großteil der Konfiguration. Navigieren Sie zum Speicherort der heruntergeladenen Datei und starten Sie das Installationsprogramm.

-
Klicken Sie auf „Weiter“, wenn der Installationsassistent angezeigt wird.

-
Weiter klicken.

- Im Benutzername Geben Sie im Feld „admin“ ein.
-
Kopieren Sie im Feld „Code“ den Code aus dem Postman API-Repository . Klicken Sie auf die GetLoginToken- API und kopieren Sie den Code aus dem Body.
Laden Sie PostMan über diesen Link herunter . Klicken Sie nach dem Download unten im Fenster auf „Überspringen“. Fügen Sie anschließend im Dashboard eine neue Sammlung hinzu, indem Sie auf das Pluszeichen neben „Sammlungen“ klicken.
GetLoginToken-API (http://codesignsecureapi.encryptionconsulting.com/api/auth/GetLoginToken): Dies ist die wichtigste API, da sie Ihnen ein Bearer-Token für die Verwendung mit den übrigen APIs liefert. Der Inhalt des Anfragetextes ist unten aufgeführt. Der Code dient als Passwort für den Abruf des Bearer-Tokens. Das Feld „user“ enthält den Benutzernamen und das Feld „identity type“ den Benutzertyp. Klicken Sie auf „Senden“ , um eine Ausgabe zu generieren, die das Bearer-Token am Ende enthält. Kopieren Sie dieses Token zur Verwendung.

- Ändern Sie die Identitätsschutz Typ um 1.
- Verlassen API BaseURL das Gleiche.
-
Weiter klicken.

-
Weiter klicken.

-
Sie werden dann benachrichtigt, dass dieses Programm Änderungen an Ihrem PC vornimmt. Klicken Sie auf „Ja“.

-
Die Installation ist nun abgeschlossen.

Sobald Jenkins eingerichtet ist, benötigt das zugehörige Dienstkonto die Berechtigung, signtool aufzurufen und den KSP zu erreichen. Hierfür sind keine vollständigen lokalen Administratorrechte erforderlich. Jenkins als Administrator auszuführen, um ein Problem mit den Signaturberechtigungen zu beheben, stellt einen Verstoß gegen das Prinzip der minimalen Berechtigungen dar und sollte vermieden werden. Die tatsächliche Anforderung ist weniger komplex: Das Jenkins-Dienstkonto benötigt Lesezugriff auf den im Pipeline-Prozess referenzierten Zertifikatsdateipfad sowie die spezifischen Berechtigungen, die der KSP-Client zur Authentifizierung beim Signaturdienst benötigt (in der Regel eine registrierte Clientidentität, kein lokaler Administrator). Gewähren Sie diesen Zugriff über ein dediziertes Dienstkonto mit geringen Berechtigungen, anstatt standardmäßig Administratorrechte zu verwenden. Konsultieren Sie die Dokumentation Ihres KSP, um die genauen Berechtigungen zu ermitteln, die benötigt werden, anstatt weitreichende Rechte zu gewähren, um einen unklaren Fehler zu umgehen.
- Gehen Sie zu den Diensten in Ihrem System (Sie können danach suchen), um zu überprüfen, unter welchem ​​Konto Jenkins aktuell ausgeführt wird. Dies wird in der Spalte „Anmelden als“ angezeigt.
- Falls Jenkins aufgrund eines Berechtigungsfehlers nicht auf signtool oder den KSP zugreifen kann, besteht die Lösung darin, dem betreffenden Dienstkonto die fehlende Berechtigung (Dateizugriff auf den Zertifikatspfad oder KSP-Clientregistrierung) zu erteilen, anstatt das Konto zum Administrator zu machen. Doppelklicken Sie in den Diensten auf Jenkins oder klicken Sie mit der rechten Maustaste und wählen Sie „Eigenschaften“ und anschließend „Anmelden“, um die Kontoberechtigungen anzuzeigen und anzupassen.
Sobald wir das eingerichtet haben, gehen wir zu Jenkins. Die URL bzw. der Hostname, den Sie zuvor bei der Einrichtung angegeben haben, führt Sie über Ihren Browser zu Jenkins. In meinem System ist die Adresse http://localhost:8080/ (Standardeinstellung).
Führen Sie in Ihrem Dashboard die folgenden Schritte aus:
-
Klicken Sie im Dashboard auf „Neues Element“.

-
Geben Sie einen beliebigen Artikelnamen ein, klicken Sie auf „Pipeline“ und dann auf „OK“.

-
Geben Sie auf der Konfigurationsseite unter „Allgemein“ eine Beschreibung nach Ihren Wünschen ein.

-
Scrollen Sie nach unten, um Pipeline zu finden.

-
Schreiben Sie das Skript in das Skriptfeld und klicken Sie auf Speichern. Sie müssen Ihre Umgebungsvariable entsprechend Ihrem Setup bearbeiten
Pipeline { Agent, beliebige Umgebung { SM_KEY_NAME='evcodesigning' SM_CLIENT_CERT_FILE='C:\\Benutzer\\Administrator\\Desktop\\FürTesting\\evcodesigning.pem' SM_HASHING_ALGORITHM='SHA256' SM_TIME_STAMP_SERVER="http://timestamp.digicert.com" SM_FILEPATH="C:\\Benutzer\\Administrator\\Desktop\\FürTesting\\AgentService.exe" } Stufen { Stufe('Code Signing') { Schritte { dir('C:\\Benutzer\\Administrator\\Desktop\\FürTesting'){ bat 'signtool sign /csp "Anbieter von Verschlüsselungsberatungsschlüsselspeicher" /kc %SM_KEY_NAME% /fd %SM_HASHING_ALGORITHM% /f %SM_CLIENT_CERT_FILE% /tr %SM_TIME_STAMP_SERVER% /td SHA256 %SM_FILEPATH%' } } } } } -
Klicken Sie auf „Jetzt erstellen“ und auf dem Bildschirm wird eine Build-Nummer angezeigt.

-
Wenn Sie auf die Build-Nummer klicken und zur Konsolenausgabe gehen, sehen Sie, dass Ihre Datei signiert wurde.

Verifizierung und Fehlerbehandlung
Betrachten Sie die Meldung „Pipeline-Phase abgeschlossen“ nicht als Beweis für die Gültigkeit der Signatur. Fügen Sie unmittelbar nach der Signierung eine Verifizierungsphase hinzu, die ausgeführt wird. signtool verify /pa Die Überprüfung der signierten Datei schlägt fehl, falls die Verifizierung nicht erfolgreich ist. Dadurch wird ein stiller Signaturfehler erkannt, bevor das Artefakt weiter in der Pipeline verarbeitet wird. Meldet die Pipeline einen Signaturfehler, prüfen Sie die untenstehende Tabelle, bevor Sie davon ausgehen, dass das Zertifikat ungültig ist.
| Fehler | Wahrscheinliche Ursache | Fixieren |
|---|---|---|
| Es wurden keine Zertifikate gefunden, die alle angegebenen Kriterien erfüllten | Der KSP-Containername (SM_KEY_NAME) stimmt nicht mit einem registrierten Schlüssel überein, oder der KSP-Client ist nicht authentifiziert. | Bestätigen Sie den genauen Containernamen und überprüfen Sie den Authentifizierungsstatus des KSP unabhängig von der Pipeline erneut. |
| Zugriff verweigert | Dem Jenkins-Dienstkonto fehlen die spezifischen Berechtigungen, die der KSP benötigt (dies ist kein Grund, die Administratorberechtigung zu erteilen). | Erteilen Sie die in der KSP-Dokumentation für die Clientauthentifizierung angegebene eingeschränkte Berechtigung. |
| Der angegebene Zeitstempelserver war entweder nicht erreichbar oder hat eine ungültige Antwort zurückgegeben. | Netzwerk-/Firewall-Blockierung der TSA-URL oder vorübergehender TSA-Ausfall | Prüfen Sie den ausgehenden Zugriff auf die Zeitstempel-URL; versuchen Sie es erneut, da TSA-Ausfälle in der Regel nur vorübergehend sind. |
Sollte sich im Nachhinein herausstellen, dass ein Build falsch signiert wurde (falsches Zertifikat, falsche Datei), versuchen Sie nicht, die Signatur direkt zu „korrigieren“. Verwerfen Sie stattdessen das Artefakt und führen Sie die Pipeline ab der Signierungsphase mit einer korrigierten Konfiguration erneut aus. So entsteht ein lückenloser Prüfpfad, der belegt, dass das ursprüngliche fehlerhafte Artefakt nie veröffentlicht, sondern lediglich stillschweigend verändert wurde.
Häufig gestellte Fragen
Benötigt das Jenkins-Dienstkonto Administratorrechte, um signtool auszuführen?
Nein. Es benötigt lediglich die spezifische Berechtigung, die der KSP für die Authentifizierung und den Dateizugriff auf den im Pipeline-Prozess referenzierten Zertifikatspfad benötigt, nicht aber vollständige lokale Administratorrechte. Einen Berechtigungsfehler als Grund für die Gewährung von Administratorrechten zu behandeln, ist ein häufiger, aber vermeidbarer Verstoß gegen das Prinzip der minimalen Rechtevergabe.
Wie kann ich sicher sein, dass die Pipeline tatsächlich eine gültige Signatur erzeugt hat und nicht nur, dass in der jeweiligen Phase kein Fehler aufgetreten ist?
Fügen Sie eine Verifizierungsphase hinzu, die ausgeführt wird signtool verify /pa gegen die signierte Datei und schlägt bei jedem anderen Ergebnis als Erfolg fehl, anstatt davon auszugehen, dass eine abgeschlossene Signierungsphase eine gültige Signatur bedeutet.
Wird der private Schlüssel jemals über den Jenkins-Agenten geleitet?
Nein, in einer korrekt konfigurierten Umgebung. Der Agent sendet eine Signieranforderung über den KSP an den HSM-gestützten Signierdienst; die Operation mit dem privaten Schlüssel findet innerhalb des HSM statt.
