2013-10-22 5 views
6

Wir haben uns entschieden, unsere JNLP-Dateien zu signieren, indem wiroracle guide folgen. Da wir verschiedene JNLPs haben, haben wir uns für den zweiten Ansatz entschieden (Signieren einer JAR-Datei mit einer JNLP-Vorlage)."JNLPSigningException [Validierung des Signierens der Startdatei fehlgeschlagen]" beim Starten eines von der Vorlage signierten JNLP

Hier ist der Code, den wir in die Vorlage extrahiert:

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="1.0+" codebase="*" href="*"> 
    <information> 
    <title>*</title> 
    <vendor>My vendor</vendor> 
    <description>My description</description> 
    <icon href="splash.jpg" kind="splash" width="700" height="400" size="115258"/> 
    <offline-allowed /> 
    <shortcut> 
     <menu submenu="My submenu"/> 
    </shortcut> 
    </information> 

    <security> 
    <all-permissions/> 
    </security> 

    <resources locale="en es ja"> 
    <j2se version="1.6+" initial-heap-size="128m" max-heap-size="384m" href="http://java.sun.com/products/autodl/j2se"/> 
    <jar href="myjar.jar" main="true" download="lazy" part="core" size="*"/> 
    <jar href="lib/commons-lang-2.6.jar" download="lazy" part="commons" size="297085"/> 
    ... 
    <jar href="lib/trident-6.0.jar" download="lazy" part="core" size="114496"/> 
    <property name="jnlp.myProperty" value="*"/> 
    <property name="log4j.configuration" value="*"/> 
    </resources> 

    <application-desc main-class="com.mycom.myapp.MyClass"> 
    </application-desc> 
</jnlp> 

... und hier ist eine der JNLPs verwenden wir tatsächlich:

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="1.0+" codebase="http://mylocation.mycom.com/jnlp/myapp/" href="myapp.jnlp"> 
    <information> 
    <title>My App - Production version</title> 
    <vendor>My vendor</vendor> 
    <description>My description</description> 
    <icon href="splash.jpg" kind="splash" width="700" height="400" size="115258"/> 
    <offline-allowed /> 
    <shortcut> 
     <menu submenu="My submenu"/> 
    </shortcut> 
    </information> 

    <security> 
    <all-permissions/> 
    </security> 

    <resources locale="en es ja"> 
    <j2se version="1.6+" initial-heap-size="128m" max-heap-size="384m" href="http://java.sun.com/products/autodl/j2se"/> 
    <jar href="myjar.jar" main="true" download="lazy" part="core" size="4189501"/> 
    <jar href="lib/commons-lang-2.6.jar" download="lazy" part="commons" size="297085"/> 
    ... 
    <jar href="lib/trident-6.0.jar" download="lazy" part="core" size="114496"/> 
    <property name="jnlp.myProperty" value="http://mylocation.mycom.com/jnlp/myapp/MyApp.properties"/> 
    <property name="log4j.configuration" value="http://mylocation.mycom.com/jnlp/myapp/log4j.xml"/> 
    </resources> 

    <application-desc main-class="com.mycom.myapp.MyClass"> 
    </application-desc> 
</jnlp> 

Hinweis, dass ich die Wildcard (*) für:

  1. Das codebase-Attribut im Tag jnlp
  2. Das Attribut href im Tag jnlp
  3. Inhalt innerhalb Titel-Tags
  4. Attribut Größe in jar Tag
  5. der Wert der beiden Eigenschaften

ich die Vorlage in den entsprechenden JNLP-INF Ordner speichern (mit dem entsprechenden benennen Sie auch) und wir unterzeichneten die JAR danach. Wir erhalten jedoch immer eine JNLPSigningException mit der folgenden Meldung:

Fehler beim Überprüfen der Signierung der Startdatei. Die signierte Version stimmt nicht mit der heruntergeladenen Version überein.

Hat jemand eine Idee von dem, was ich vermisse?

+0

Für diejenigen, die suchen, scheint es, dass ein Platzhalter im Eigenschaftswert nicht unterstützt wird, selbst mit dem jnlp. Präfix. Ich bin mir nicht sicher, wie Oracle es Entwicklern ermöglichen möchte, der Anwendung einen dynamischen Parameter sicher zu übergeben. Es macht mich verrückt! https://bugs.openjdk.java.net/browse/JDK-8042664 – JeffG

Antwort

0

Ich glaube, es ist unglücklich über die Wildcard im Tag. Ich bin genau in diese Situation geraten. Zu Testzwecken habe ich den Platzhalter entfernt und den anderen Wert gestaut. Hat gut funktioniert - aber inakzeptable Lösung, denn das ist der springende Punkt der Immobilie!

+0

danke Nick. Ich werde das versuchen, aber wie du sagst, verliert es den Punkt, da ich Flexibilität in meiner Konfiguration behalten muss. Ich frage mich, ob Sie einen oder mehrere Wildcards aus dem gleichen Grund verwendet haben, den ich auch verwendet habe ... vielleicht werden die Wildcards bei der Analyse zusammenpassen, aber andere sind einfach fehl am Platz – Yego

+0

Meine wilde Jagd endete glücklich für jetzt. Mein ursprüngliches Problem war nicht in der Lage, Eigenschaften in den JNLP gesetzt zu bekommen. Ich ging die Straße des signierten Glases hinunter und erstellte die dumme JNLP-Vorlage. Das war eine Sackgasse - denn offenbar funktioniert der Platzhalter in Eigenschaften nicht. Ich habe die Vorlage verschrottet und bin zu meiner ursprünglichen JNLP-Datei zurückgekehrt und habe die Eigenschaftsnamen so geändert, dass sie "jnlp" enthalten. Präfix - und änderte meinen Code, um solche Eigenschaften zu lesen. Das hat für mich funktioniert. – Nick

3

Ich hatte das gleiche Problem, aber es stellte mir heraus, dass meine src/JNLP-INF/APPLICATION.JNLP Datei in der signierten .jar-Datei enthielt (als signierte jnlp Datei verwendet) war anders als die application.jnlp Datei in der Web-Anwendung in den <applet> Tags definiert verwendet wird. Sobald ich sie gleich gemacht hatte, ging der Fehler weg.

Ein Wort der Warnung mit unterzeichnet JNLP Dateien innerhalb der .jar Datei, muss die Datei genau benannt werden JNLP-INF/APPLICATION.JNLP wie sie als Vorlage verwendet wird, um die jnlp übereinstimmen innerhalb der Anwendung aufgerufen wird:

0

Ich hatte dieses Problem auf Java 1.7.0_45 auf einem selbstsignierten Krieg, die Lösung war, Eigenschaften ohne jnlp zu entfernen. Präfix. In Ihrem Fall versuchen zu entfernen:

<property name="log4j.configuration" value="http://mylocation.mycom.com/jnlp/myapp/log4j.xml"/> 
0

Als Debug-Tipp, ich habe festgestellt, dass die Ausführung javaws -verbose und die URL der jnlp Datei, von der Kommandozeile, gibt Ihnen zusätzliche Details in der Registerkarte Konsole.

Verwandte Themen