Come posso firmare un’applet Java da utilizzare in un browser?

Sto provando a distribuire un’applet Java sul mio sito web. Devo anche firmarlo, perché ho bisogno di accedere agli appunti. Ho seguito tutti i tutorial di firma che ho trovato ma non ho avuto alcun successo. Ecco cosa ho fatto finora:

  • Ha scritto un’applet in NetBeans. Funziona bene nel visualizzatore di applet.
  • Crea un file .jar al di fuori di esso.
  • Creato un certificato facendo questo:
keytool -genkey -keyalg rsa -alias myKeyName keytool -export -alias myKeyName -file myCertName.crt 
  • Firmato con jarsigner in questo modo:
 jarsigner "C:\my path\myJar.jar" myKeyName 
  • Crea un file html contenente questo:
      

Quando apro il file html, non ottengo mai la finestra di dialogo di conferma della sicurezza (e quindi ottengo l’errore “java.security.AccessControlException: accesso negato”). Questo succede su tutti i browser.

Mi manca un passaggio?

Forse è perché stai aprendo alcuni file .class al di fuori del file jar?

In questo modo potrebbe non visualizzare l’avviso. Ho provato a farlo in questo modo ma mi ha comunque mostrato l’avviso del certificato e per un semplice caso in realtà mi ha impedito di accedere a una class dal JAR con la class separata.

Forse il tuo setup specifico o l’organizzazione dei file causa questo comportamento. Se è ansible eseguire il layout in modo più dettagliato, potremmo aiutare meglio (o meglio, provare a mettere tutti quei file .class in un altro Jar firmato e aggiungerlo all’archivio “…, anotherJar.jar”).

3 semplici passaggi

  1. keytool -genkey -keystore myKeyStore -alias me

  2. keytool -selfcert -keystore myKeyStore -alias me

  3. jarsigner -keystore myKeyStore jarfile.jar me

Innanzitutto, suggerirei di ottenere un certificato di firma del codice valido. È ansible ottenere un certificato gratuito da Thawte . Sebbene in genere questi certificati siano utilizzati per S / MIME, sono validi anche per la firma del codice.

La seconda opzione è quella di importare il cert autofirmato nel file cacert del JRE che il browser sta invocando.

La prossima cosa da verificare è assicurarsi che il tuo browser stia utilizzando il tuo ultimo jar. Un modo per farlo è quello di incrementare sempre il numero di versione. L’altra opzione è quella di svuotare la cache dell’applet Java. Di solito svuoto anche la cache del mio browser, ma questo non dovrebbe essere necessario.

Hai nominato:

Quando apro il file html, non ottengo mai la finestra di dialogo di conferma della sicurezza …

Stai aprendo il file dal tuo file system locale, o tramite un URL a un server web che ospita il file HTML e il / i jar / i di applet? Questo potrebbe essere il motivo per cui non ricevi alcun avvertimento.

Ecco un modo per firmare i tuoi vasi e quindi controllare che tutti i file di class siano firmati con il tuo keystore.

 #!/bin/bash KEYSTORE=/home/user/NetBeansProjects/sign/keystore FILES=`find /home/user/NetBeansProjects/Project/dist/ -name "*.jar"` for f in $FILES; do echo password | /usr/bin/jarsigner -keystore $KEYSTORE -verbose $f myself; echo "Signed $f"; /usr/bin/jarsigner -verify -verbose -certs $f | grep X.509 | sort -u; done 

Modifica: questa risposta è storica. Apparentemente JDK9 deprecherà le applet. Al momento della stesura (1 gennaio 2017), è necessario firmare le applet, ma non concedere loro ulteriori privilegi, quindi passare a una tecnologia più recente.

Ti suggerisco di non firmare il codice. Se stai giocando con la sicurezza degli altri, allora dovresti davvero sapere cosa stai facendo.

JTextComponent dovrebbe consentire il copia e incolla del testo, se questo è sufficiente.

jarsigner -verify controllerà che il tuo barattolo sia firmato. Puoi anche dare una rapida occhiata al file manifest e ai file all’interno di META-INF/ .

La finestra di dialogo popup per fidarsi dei certificati potrebbe essere disabilitata. Nell’implementazione di Sun: apri il pannello di controllo di Java; vai alla scheda Avanzate; espandere il nodo Sicurezza; le prime due caselle di controllo dovrebbero essere “Consenti all’utente di concedere le autorizzazioni al contesto firmato” e “Consenti all’utente di concedere le autorizzazioni al contenuto da un’autorità non sicura”.