jarsigner: Dieses Jar enthält Einträge, deren Zertifikatskette nicht validiert ist
Versuche ich code signieren einer JAR-Datei und bin mit dem JDK 1.7u1. Wir bekamen eine GoDaddy-Code-Signing-Zertifikat, und ich folgte den Anweisungen (Ansatz 1) hier: http://help.godaddy.com/article/4780
JAR Zeichen gut, allerdings wenn ich versuche den Befehl auszuführen:
jarsigner -verify
auf meine signierte JAR mit JDK 1.7u1, bekomme ich die folgende Ausgabe:
s 180 Mon Dec 05 10:24:32 EST 2011 META-INF/MANIFEST.MF
[entry was signed on 12/5/11 10:24 AM]
X.509, CN=Removed Company Name, O=Removed Company Name, L=Removed City, ST=Removed State, C=US
[certificate is valid from 12/2/11 4:30 PM to 12/2/13 4:30 PM]
X.509, SERIALNUMBER=00000000, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
[certificate is valid from 11/15/06 8:54 PM to 11/15/26 8:54 PM]
X.509, OU=Go Daddy Class 2 Certification Authority, O="The Go Daddy Group, Inc.", C=US
[certificate is valid from 6/29/04 1:06 PM to 6/29/34 1:06 PM]
[CertPath not validated: null]
342 Mon Dec 05 10:24:34 EST 2011 META-INF/JAVACSC.SF
6180 Mon Dec 05 10:24:34 EST 2011 META-INF/JAVACSC.RSA
0 Mon Dec 05 10:24:30 EST 2011 META-INF/
sm 2161 Wed Nov 30 10:23:20 EST 2011 C:/Users/Seth/Desktop/JAR/RunAppSF.class
[entry was signed on 12/5/11 10:24 AM]
X.509, CN=Removed Company Name, O=Removed Company Name, L=Removed City, ST=Removed State, C=US
[certificate is valid from 12/2/11 4:30 PM to 12/2/13 4:30 PM]
X.509, SERIALNUMBER=00000000, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
[certificate is valid from 11/15/06 8:54 PM to 11/15/26 8:54 PM]
X.509, OU=Go Daddy Class 2 Certification Authority, O="The Go Daddy Group, Inc.", C=US
[certificate is valid from 6/29/04 1:06 PM to 6/29/34 1:06 PM]
[CertPath not validated: null]
s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope
jar verified.
Warning:
This jar contains entries whose certificate chain is not validated.
Ich habe auch versucht, die jarsigner -verify
Befehl mit dem gleichen GLAS wie oben auf JDK 1.6u26 und 1.6u14 und es kam zurück als in Ordnung. (Ausgabe unterhalb von 1.6u26).
180 Mon Dec 05 10:24:32 EST 2011 META-INF/MANIFEST.MF
342 Mon Dec 05 10:24:34 EST 2011 META-INF/JAVACSC.SF
6180 Mon Dec 05 10:24:34 EST 2011 META-INF/JAVACSC.RSA
0 Mon Dec 05 10:24:30 EST 2011 META-INF/
sm 2161 Wed Nov 30 10:23:20 EST 2011 C:/Users/Seth/Desktop/JAR/RunAppSF.class
[entry was signed on 12/5/11 10:24 AM]
X.509, CN=Removed Company Name, O=Removed Company Name, L=Removed City, ST=Removed State, C=US
[certificate is valid from 12/2/11 4:30 PM to 12/2/13 4:30 PM]
X.509, SERIALNUMBER=00000000, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
[certificate is valid from 11/15/06 8:54 PM to 11/15/26 8:54 PM]
[KeyUsage extension does not support code signing]
X.509, OU=Go Daddy Class 2 Certification Authority, O="The Go Daddy Group, Inc.", C=US
[certificate is valid from 6/29/04 1:06 PM to 6/29/34 1:06 PM]
s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope
jar verified.
Bin ich fehlt ein extra-Schritt, den ich nehmen muss, um die JAR-ordnungsgemäß unterzeichnet für JDK 1.7?
InformationsquelleAutor der Frage Seth | 2011-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie nicht etwas fehlt und Sie sind auf jeden Fall nicht allein mit diesem problem. Nach einem Kampf von fast 12 Stunden, habe ich herausgefunden, dass die Wurzel des Problems liegt in der Misch-Binärdateien von
JDK 1.7
mit einer älteren Java-version wieJRE-1.6
. Um genauer zu sein,keytool
kommt mitJRE
währendJDK
Schiffe mit beidenkeytool
undjarsigner
.So, um das Problem zu beheben, habe ich komplett deinstalliert
JDK-1.7
aus meinem system und installiertJDK-1.6 Update 30
. Nun, wenn ich das machen würdejarsigner -verify -verbose -certs blah.jar
es produzieren würdejar verified
ohne jede Warnung, die ich glaube, ist, was Sie erwarten.InformationsquelleAutor der Antwort gsbabil
Ich habe das gleiche Problem und wenn es anderen helfen kann, das problem ist, wie jarsigner findet keystore.
Um das Problem zu beheben tun:
InformationsquelleAutor der Antwort Alain P
Es ist nur eine Warnung, die Sie ignorieren können.
Wenn Sie wirklich nicht wollen, es zu ignorieren, dann sagen jarsigner, wo Ihr keystore ist, wenn Sie überprüfen.
Dies ist nur ein neues feature in JDK 7.
InformationsquelleAutor der Antwort Daniele Segato
Ich hatte ähnliches problem mit dem "DigiCert SHA2 Versichert ID Code Signing CA". Alle oracle java-Versionen, als auch OpenJDK verhielten sich gleich. Digicert support weitergeleitet die mich zu dieser Seite, aber nichts gesagt hier hatte mir geholfen, mit dem Verifizierungsprozess weder.
Ich versuche zu signieren eines Applets, so dass ich es zu müssen nachprüfbar sein, auch im browser, also der trick mit der Bereitstellung der keystore-Pfad zu jarsigner -verify ist nicht anwendbar.
Haupt-problem scheint ein bug in der keytool beim Betrieb mit Zertifikate mit SHA2 anstelle von SHA1, weil die gleiche Liste von Schritten, angewendet auf SHA1 certs immer funktioniert und noch nie gearbeitet, für SHA2 für mich. Es scheint mir, dass keytool ist nicht in der Lage zu erkennen "verkettbarkeit" von Zertifikaten importiert jks und damit jarsigner nicht einbinden richtige CERT-Kette in der signierten jar, es ist nur das Letzte Zertifikat in der META-INF/myalias.RSA-Datei statt (nachprüfbar durch openssl pkcs7 -in myalias.RSA -print_certs -inform DER-out CERT.crt).
Digicert vorgeschlagen, "...manchmal sehen wir Probleme mit dem Root eigentlich nicht korrekt importiert oder komplett die erste Zeit, die aber mit einem import-Befehl, zeigt auf die Root wieder beheben kann dieser", auch dies nicht hilft in meinem Fall.
Da es keine Möglichkeit gibt, zu sagen, der explizit für keytool, was die certs werden in eine Kette, habe ich beschlossen, eine Kette bilden, die openssl verwenden, und importieren Sie es wie folgt:
Nach dieser mykeystore.jks erscheint, enthält nur mein Zertifikat nicht DigiCertCA2 oder die Wurzel, wenn Sie aufgelistet sind die von keytool -list-Befehl, aber mit -v (verbose) es offenbart Kette Tiefe und seine certs:
Und das ist, was jarsigned braucht zum signieren der jar-richtig, d.h. zum einbetten richtige CERT-Kette und machen jar überprüfbare auch bei der endgültigen browser-Benutzer.
InformationsquelleAutor der Antwort tomas
Fand ich, dass die Meldung "Diese jar-Datei enthält Einträge, deren Zertifikatskette ist nicht validiert" ist auch gedruckt, wenn Sie sich die Jar-Datei mit JRE 1.7.0_21 und überprüfen Sie es mit einer niedrigeren version von JRE 1.7.0.
Fazit: keine Notwendigkeit, ein downgrade auf Java 1.6, verwenden Sie einfach die gleichen jarsigner-version zum Unterschreiben und verifizieren.
InformationsquelleAutor der Antwort lyaffe
Dies ist ein Sicherheits-Mechanismus, der in JDK 7+. Dies druckt die Warnung, wenn die Unterzeichnung der Gläser, ohne einen Zeitstempel, der übergeben werden kann, mit ein -tsa-Flagge. Wenn eine jar hat keinen timestamp, wird es aufhören arbeiten Vergangenheit seine Gültigkeit.
Wenn Sie ein Android-target, diese Warnung wird immer gedruckt, wenn Sie mit einem neueren JDK als 1.7.0_51. Android empfiehlt generell die übergabe 30 Jahre Gültigkeit, so dass dieser Warnung kann zu 100% ignoriert, es sei denn, Ihr business-plan ist, um Benutzern zu erlauben, verwenden Sie die gleichen .apk in 2046.
Hier ist das ticket für die Funktion, der Zweck ist die Förderung Zeitstempel, die ich glaube, wird werden effektiv. http://bugs.java.com/view_bug.do?bug_id=8023338.
InformationsquelleAutor der Antwort mateor
Sind die Zertifikate von Entrust, stellen Sie sicher, dass Sie die neueren root-Zertifikat.
http://www.entrust.net/knowledge-base/technote.cfm?tn=7875
InformationsquelleAutor der Antwort cmcginty
Beim erstellen/exportieren Sie Ihr Zertifikat in eine p12 - (verwendet durch das jarsigner) stellen Sie sicher, dass die folgenden ausgewählt ist (zum Beispiel, wenn Sie den export mit Internet explorer-Assistenten) müssen Sie die folgenden in der export-Assistent.
"Privaten Schlüssel exportieren"
"Alle Zertifikate im Zertifizierungspfad wenn möglich"
"Alle erweiterten Eigenschaften exportieren" kontrolliert unter der option .PFX-oder PKCS #12.
Wenn Sie das erstellen der p12, richtig in den ersten Platz dann jarsign erfordert keinen besonderen Aufwand.
InformationsquelleAutor der Antwort PGP