Jsign ist ein plattformunabhängiges Open-Source-Java-Tool für die Microsoft Authenticode-Codesignatur. Jsign lässt sich leicht in Build-Systeme wie Maven, Gradle und Ant integrieren oder direkt über die Befehlszeile verwenden.
In dieser Anleitung werden wir uns mit der Verwendung befassen Jsign von der Linux-Kommandozeile für OV / IV-Codesignatur und EV-Codesignatur. Da Jsign Java-basiert ist, können Sie es auch auf Windows- und MacOS-Systemen verwenden.
Installieren Sie Jsign
Zuerst müssen Sie Jsign herunterladen und installieren. Das Jsign Website Enthält Links zu Debian- und RPM-Paketen für die einfache Installation auf den meisten gängigen Linux-Systemen sowie a .jar
Datei.
OV / IV-Codesignatur
Für die OV/IV-Codesignierung können Sie ein Zertifikat verwenden, das in einem Java-Keystore oder einer PKCS#12-Datei (PFX) gespeichert ist. Ersetzen Sie in allen folgenden Codebeispielen die in GROSSBUCHSTABEN angezeigten Werte durch Ihre tatsächlichen Werte.
- Verwenden Sie zuerst die
keytool
Befehl, um die zu bekommenalias
Wert, der beim Signieren verwendet werden soll:keytool -list -v -keystore PKCS12-FILE.p12 -storetype PKCS12 -storepass PKCS12-PASSWORD
- Überprüfen Sie die Ausgabe Ihres
keytool
Befehl für eine Zeile beginnend mitAlias name:
.Keystore-Typ: PKCS12 Keystore-Anbieter: SUN Ihr Keystore enthält 1 Eintrag Aliasname: 1 Erstellungsdatum: 18. Januar 2021 Eintragstyp: PrivateKeyEntry Zertifikatskettenlänge: 4 ...
Im obigen Beispiel ist
Alias name
is1
. - Verwenden Sie einen Befehl wie den folgenden, um eine Datei zu signieren und mit einem Zeitstempel zu versehen:
jsign
Befehl systemweit installiert:jsign --keystore KEYSTORE.p12 --alias ALIAS-NAME --storetype PKCS12 --storepass PKCS12-PASSWORD --tsaurl http://ts.ssl.com --tsmode RFC3161 FILE-TO-SIGN
- Mit Jsigner
.jar
Datei:java -jar jsign-3.1.jar --keystore KEYSTORE.p12 --alias ALIAS-NAME --storetype PKCS12 --storepass PKCS12-PASSWORD --tsaurl http://ts.ssl.com --tsmode RFC3161 FILE-TO- ZEICHEN
- Wenn Ihr Befehl erfolgreich ist, sollten Sie die folgende Ausgabe sehen:
Hinzufügen einer Authenticode-Signatur zu example.exe
Wenn Sie auf diesen Fehler stoßen:
The timestamp certificate does not meet a minimum public key length requirement
, sollten Sie sich an Ihren Softwareanbieter wenden, um Zeitstempel von ECDSA-Schlüsseln zuzulassen.Wenn Ihr Softwareanbieter die Verwendung des normalen Endpunkts nicht zulassen kann, können Sie diesen Legacy-Endpunkt verwenden
http://ts.ssl.com/legacy
um einen Zeitstempel von einer RSA-Zeitstempeleinheit zu erhalten.EV-Code-Signierung
Sie können Jsign auch mit einem EV-Codesignaturzertifikat verwenden. Das Beispiel hier verwendet eine SSL.com EV-Codesignaturzertifikat installiert auf einem FIPS 140-2-validierter Sicherheitsschlüssel-USB-Token.
- Stellen Sie zunächst sicher, dass OpenSC ist auf Ihrem System installiert, damit es über die PKCS # 11-API mit Ihrem Token kommunizieren kann. Auf Debian-basierten Distributionen wie Ubuntu können Sie OpenSC mit installieren
apt
:sudo apt install opensc
- Erstellen Sie als Nächstes eine Konfigurationsdatei. Der Name der Datei ist beliebig, aber für die folgenden Beispielbefehle verwenden wir
eToken.cfg
. Beachten Sie, dass der Pfad zuopensc-pkcs11.so
kann in Ihrer OpenSC-Installation variieren. Überprüfen Sie dies, bevor Sie die Konfigurationsdatei erstellen.name = OpenSC-PKCS11 description = SunPKCS11 über OpenSC library = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so slotListIndex = 0
- Verwenden Sie das
keytool
Befehl, um die zu bekommenalias
Wert, der beim Signieren verwendet werden soll:keytool -list -v -keystore NONE -storetype PKCS11 -storepass TOKEN-PIN -providerClass sun.security.pkcs11.SunPKCS11 -providerArg eToken.cfg
- Überprüfen Sie die Ausgabe Ihres
keytool
Befehl für eine Zeile beginnend mitAlias name:
. Wenn Ihr Token mehrere Zertifikate enthält, überprüfen Sie die Gültigkeitsdaten und den Aussteller in der Ausgabe anhand Ihres Zertifikats. Beachten Sie, dass auf YubiKey von SSL.com ausgestellte EV-Codesignaturzertifikate den Aliasnamen haben solltenCertificate for PIV Authentication
.Aliasname: Zertifikat für PIV-Authentifizierung Eintragstyp: PrivateKeyEntry Zertifikatskettenlänge: 1 Zertifikat [1]: Eigentümer: OID.1.3.6.1.4.1.311.60.2.1.3 = US, OID.1.3.6.1.4.1.311.60.2.1.2 .2.5.4.15 = Nevada, OID.20081614243 = Private Organisation, CN = SSL Corp., SERIALNUMBER = NV2, O = SSL Corp., L = Houston, ST = TX, C = US-Emittent: CN = SSL.com EV Code Signing Intermediate CA RSA R7299, O = SSL Corp, L = Houston, ST = Texas, C = US Seriennummer: 93f57a3bac6570c781580f63172e17 Gültig von: Fr 12 Apr 46:04:2020 EDT 17 bis: Sa 12 Apr 46:04:2021 EDT XNUMX
- Verwenden Sie einen Befehl wie den folgenden, um eine Datei zu signieren und mit einem Zeitstempel zu versehen:
jsign
Befehl systemweit installiert:jsign --keystore eToken.cfg --alias "Zertifikat für PIV-Authentifizierung" --storetype PKCS11 --storepass TOKEN-PIN --tsaurl http://ts.ssl.com --tsmode RFC3161 FILE-TO-SIGN
- Mit Jsigner
.jar
Datei:java -jar jsign-3.1.jar --keystore eToken.cfg --alias "Zertifikat für PIV-Authentifizierung" --storetype PKCS11 --storepass TOKEN-PIN --tsaurl http://ts.ssl.com --tsmode RFC3161 FILE -UNTERSCHREIBEN
- Wenn Ihr Befehl erfolgreich ist, sollten Sie die folgende Ausgabe sehen:
Hinzufügen einer Authenticode-Signatur zu example.exe
Wenn Sie auf diesen Fehler stoßen:
The timestamp certificate does not meet a minimum public key length requirement
, sollten Sie sich an Ihren Softwareanbieter wenden, um Zeitstempel von ECDSA-Schlüsseln zuzulassen.Wenn Ihr Softwareanbieter die Verwendung des normalen Endpunkts nicht zulassen kann, können Sie diesen Legacy-Endpunkt verwenden
http://ts.ssl.com/legacy
um einen Zeitstempel von einer RSA-Zeitstempeleinheit zu erhalten.Überprüfen Sie die digitale Signatur
- Sie können überprüfen, ob Ihre digitale Signatur gültig ist, indem Sie die Signaturdetails in Windows anzeigen.
- Sie können auch SignTool in Windows, um die digitale Signatur zu überprüfen.
signtool.exe verify / pa 'C: \ Benutzer \ Aaron Russell \ Desktop \ example.exe' Datei: C: \ Benutzer \ Aaron Russell \ Desktop \ example.exe Indexalgorithmus Zeitstempel ============ ============================= 0 sha256 RFC3161 Erfolgreich überprüft: C: \ Users \ Aaron Russell \ Desktop \ example.exe