2013-10-22 8 views
6

Abbiamo deciso di firmare i nostri file JNLP seguendo la guida oracle this. Dal momento che abbiamo JNLP diversi, abbiamo optato per il secondo approccio (firma di un file JAR con un modello JNLP).Continua a ricevere "JNLPSigningException [Impossibile confermare la firma del file di avvio]" all'avvio di un JNLP firmato dal modello

Ecco il codice abbiamo estratto nel modello:

<?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> 

... ed ecco una delle JNLPs in realtà stiamo utilizzando:

<?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> 

avviso che ho usato il jolly (*) per:

  1. L'attributo codebase nel tag jnlp
  2. L'attributo href in tag jnlp
  3. contenuto all'interno tag title
  4. dimensioni attributo nel tag vaso
  5. il valore dei due immobili

ho messo il modello all'interno della cartella appropriata JNLP-INF (con l'appropriato nome pure) e dopo abbiamo firmato il JAR. Tuttavia, continuiamo a ricevere JNLPSigningException con il seguente messaggio:

Impossibile convalidare la firma del file di avvio. La versione firmata non corrisponde alla versione scaricata.

Qualcuno ha un'idea di cosa mi manca?

+0

Per coloro che cercano, sembra che un jolly nel valore della proprietà non è supportato, anche con il jnlp. prefisso. Non sono sicuro di come Oracle pianifichi di consentire agli sviluppatori di passare in sicurezza l'applicazione a un parametro dinamico. Mi sta facendo impazzire! https://bugs.openjdk.java.net/browse/JDK-8042664 – JeffG

risposta

0

Credo che non sia soddisfatto del carattere jolly nel tag. Mi sono imbattuto in questa esatta situazione. A scopo di test, ho rimosso il carattere jolly e bloccato l'altro valore. ha funzionato bene - ma è una soluzione inaccettabile dal momento che è l'intero punto della proprietà!

+0

ringrazia Nick. Ci proverò ma, come dici tu, perde il punto dal momento che ho bisogno di mantenere la flessibilità nella mia configurazione. Mi stavo chiedendo se hai usato uno o più caratteri jolly per lo stesso motivo per cui ho usato il mio ... forse quando il modello è stato analizzato, alcuni dei caratteri jolly corrispondono, ma altri sono appena fuori posto – Yego

+0

La mia caccia alle oche selvatiche è finita felicemente per adesso. Il mio problema originale non era riuscire a ottenere le proprietà impostate in JNLP. Sono andato lungo la strada del vaso firmato e creando il modello JNLP sciocco. Quello era un vicolo cieco - perché apparentemente il jolly non funziona nelle proprietà. Ho scartato il modello e sono tornato al mio file JNLP originale e ho cambiato i nomi delle proprietà per avere il "jnlp". prefisso - e cambiato il mio codice per leggere tali proprietà. Questo ha funzionato per me. – Nick

3

Ho avuto questo stesso problema, ma si è scoperto che il mio file src/JNLP-INF/APPLICATION.JNLP incluso nel .jar file firmato (usato come un file JNLP firmato) era diverso rispetto al file application.jnlp utilizzato nel web application definito nelle <applet> tag. Una volta che li ho fatti uguali, l'errore è andato via.

Parola di cautela utilizzando i file JNLP firmati all'interno del file .jar, il file deve essere chiamato esattamente JNLP-INF/APPLICATION.JNLP come viene utilizzato come modello per abbinare il jnlp essere chiamato all'interno dell'applicazione:

0

Ho riscontrato questo problema su Java 1.7.0_45 in una guerra autofirmata, la soluzione era rimuovere le proprietà senza jnlp. prefisso. Nel tuo caso provare a rimuovere:

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

Come una punta di debug, ho trovato che javaws esecuzione -verbose e l'URL del file JNLP, dalla riga di comando, fornisce dettagli aggiuntivi nella scheda Console.

Problemi correlati