2013-10-24 7 views
23

Ho un'applet Java che richiede l'accesso al filesystem locale del client. Ho creato un semplice certificato per il mio (NON è certificato da Verisign, Commodo, ...). Ho firmato il vaso con la seguente configurazione:Che cosa significa l'avviso di sicurezza di Java Applet "manifest file JAR non contiene l'attributo Autorizzazioni"?

del \Users\koalabruder\.keystore 
"C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -genkey -alias %1 -keypass kp -dname "cn=inin" -storepass ab987c 
"C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner.exe" -storepass abc -keypass kp %2 %1 
"C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -export -storepass abc -alias %1 -file %3 

La semplice avviso di protezione che non ho "nessun certificato firmato" è in vigore da anni e non è il mio problema.

Il mio problema è, che la sicurezza di avvertimento changed perché uno degli ultimi aggiornamenti Java:

Questa applicazione sarà bloccato in un futuro aggiornamento di sicurezza di Java perché il file JAR manifesto non contiene l'attributo Autorizzazioni. Si prega di contattare l'editore per ulteriori informazioni.

Che cosa significa? Come posso ripararlo? Devo comprare un certificato? Devo riparare il Manifest (MANIFEST.MF)? Qual è l'attributo Permission?

Aggiornamento: Ecco il mio manifesto dal file jar

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.4 
Application-Name: inin 
Permissions: all-permissions 
Created-By: 1.7.0_45-b18 (Oracle Corporation) 

Name: net/inin/transfer/ul/UlPanel.class 
SHA-256-Digest: asdfasddddddddddddddddddddddddddddddddd= 
+0

http://www.javaquery.com/2013/10/this-application-will-be-blocked-in.html –

+0

stesso qui, le autorizzazioni sono impostate correttamente, lo stesso JNLP è caricato e l'app si avvia, otteniamo il messaggio quando l'app accede a una pagina https su internet !? – centic

+0

Ho anche ricevuto l'avviso solo sotto https, hai trovato una soluzione? –

risposta

8

Non è necessario acquistare un certificato, basta correggere il file manifesto.

Aggiungere questa riga:

permissions: all-permissions 

O questa linea se avete bisogno di accesso limitato:

permissions: sandbox 
+3

Ho inserito il manifest alla domanda. Non funziona. – koalabruder

+0

Sembra corretto, sei sicuro che venga usato manifest quando tenti di eseguire l'applet. Potrebbe essere necessario svuotare la cache nel browser. – jzd

+1

La cache è stata cancellata – koalabruder

1

In Netbeans ho notato che file manifesto viene generato durante la generazione ..quindi brevemente quello che ho fatto per risolvere questo problema per includere i miei attributi manifest all'interno di quel modello che è responsabile della generazione manifest.

a farlo attenersi alla seguente procedura:

1- Aprire questo file con qualsiasi editor di: (PATH) \ nbproject \ jfx-impl.xml
(PATH): è il percorso del progetto.

2- Cerca: "// manifest". miniera assomiglia:

   // manifest 
       var man = jar.createManifest(); 
       var a1val = project.getProperty("application.vendor"); 
       var a1 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); 
       a1.setName("Implementation-Vendor"); 
       a1.setValue(a1val); 
       man.addConfiguredAttribute(a1); 
       var a2val = project.getProperty("application.title"); 
       var a2 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); 
       a2.setName("Implementation-Title"); 
       a2.setValue(a2val); 
       man.addConfiguredAttribute(a2); 
       var a3 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); 
       a3.setName("Implementation-Version"); 
       a3.setValue("1.0"); 
       man.addConfiguredAttribute(a3); 


       //******insert your Attributes code here******* 

       jar.perform(); 

3- In "// *inserire i tuoi attributi qui**", è possibile inserire il proprio manifesti attributi del codice, nella mia situazione la sua abbastanza per includere codice di base, e le autorizzazioni .. è possibile utilizzare il mio codice così:

   ...     
       //******insert your Attributes here******* 
       var a50 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); 
       a50.setName("permissions"); 
       a50.setValue("all-permissions"); 
       man.addConfiguredAttribute(a50); 

       var a51 = new org.apache.tools.ant.taskdefs.Manifest.Attribute(); 
       a51.setName("codebase"); 
       a51.setValue("*"); 
       man.addConfiguredAttribute(a51); 
       ... 

4- poi costruire e voi non vedere di nuovo quell'avvertimento.

Alcune note:

  • vi raccomando vivamente di verificare la documentazione attributi manifesta che si riferisce alla sicurezza @http://docs.oracle.com/javase/tutorial/deployment/jar/secman.html

  • uso dont il carattere jolly "*" valore base di codice, e sarà meglio utilizzare https anziché http per motivi di sicurezza :-) Lo sto usando solo per lo sviluppo.

buona fortuna, '.

2

Mi sono imbattuto nello stesso problema e cambiare il mio manifest non l'ha risolto.

Finalmente ho scoperto che ho fatto riferimento a una libreria che è arrivata nel suo barattolo con il proprio manifest. Stavo usando una copia di quel file jar che non aveva permessi e Codebase.

Quindi, se si fa riferimento a qualsiasi libreria eccetto la libreria del sistema JRE, controllare il manifest nel file jar (ad es. Aprendolo con 7zip). Se non contiene gli attributi, è possibile:

  • controllare, se il produttore ha una nuova versione. Potrebbe aver notato il problema ormai.
  • Decomprimere il file jar, modificare il manifest e inserirlo nuovamente, oppure
  • Unire la libreria con il proprio jar.

Per gli ultimi due, controllare la licenza con cui è pubblicata la libreria. Forse non ti è permesso manipolare il prodotto in questo modo.

1

Ho ricevuto questo avviso durante l'aggiornamento della firma su un'applet preesistente (un componente che si interfaccia con una smart card utente e quindi per funzionare correttamente richiede di essere firmato con un certificato "forte").

Aggiungendo anche l'attributo codebase, per esempio: "codebase: xyz.com" rende di fatto l'avviso scompaiono (si noti che il testo originale Avvertenze riferivo, come in questo caso, per le questioni relative al "permesso" non l'attributo base di codice uno ...).

Probabilmente è un bug in jre?

Problemi correlati