Seit dem 1. Februar 2017 kann das EV Code Signing als Mindestanforderung für Code Signing angesehen werden. Die Zertifikate werden auf USB-Token installiert und erfordern zum Betrieb Treiber. Mit dem Tool „Signtool.exe“ aus dem Microsoft Windows SDK ist es in der Regel kein Problem, Binärdateien interaktiv zu signieren. Der manuelle Eingriff erfolgt, wenn Signtool versucht, auf das Zertifikat auf dem USB-Token zuzugreifen, und der Sicherheitstreiber ein Popup-Dialogfeld öffnet, um das Token-Passwort einzugeben.

In einer Continuous Integration/Continuous Delivery (CI/CD)-Build-Umgebung werden die meisten Aufgaben zum Erstellen einer software Produkte werden automatisiert und von unbeaufsichtigten Build-Agenten ausgeführt. Das heißt, es ist niemand interaktiv beim Agenten angemeldet. Solche Agenten sind oft virtuelle Maschinen ohne physischen Monitor oder Tastatur. Wenn EV Code Signing erforderlich ist, wird der Build-Prozess unterbrochen oder gestoppt, da kein Benutzer das Popup-Dialogfeld sieht.

Die Frage "Automatisierte Code-Signierung mit Extended Validation (EV)” auf stackoverflow.com bietet viele Lösungen, die wir uns jetzt ansehen werden:

1) Verwenden Sie die Treiberoption „Einzelanmeldung aktivieren“.
Dies ist die bevorzugte Antwort der Zertifizierungsstellen. Dies erfordert weiterhin, dass sich ein Benutzer beim Build-Agent anmeldet, das Kennwort einmal eingibt und dann die Benutzersitzung sperrt. Wenn sich der Benutzer nach einmaliger Eingabe des Passworts abmeldet, wird die Benutzersitzung geschlossen und der Treiber verwirft das Passwort. Das bedeutet, dass sich nach jedem Neustart des Betriebssystems jemand beim Agenten anmelden muss, bevor Build-Prozesse erfolgreich ausgeführt werden können. Dies ist eine potenzielle Quelle für lästige Fehler.

2) Verwenden Sie ein Tool/Skript, das den Popup-Dialog erkennt und das Passwort automatisch eingibt.
Dies erfordert auch, dass ein Benutzer beim Build-Agent angemeldet ist. Andernfalls gibt es keinen GUI-Kontext zum Anzeigen des Dialogs und das Tool kann ihn nicht erkennen. Dies bedeutet auch, dass eine manuelle Vorbereitung nach einem Neustart des Build-Agenten erforderlich ist.


3) Ersetzen Sie „Signtool.exe“ durch ein Programm, das eine Datei signieren und den USB-Token ohne manuellen Eingriff entsperren kann.
Die Antwort von „Draketb“ auf stackoverflow.com bietet den Quellcode zum Erstellen von „etokensign.exe“, der ähnliche Informationen wie „Signtool.exe“ und das Passwort zum Entsperren des Tokens benötigt. Es benötigt auch den Containernamen des Zertifikats. Dies ist eine hexadezimale Zeichenfolge, die manuell aus dem USB-Token extrahiert werden muss.

Der letzte Vorschlag ist der einzige, der keine Benutzeranmeldung beim Build-Agenten benötigt. Diese Lösung läuft völlig unbeaufsichtigt. Trotzdem bindet die Notwendigkeit des Containernamens die Buildpipeline an das USB-Token. Natürlich können Sie eine einfache Skriptdatei auf dem Build-Agent verwenden, um diese Abhängigkeit aufzuheben. Sie benötigen dann für jeden Token ein individuelles Skript. Alle Skripts müssen denselben Namen haben, da die Buildpipeline nicht unterscheiden muss, auf welchem ​​Build-Agent sie ausgeführt wird. Das macht die Lösungen etwas unpraktisch – oder besser komplexer als gedacht.


Das war der Grund, warum ich mich entschieden habe, den Quellcode ein wenig zu modifizieren. Die Herausforderung bestand darin, das Zertifikat anhand seines Namens zu identifizieren, wie es bei „Signtool.exe“ mit dem Parameter „/n“ der Fall ist.

Klicken Sie auf den folgenden Link für den Quellcode für „eTokenSign2“, der einige kleine Änderungen am Quellcode von „draketb“ enthält:

Die Befehlszeilensyntax von eTokenSign2.exe ist
etokensign.exe

Sie können den Quellcode unverändert verwenden. Um Ihre eigene Binärdatei zu erstellen, folgen Sie einfach den Erstellungsschritten am Ende des blog Eintrag.

In unserer Produktionsumgebung ist die Binärdatei mit einer Skriptdatei verpackt. Somit kennen nur unsere IT-Administratoren die Token-Passwörter.
Das erfolgreiche Signieren kann in den Eigenschaften der signierten Dateien überprüft werden.

Ich hoffe, diese ausführbare Datei hilft Ihnen, Ihre Build-Prozesse ohne manuelle Eingriffe zum Laufen zu bringen 🙂

Um die Binärdatei zu erstellen, führen Sie diese Schritte aus:

1- Laden Sie die ZIP-Datei unten herunter und entpacken Sie sie.
2- Visual Studio installieren Community 2017 oder die Visual Studio 2017-Buildtools
3- Öffnen Sie eine "Entwickler-Eingabeaufforderung"
4- Führen Sie „msbuild.exe eTokenSign2.vcxproj /p:Configuration=“ ausRelease” /p:Plattform=x86″

Haftungsausschluss
SOFTWARE WIRD „WIE BESEHEN“, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG BEREITGESTELLT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GARANTIEN DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNGSVERLETZUNG. IN NEIN EVENT HAFTEN DIE AUTOREN ODER URHEBERRECHTSINHABER FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, OB IN VERTRAGLICHEM, SCHLECHTER ODER AUF ANDERE WEISE, DIE AUS, AUS ODER IN ZUSAMMENHANG MIT DEN SOFTWARE ODER DIE NUTZUNG ODER ANDERE HANDELN IN DER SOFTWARE.

Copyright (c) 2018 panagenda

Sofern nicht anders angegeben, ist dieses Werk lizenziert unter https://creativecommons.org/licenses/by-sa/4.0/.
Es ist ein abgeleitetes Werk, das auf dem Code von „draketb“ at . basiert https://stackoverflow.com/a/47894907.