2009-05-26 6 views
39

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:Come si firma un'applet Java da utilizzare in un browser?

  • Ha scritto un'applet in NetBeans. Funziona bene nel visualizzatore di applet.
  • Creato un file .jar.
  • Creato un certificato in questo modo:
keytool -genkey -keyalg rsa -alias myKeyName 
keytool -export -alias myKeyName -file myCertName.crt 
  • firmata addebbitato jarsigner in questo modo:
jarsigner "C:\my path\myJar.jar" myKeyName 
  • creato un file HTML che contiene questo:
<html> 
    <body> 
<applet code="my/path/name/myApplet.class" archive="../dist/myJar.jar"/> 
    </body> 
</html> 

Quando ho aperto il file html, non ho mai ottenere la finestra di dialogo di conferma (e quindi ottenere il "java.security.AccessControlException: accesso negato "errore). Questo succede su tutti i browser.

Mi manca un passaggio?

risposta

6

Forse è perché stai aprendo alcuni file .class all'esterno del file?

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 classe dal JAR con la classe separata.

Forse la configurazione specifica o l'organizzazione dei file causa questo comportamento. Se è possibile 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").

+0

L'ho risolto. Il problema era che i miei file jar non venivano compilati nello stesso modo in cui facevo riferimento ai file di classe. Ora funziona. Grazie! – user107312

-1

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.

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

JTextComponent dovrebbe consentire la 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 di pop-up per fidarsi dei certificati può 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".

+0

In base alle mie esigenze, il codice deve essere firmato. Ho controllato il mio file jar e dice che è tutto a posto. il mio file di classe è etichettato come smk: la firma è stata verificata, la voce è elencata in manifest e almeno un certificato è stato trovato nel keystore. Anche la cartella META-INF sembra a posto. Le impostazioni sono perfette anche nel mio pannello di controllo. Posso vedere bene le altre applet autofirmate. – user107312

+3

In tutta onestà, firmare le applet (e lavorare con i certificati in generale) può essere un processo abbastanza irritante. Non significa necessariamente che il poster non "sa cosa stanno facendo" in termini di codice ... –

+0

Il numero di persone che "sanno cosa stanno facendo" in termini di sicurezza sembra essere piuttosto piccolo . –

1

Per prima cosa, suggerirei di ottenere un certificato di firma del codice valido. È possibile 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 consiste nell'importare il proprio certificato autofirmato nel file cacert del JRE richiamato dal browser.

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.

+0

Credo che il problema dell'utilizzo dei certificati di posta elettronica per la firma del codice sia stato corretto. –

+0

Thawte ha interrotto i certificati di posta elettronica personale e il sistema di certificazione Web of Trust (WOT) – Massimo

1

lei ha citato:

Quando ho aperto il file html, non ho mai ottenere la finestra di dialogo di conferma ...

Si sta aprendo il file dal file system locale, o tramite un URL di un server Web che ospita il file HTML e il/i vaso/i di applet? Questo potrebbe essere il motivo per cui non ricevi alcun avvertimento.

+0

Sto aprendo dal mio sistema locale. Stai dicendo che la finestra di sicurezza non verrà visualizzata se è aperta localmente? Se questo è vero, c'è un modo per farlo apparire localmente? Farebbe testare il mio progetto molto più facilmente. Nel frattempo, andrò a provarlo sul server web per vedere se questo è il problema. – user107312

+0

Non funziona ancora, quando si accede dal server web. Ho solo bisogno dei miei file .class, file .jar e .html, giusto? Ho bisogno di file relativi ai certificati? – user107312

1

Ecco un modo per firmare i tuoi vasi e quindi controllare che tutti i file di classe 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 
29

3 semplici passi

  1. keytool -genkey -keystore myKeyStore me -alias

  2. keytool -selfcert -keystore myKeyStore me -alias

  3. jarsigner -keystore myKeyStore jarfile .jar me

+1

'-keystore myKeyStore' è addirittura opzionale, non è vero? Ho fatto firmare la mia applet in questo modo, ma il mio Clipboardproblem rimane. Comunque il miglior applet (jarsigning) - tutorial che ho trovato sul web. :) –

Problemi correlati