Automatisieren Extended Validation (EV) code signing
Wir haben vor kurzem gekauft ein DigiCert EV code signing-Zertifikat. Wir sind in der Lage, zu Unterschreiben .exe-Dateien mit signtool.exe. Jedoch, jedes mal, wenn wir eine Datei signieren, fordert er für die SafeNet-eToken-Passwort.
Wie können wir diesen Prozess automatisieren, ohne eingreifen des Benutzers, durch die Speicherung/Zwischenspeicherung der Passwort irgendwo?
- Die Frage "Wie sicher sind Passwort-Eingabeaufforderungen des SafeNet eToken 5110 oder ähnlichen kryptografischen hardware-Token?" ist etwas im Zusammenhang, wenn es überhaupt eine Antwort bekommt, sollte es von Interesse sein diese Beurteilung der Frage, ob die Automatisierung des Passwort-Eintrags. Als ich dabei bin, wenn jemand, der besitzt derzeit, dass die oder eine ähnliche token, der dies liest, wenn Sie können, versuchen zu "hacken" es und die Frage beantworten es würde sehr geschätzt 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Möglichkeit zur Umgehung der login-dialog AFAIK, aber das, was Sie tun können, ist, konfigurieren Sie das SafeNet Authentication Client, so dass es nur von ihm verlangt, einmal pro login-Sitzung.
Ich zitiere die SAC-doc (gefunden einmal installiert
\ProgramFiles\SafeNet\Authentication\SAC\SACHelp.chm
Kapitel 'Client Settings
', 'Enabling Client Logon
') hier:Um diese Funktion zu aktivieren, welche standardmäßig deaktiviert ist, gehen Sie zu SAC erweiterte Einstellungen, und überprüfen Sie die "enable single-Anmeldung" - box:
Ihren computer neu starten, und es sollte jetzt nur Eingabeaufforderung für das token-Passwort ein. In unserem Fall haben wir mehr als 200 Binärdateien Zeichen pro jeder bauen, so ist dies eine totale muss.
Ansonsten, hier ist ein kleines C# - Konsole-Beispiel-code (entspricht m1st0), dass ermöglicht es Ihnen, reagieren Sie automatisch zur Anmelde-Dialog (benötigt wahrscheinlich als admin ausführen):
Erweiterung auf diese Antwort, diese kann automatisiert werden mit CryptAcquireContext und CryptSetProvParam die PIN des token eingeben programmgesteuert und CryptUIWizDigitalSign zum ausführen der Unterzeichnung programmgesteuert. Ich erstellte eine Konsole app (code unten), verwendet als Eingabe das Zertifikat Datei (exportieren durch Rechtsklick auf das Zertifikat in SafeNet Authentication Client und wählen Sie "Export..."), den Namen des privaten schlüsselcontainers (gefunden in SafeNet Authentication Client), den token-PIN, Zeitstempel, URL und den Pfad der Datei zu signieren. Diese Konsole app funktionierte beim Aufruf durch den TeamCity build agent, wo der USB-token angeschlossen war.
Beispiel:
etokensign.exe c:\CodeSigning.cert CONTAINER PIN http://timestamp.digicert.com C:\program.exe
Code:
Exportieren Sie das Zertifikat in eine Datei:
Privaten Schlüssel, Container Mit Dem Namen:
Erweiterung auf die Antworten bereits in diesem thread, ist es möglich, das token-Passwort mit dem standard-Programm signtool von microsoft.
1. Exportieren Ihr öffentliches Zertifikat in eine Datei, aus der SafeNet Client
2. Finden Sie Ihren privaten Schlüssel, container mit dem Namen
3. Finden Sie Ihren reader name
4. Formatieren Sie alle zusammen
Die CSP eToken versteckt hat (oder zumindest nicht stark beworbenen) Funktionen zum analysieren der token-Passwort der name des Containers.
Format ist eines der folgenden
Wo:
reader
ist die "Leser-Namen" aus den SafeNet-Client-UI -password
ist Ihr token-Passwortname
ist die "Container-name" aus den SafeNet-Client-UI -Vermutlich müssen Sie die reader-Namen, wenn Sie mehr als ein Kartenleser angeschlossen - da ich nur einen reader kann ich nicht bestätigen.
5. Übergeben Sie die Informationen zu signtool
/f certfile.cer
/csp "eToken Base Cryptographic Provider"
/k "<value from step 4>"
Beispiel signtool-Befehl wie folgt
Einige Bilder aus dieser Antwort: https://stackoverflow.com/a/47894907/5420193
Bin ich beta-tool, das Ihnen helfen wird, automatisieren von build-Prozess.
Es ist Client-Server-Anwendung windows-Anwendung. Sie können starten Sie den server auf dem computer, auf dem EV-token eingefügt. Geben Sie das Kennwort für token auf server-Seite Anwendung starten. Danach können Sie signieren von Dateien aus der Ferne.
Client-seitige Anwendung vollständig ersetzt signtool.exe so können Sie vorhandene Skripts erstellen.
Source code befindet sich hier: https://github.com/SirAlex/RemoteSignTool
Edit: Wir haben erfolgreich dieses tool zum signieren von code im letzten halben Jahr, 24x7, auf unserem server zu Bauen. Alles Prima funktioniert.
Eigentlich unter Windows können Sie die token-Kennwort vollständig programmgesteuert. Diese kann getan werden, indem wir einen Kontext (CryptAcquireContext) mit Flagge CRYPT_SILENT mit token-Namen in der form "\\.\AKS ifdh 0" oder token-container-Namen, die guid sichtbar im Zertifikat Eigenschaften in der Authentifizierungs-Client-Anwendung. Sie müssen dann die Verwendung CryptSetProvParam mit parameter PP_SIGNATURE_PIN so geben Sie Ihr token-Passwort. Nach der Verarbeitung zu verwenden Zertifikate, token, um Dateien zu Unterschreiben.
Hinweis: nach dem erstellen der Kontext scheint zu arbeiten, nur für den aktuellen Prozess vollständig, keine Notwendigkeit, es weiterzugeben an andere Crypto-API-Funktionen oder nichts. Aber fühlen Sie sich frei zu kommentieren, wenn Sie finden, eine situation, wenn einige weitere Anstrengungen erforderlich.
Edit: Hinzugefügt: code-Beispiel
Ich verwendet AutoHotKey zur Automatisierung der Passwort-Eingabe mit dem Skript folgt. Wir haben versucht, um eine Web-basierte front-end für unsere Entwickler zu senden, die Binärdateien auf dem Windows-Rechner mit diesem script ausgeführt werden, so dass es signiert werden kann und zurückgegeben.
Muss ich anmerken, dass das, was ich gab, ist nicht ganz nicht sicher, aber wir sind auch der hit dieses Problem die entweder Kauf-signing-Schlüssel für jeden Entwickler oder die Zuweisung einer Aufgabe, einer Signatur-manager das wäre zu genehmigen, die Signatur der veröffentlichte software. Ich glaube, diese sind die bessere und sichere Prozesse--, dass, sobald die Dinge passieren, die Qualitätssicherung und sind zur Veröffentlichung freigegeben worden sind, können Sie offiziell unterzeichnet. Jedoch, kleinere Unternehmen benötigt, können vorschreiben, dass das in einigen anderen automatisierten Weg.
Ich ursprünglich verwendet osslsigncode auf Linux (vor der EV-Zertifikate) zu automatisieren signieren von ausführbaren Windows-Dateien (da hatten wir einen Linux-server zu tun eine Menge Arbeit für die Entwickler zu erleichtern und die Zusammenarbeit). Ich kontaktierte die Entwickler von osslsigncode um zu sehen, ob er Gebrauch machen können, die DigiCert-SafeNet Token zu automatisieren, bei der es etwas anders, da kann ich sehen, wie Sie auf Linux. Seine Antwort vorausgesetzt, hoffe aber ich bin nicht sicher Fortschritte und ich konnte nicht widmen mehr Zeit, um zu helfen
Bekam eine Antwort von Digicert:
Ich meinem Fall Digicert Problem ein Standard (OV) Zertifikat für die CI, für Sie kostenlos, wenn Sie bereits ein EV-Zertifikat.
Ich weiß, das ist nicht die Lösung, aber wenn Sie nicht setzen Sie das token in den server (cloud-server) dies ist der Weg zu gehen.
Python-Variante des Tools:
Außerdem habe ich festgestellt, dass oVirt-Konsole ist Standard-Verhalten senden sperren zu Windows.
Sie müssen deaktivieren Sie es in den server-Optionen und setup-autologin.
Den Weg, den ich tun es ist :
Öffnen Sie das token
PCCERT_CONTEXT cert = OpenToken(SAFENET_TOKEN, EV_PASS);
Zeichen der Datei, über die token -, Wurzel - /cross-Zertifikate werden, wenn erforderlich und das EV-Zertifikat in den Speicher geladen.
HRESULT hr = SignAppxPackage(cert, FILETOSIGN);
Mit SignerSignEx2():
Die Datei ist signiert mit SignerSignEx2() muss in den Arbeitsspeicher geladen werden über LoadLibrary() und GetProcAddress():
Zeitstempel
Weiter, müssen Sie den Zeitstempel Sie die signierte Datei und, dass die Verwendung eines Zeitstempel-Autorität, zu dem Sie eine Verbindung herstellen.
Getan wird, wird durch die sichere überprüfung eines Zeitstempel-server über die URL für das aktuelle Datum und die Uhrzeit. Jeder anmeldende Behörde haben Ihre eigenen Zeitstempel-server. Zeitstempel ist ein zusätzlicher Schritt, der in das Code Signing-Prozess, aber wenn es um die EV Code Signing-es ist eine Anforderung, die fügt eine zusätzliche Ebene der Sicherheit, um die signierte PE.
Aus diesem Grund fügen Sie zu Ihrem code a überprüfen, ob der Benutzer mit dem Internet verbunden ist.
Laden Sie ein Zertifikat von einer Datei
Laden eines Zertifikats in den Speicher
Nachdem das Zertifikat geladen wurde folgende Zugriff auf die hardware-token wir laden:
Schließlich die Unterzeichnung geschieht in der folgenden Funktion:
Sehen diesen Artikel schrieb ich.