2010-08-17 8 views
13

Java Web Start (JWS) dice che non può lanciare la mia domanda perché il file jar non è firmato:Perché Java Web Start dice che un file jar firmato non è firmato?

Error: Unsigned application requesting unrestricted access to system 
     Unsigned resource: .../dynaccn.jar 

Ma il file jar è firmato:

$ jarsigner -keystore ... dynaccn.jar idv 
$ jar tf dynaccn.jar 
META-INF/MANIFEST.MF 
META-INF/IDV.SF 
META-INF/IDV.RSA 
META-INF/ 
edu/ 
edu/ucar/ 
edu/ucar/unidata/ 
edu/ucar/unidata/dynaccn/ 
App$1.class 
... 
$ jarsigner -verbose -certs -verify dynaccn.jar 
     28325 Tue Aug 17 09:41:58 MDT 2010 META-INF/MANIFEST.MF 
     28404 Tue Aug 17 09:41:58 MDT 2010 META-INF/IDV.SF 
     2880 Tue Aug 17 09:41:58 MDT 2010 META-INF/IDV.RSA 
      0 Tue Aug 17 09:41:58 MDT 2010 META-INF/ 
      0 Mon Aug 16 10:10:34 MDT 2010 edu/ 
      0 Mon Aug 16 10:10:34 MDT 2010 edu/ucar/ 
      0 Mon Aug 16 10:10:34 MDT 2010 edu/ucar/unidata/ 
      0 Mon Aug 16 10:10:34 MDT 2010 edu/ucar/unidata/dynaccn/ 
... 
sm  486 Mon Aug 16 10:10:34 MDT 2010 App$1.class 

     X.509, CN=University Corporation for Atmospheric Research, OU=UNIDATA, O=University Corporation for Atmospheric Research, L=Boulder, ST=Colorado, C=US 
     [certificate will expire on 2/6/11 4:59 PM] 
     X.509, CN=Thawte Code Signing CA, O=Thawte Consulting (Pty) Ltd., C=ZA 
     [certificate is valid from 8/5/03 6:00 PM to 8/5/13 5:59 PM] 
     [KeyUsage extension does not support code signing] 
     X.509, [email protected], CN=Thawte Premium Server CA, OU=Certification Services Division, O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA 
     [certificate is valid from 7/31/96 6:00 PM to 12/31/20 4:59 PM] 
     [CertPath not validated: null] 
... 
jar verified. 

Warning: 
This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing. 
This jar contains entries whose signer certificate will expire within six months. 
This jar contains entries whose certificate chain is not validated. 
This jar contains signed entries that's not signed by alias in this keystore. 

ed entrambi JWS e il mio browser ha un certificato per "Thawte Premium Server CA".

Il problema si verifica anche se la cache JWS e la zona browser scaricare sono vuoti.

Non credo che il messaggio "KeyUsage" sia rilevante perché 1) viene utilizzata la stessa catena di certificati per un'altra applicazione che viene avviata correttamente; e 2) la documentazione che ho letto indica che la CA di firma del codice Thawte viene utilizzata solo per verificare il certificato UNIDATA e non per firmare il codice.

Il mio ambiente è Linux 2.6.27.41-170.2.117.fc10.x86_64, Firefox 3.6.8 (i686) e Java 1.7.0-ea.

Perché non sarà questa l'avvio di applicazioni?

AGGIORNAMENTO: Ho scoperto che l'applicazione si avvia se l'attributo "codebase" nel file JNLP fa riferimento a una directory locale ma non se fa riferimento a un URL che si trova dietro l'autenticazione dell'utente. In quest'ultimo caso, javaws (1) interpreta la pagina Web di autenticazione come un file JNLP (con risultati ovvi) se invocata dalla riga di comando. Se invocato dallo script "deployJava" da una pagina Web di autenticazione utente (in modo che il browser abbia un cookie di sessione), javaws (1) dice che l'applicazione non è firmata. Trovo che entrambe queste modalità di errore siano strane, poiché la documentazione di javaws (1) dice che comprende l'autenticazione delle pagine Web da parte dell'utente e il file jar è firmato.

+1

Come stai firmando il tuo file jar? Ho riscontrato questo tipo di problemi quando si utilizzava l'attività signjar in cui l'attributo lazy era impostato su true. Rimuovendo l'attributo 'lazy = true' praticamente i problemi sparivano. – Pram

+0

@Pram Uso questa voce ant (1): . L'attributo "lazy" non viene utilizzato. –

risposta

3

Sono su Gentoo Linux, in esecuzione OpenJDK 7, e penso che ho sperimentato lo stesso problema.

Non riuscivo a farlo funzionare con OpenJDK 7. Solo la nuova firma con una versione di Sun Java 6 JDK ha infine firmato correttamente l'applicazione. (Ho anche ricostruito tutto perché è gestito dalla formica, non so se è necessario, però).

Semplicemente il passaggio al JDK 6 ufficiale senza la ricostruzione rende solo l'avviso "[CertPath non validato: null]" quando la spiegazione con "jarsigner -verify -verbose -certs" scompare, ma non sembra funzionare nell'applicazione I alla fine uso.

2
  1. assicurarsi di non utilizzare una versione cache (senza firma) del jar. Pulire la cartella temporanea in cui JWS downloads jars
  2. assicurarsi che tutte le dipendenze (vasi) del vostro vaso, che richiedono permessi speciali, sono anche firmato
+0

Il problema si verifica anche se la cache JWS è vuota. Esiste solo un file jar e contiene solo classi. –

0

Assicurarsi di avvolgere le chiamate in applet con un blocco doPrivileged. Non sono sicuro del perché funzioni così ma sembra funzionare come un incantesimo.

+0

L'applicazione è autonoma: non è un'applet. –