2009-06-10 9 views
4

Unser Produkt wurde bei Java Version 1.5.0_13 angehalten und wir möchten es aufrüsten. Unsere Software stellt eine große Anzahl von Gläsern über Java Web Start bereit; Alle diese Gläser müssen signiert sein. Einige der JAR-Dateien enthalten jedoch keine Klassendateien. Ab der Java-Version 1.5.0_14 scheint es, dass das jarsign-Dienstprogramm keine JAR-Dateien signiert, die keine Klassendateien enthalten.Wie erzwinge ich jarsign, um jarfiles zu signieren?

Was kann ich tun, um Jarsign zu zwingen, diese Gläser zu signieren? Oder was kann ich tun, um diese JARs über Java Web Start zu verteilen, ohne sie zu signieren? Und gibt es irgendwo, wo diese Änderung zu jarsign mit Versionen 1.5.0_14 und höher dokumentiert ist? Ich kann es nicht in der release notes finden.

+1

Können Sie die Befehle anzeigen, die Sie zum Erstellen der signierten JAR-Dateien verwenden? – notnoop

Antwort

9

Ich kann nicht überprüfen, ob ein Problem vorliegt. Können Sie durchsehen und sehen, was in Ihrer Umgebung anders sein könnte? Ich laufe auf Windows 7 RC.

Lassen Sie uns die Version überprüfen:

 
C:\temp>java -version 
java version "1.5.0_14" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03) 
Java HotSpot(TM) Client VM (build 1.5.0_14-b03, mixed mode, sharing) 

Mal sehen, was in unserem Glas sein werden:

 
C:\temp>dir /s /b com 
C:\temp\com\rdc 
C:\temp\com\rdc\test 
C:\temp\com\rdc\test\logging.properties 

Lassen Sie uns das Glas machen:

 
C:\temp>jar -cfv test-source.jar com/* 
added manifest 
adding: com/rdc/(in = 0) (out= 0)(stored 0%) 
adding: com/rdc/test/(in = 0) (out= 0)(stored 0%) 
adding: com/rdc/test/logging.properties(in = 13) (out= 15)(deflated -15%) 

Lassen Sie uns das Glas-Zeichen: Ich verwende ein selbstsigniertes Zertifikat.

 
C:\temp>jarsigner -signedjar test-dest.jar test-source.jar vinay 
Enter Passphrase for keystore: 

Warning: The signer certificate will expire within six months. 

Mal sehen, was in unserem unterzeichnet Glas ist:

 
C:\temp>jar tvf test-dest.jar 
    155 Wed Jul 15 23:39:12 BST 2009 META-INF/MANIFEST.MF 
    276 Wed Jul 15 23:39:12 BST 2009 META-INF/VINAY.SF 
    1130 Wed Jul 15 23:39:12 BST 2009 META-INF/VINAY.DSA 
    0 Wed Jul 15 23:37:18 BST 2009 META-INF/ 
    0 Wed Jul 15 19:44:44 BST 2009 com/rdc/ 
    0 Wed Jul 15 19:44:58 BST 2009 com/rdc/test/ 
    13 Wed Jul 15 23:37:10 BST 2009 com/rdc/test/logging.properties 

OK, es erscheint sicherlich unterzeichnet worden zu sein, und es hat keine Klassen. Schauen wir uns die Inhalte von MANIFEST.MF aussehen:

 
Manifest-Version: 1.0 
Created-By: 1.5.0_14 (Sun Microsystems Inc.) 

Name: com/rdc/test/logging.properties 
SHA1-Digest: Ob/S+a7TLh+akYGEFIDugM12S88= 

und der Inhalt von VINAY.SF:

 
Signature-Version: 1.0 
Created-By: 1.5.0_14 (Sun Microsystems Inc.) 
SHA1-Digest-Manifest-Main-Attributes: 4bEkze9MHmgfBoY+fnoS1V9bRPs= 
SHA1-Digest-Manifest: YB8QKIAQPjEYh8PkuGA5G8pW3tw= 

Name: com/rdc/test/logging.properties 
SHA1-Digest: qXCyrUvUALII7SBNEq4R7G8lVQQ= 

Nun lassen Sie uns das Glas überprüfen:

 
C:\temp>jarsigner -verify -verbose test-dest.jar 

     155 Wed Jul 15 23:51:34 BST 2009 META-INF/MANIFEST.MF 
     276 Wed Jul 15 23:51:34 BST 2009 META-INF/VINAY.SF 
     1131 Wed Jul 15 23:51:34 BST 2009 META-INF/VINAY.DSA 
      0 Wed Jul 15 23:37:18 BST 2009 META-INF/ 
      0 Wed Jul 15 19:44:44 BST 2009 com/rdc/ 
      0 Wed Jul 15 19:44:58 BST 2009 com/rdc/test/ 
smk  13 Wed Jul 15 23:37:10 BST 2009 com/rdc/test/logging.properties 

    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 signer certificate will expire within 
six months. Re-run with the -verbose and -certs options for more details. 

Auf dem Gesicht von ihm, alles erscheint in Ordnung sein. Können Sie überprüfen, ob Ihre Zertifikate abgelaufen sind oder widerrufen wurden? Verwenden Sie selbstsignierte Zertifikate oder echte Zertifikate? Oder habe ich missverstanden, was dein Problem ist?

1

Sie können Dummy-Klassendateien einfügen, wenn Sie benötigen. Wahrscheinlich geschmacklos, aber vielleicht notwendig.

+3

Ja, wir haben einen Zweck für die Hello World Java App gefunden :) – akarnokd

1

Es ist ein langer Schuss, aber die Ant SignJar task könnte in der Lage sein, jarsign zu überzeugen, das Richtige zu tun. Es gibt eine Reihe von Optionen, die das Gleichgewicht kippen könnten.

1

BTW, ich versuchte das gleiche wie Vinay, aber mit dem JDK 1.5.0_17 jarsigner, und einem richtigen Verisign-Zertifikat, und bekam die gleichen Ergebnisse. Jarsigner arbeitete, und der Jar verifizierte mit jarsigner -verify.

1

Hinzufügen darüber: Ich verwende Java Web Start, und ich habe ein Glas, das nur Bilder enthält. Mit einem JDK 1.6_05 (07, 10) und einer Ant-Generation wird es problemlos signiert (mit einem selbstsignierten Zertifikat). Also, wie andere beschrieben, scheint es nicht mit dem Jar verbunden zu sein, das .class-Dateien enthält oder nicht.

2

Für jeden, der nach diesem Problem sucht, haben wir festgestellt, dass es nur bestimmte spätere Versionen von Java 1.5 betrifft, die ab 1.5.0_14, glaube ich. Es scheint in den neuesten Versionen von 1.5 behoben zu sein und ist definitiv in 1.6 behoben.