Newsgroup: it.comp.java
Titolo: scrivere su files

	lo so che bisogna fare una applet firmata, pero'....
	ho bisogno di scrivere una applet che possa leggere e
 scrivere da un file sul disco locale, da includere in un cd da
 distribuire.
	non posso chiedere all'utente di mettersi a copiare
 o configurare roba in giro.
	posso eseguire un programma di installazione all'avvio,
 e fare delle cose prima che il tutto parta.
	mi sembra di aver capito che e' possibile 
 fare applet firmate senza interventi di enti garanti o simili
 	help!!!!
 
	Meotto Auro


mi pare di si, ma se ho capito quello che intendi fare ti complicheresti
solo un po' la vita (come camminare a carponi per passare sotto una
porta alta 4 metri)
Francesco
--
* * * * * * * * * * * * * * * * * * * * * * * * * * *
   De Milato Francesco - Ph.D. Student
   ESNG - Electronic Systems & Networking Group
   University of Genoa - DIBE
   via All'Opera Pia 11/a, I-16145 Genoa (Italy)
   phone/fax: 
+39-010-353-2271
/2175
   E-mail: 
demi...@dibe.unige.it
* * * * * * * * * * * * * * * * * * * * * * * * * * *

  fare applet firmate senza interventi di enti garanti o simili
c'e' qualche "esperto" di questa cosa che ci possa spiegare meglio come
farla?
Grazie!

 Grazie!
Se interessa la procedura per Netscape, posso postarla (ci vuoole un po', è
lunghetta). Fatemi sapere.
Ciao
Ugo
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Enterprise Java Consulting
@mail: Ugo.L...@Flashnet.it
Home URL: 
http://www.ugolandini.net
Sample Work: 
http://www.sirena.lomb.cgil.it
Work Phone: 02/26254326
Cell Phone: 0347/6310749 - 0347/4783580
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

 lunghetta). Fatemi sapere.
si' grazie mille!!!
(credo interessi anche altri visto che ogni tanto si torna sull'argomento)

 


 prassi non ha senso che si possa scavalcare cosi'.
Ha senso eccome, per esempio per scrivere applet all'interno di una
organizzazione (in Intranet) in cui una autocertificazione non da nessun
problema. Ho scritto un'applicazione che aveva bisogno di un'applet firmata
(che leggesse da file) e, creando un certificato di test per l'azienda, ho
fatto risparmiare loro diversi soldini. Il fatto che l'applet sia garantita
dall'azienda stessa e non da un costoso ente di certificazione non crea
nessun problema in questo specifico caso. Era iniziato tutto come ... test,
con l'intenzione di vedere come andava e poi usare un certificato vero, ma
visto che funziona benissimo (il certificato di test dura 3 mesi, ma l'unico
effetto è che se vai a vedere le info sulla sicurezza con il browser ti
dirà.. che è scaduto, continuando però a funzionare benissimo) è tacitamente
diventato la soluzione ideale
P.S. scusate se non ho ancora postato la procedura, spero di riuscirci
stasera




Giovanni Beani wrote:

si' grazie mille!!!

(credo interessi anche altri visto che ogni tanto si torna sull'argomento)

allora... evito tutti i preliminari sulla crittografia perchè altrimenti
mi dilungherei troppo (sono sempre stato un po' prolisso). Entrando nello
specifico, invece, Netscape mette a disposizione di tutti l'Object signing
tool (ex zigbert) che potete usare per un duplice scopo:




firmare degli oggetti (java applets ma anche Javascripts)



generare certificati di test



Quest'ultima opzione ha senso (oltre che per generare certificati di test)
anche per esempio per scrivere applet che all'interno di una organizzazione
(in Intranet) in cui c'è bisogno di un'applet firmata (che legga/scriva
da file, che usi direttamente la stampante, ecc) il fatto che l'applet
sia garantita dall'azienda stessa e non da un costoso ente di certificazione
non crei nessun problema di sicurezza.

Vi serviranno:




NS Communicator (consiglio due client almeno per testare anche il comportamento
di uno che ha un browser "pulito2 e si connette alla vostra pagina: non
so su una sola macchina se si può)



una rete con un web server (in locale non potrete testare il tutto, dovrebbe
però funzionare anche con un web server ed una sola macchina)



l'Object signign tool (
http://developer.netscape.com/docs/manuals/signedobj/signtool/index.htm
)



saper usare la linea di comando! ;)



Passiamo ora alla traduzione del documento (che potete trovare nella versione
originale e completa sul sito della netscape: 
http://developer.netscape.com/docs/manuals/signedobj/signtool/index.htm
)
e ai miei personali commenti:

L'opzione -G dell'utility signtool genera una nuova coppia di chiavi
pubblica-privata di 512 bytes secondo lo standard RSA (per chi non lo sapesse,
- e semplificando- la coppia di chiavi è legata tra loro da una
formula che è considerata inattaccabile - cioè la sua inversa
non è calcolabile in tempi ragionevoli. Se qualcuno di voi ha scoperto
un algoritmo in grado di scomporre molto facilmente un numero molto grande
in fattori primi sappia che potrebbe governare il mondo!) più un
certificato. L'argomento da passare è il nick della società
ente più la dir di Netscape in cui sono presenti i db della security
("cert7.db" e "key3.db": fate un find per trovare la directory). Il certificato
verrà  anche "scritto" su un file  di nome "x509.raw"
e uno "x509.cacert" che ha il MIME-type "application/x-x509-ca-cert" oltre
che sui file db di Communicator (questo vi servirà per poter creare
un link e far registrare tutti gli utenti della vostra applet con il vostro
ente certificatore, altrimenti funzionerà solo per voi stessi)

E' importante prima di fare questa operazione settare la password del
database dei certificati clickando sull'icona Security, poi su Passwords
e poi su Set Passwords. Inoltre chiudete Communicator prima di effettuare
l'operazione, oppure correte il rischio di distruggere i db di certificazione!
Se volete evitare di usare per ogni comando l'opzione -d, fate una zozzata
e copiate l'object signign tool direttamente nella directory dei file "cert7.db"
e "key3.db". Mi raccomando fate anche una bella copia di sicurezza dei
suddetti!

signtool -d<dir> -G AziendaCertificatrice ( e vi verranno chiesti
un po' di dati, tutti comunque opzionali)

using certificate directory: /u/someuser/.netscape

Enter certificate information. All fields are optional. Acceptable

characters are numbers, letters, spaces, and apostrophes.

certificate common name: Test

organization: la mia

organization unit: la mia unità

state or province: Italia

country (must be exactly 2 characters): IT

username: pino

email address: 
pi...@tiscalinet.it


Enter Password or Pin for "Communicator Certificate DB": [Password
will not echo]

generated public/private key pair

certificate request generated

certificate has been signed

certificate "AziendaCertificatrice" added to database

Exported certificate to x509.raw and x509.cacert.

Fatto questo, il certificato deve essere importato in tutti i browser
che dovranno visualizzare le applet che firmerete per fare in modo che
il browser vi riconosca come ente certificatore (sul vostro personale browser
l'ente è già stato inserito quando avete fatto signtool -G,
quindi 'sta cosa va testata in rete da un altro browser)

Create una pagina web sul vostro sito, con il seguente link al fiel
contenete il certificato (non vi preoccupate, dentro c'è solo la
parte pubblica della chiave, quella privata sta nel vostro db di NS):

     <a href="x509.cacert">Clicka per importare
il certificato nel browser</a>

(Ovviamente si capisce come il tutto possa avere senso solo su una Intranet
o comunque in un ambiente "chiuso" in cui potete dire, essenzialmente,
"Fidatevi!")

Tutto qua: clickando sul link i browser farà partire una serie
di finestre per accettare questa autorità, ecc ecc, e troverete
poi fra la lista degli enti (insieme a VeriSign, Thawte, ecc.) anche la
vostra bella "AziendaCertificatrice".

Se però clickando vedrete solamente il file ASCII della chiave
pubblica vuol dire che il web server non ha il supporto per quel MIME-type,
dunque bisognerà cambiare una riga dei file di configurazione, con
procedura diversa a seconda del prodotto. (in locale dunque non si può
testare, serve un web server) Solitamente basta aggiungere in un file apposito
la riga:

.cacert    application/x-x509-ca-cert

che associa ai file di tipo .cacert l'esatto MIME-type.

Provate ora a fare:

signtool -d<dir> -l (l minuscola)

per vedere tutti i certificati e le aziende certificatrici presenti
nei due db di NS, oppure -L (maiuscola ) per vedere solo i certificati,
cioè quelli utilizzabili per "firmare" degli oggetti. In teoria
dovrebbe esserci solo il vostro, gli altri sono tutti enti certificatori.
Questo vi servirà anche per ricordarvi il nome che avete dato al
certificato, altrimenti...

Per firmare poi delle applet basta copiare in una directory (esempio:pippo) 
tutti i .class dell'applet stessa (ovviamente con le dovute directory e
subdirectory in relazione ai package, cioè lang, util, ecc.) e poi
effettuare il comando:

signtool -d<dir> -k AziendaCertificatrice -Z test.jar pippo

in modo da fare un jar "firmato" di nome test.jar con tutti i class
( e le subdirectory) contenuti nella directory pippo. A questo punto vi
verrà chiesta una pwd per accedere al db (se l'avete settata, altrimenti
siete degli zozzoni), e vi apparirà:

...

tree "pippo" signed successfully.

Attenzione che dopo 3 mesi vi dirà che il certificato è
scaduto, e non riuscirete ad usarlo: quindi per continuare a firmare delle
applet con lo stesso certificato dovrete... portare indietro la data dell'orologio
(solo per usare signtool, poi la potete subito riportare avanti!). Le applet
firmate invece funzioneranno ben oltre i 3 mesi... dunque state tranquilli!



 


Una informazione aggiuntiva: tutto ciò che ho scritto non fa
automaticamente in modo che l'applet possa sbizzarrirsi a scrivere files
o accedere a risorse protette (come forse sarebbe più giusto) ma
l'applet deve farne specifica richiesta utilizzando le librerie di
Netscape, quindi bisogna intervenire anche sul codice. Giusto per non
provocare mail tipo: ho eseguito tutta la procedura ma le mie applet
ancora mi danno security error e bla bla...
Il codice comunque è abbastanza semplice, basta (avendo nel classpath la
libreria di Netscape di cui non mi ricordo il nome - mi sembra
java40.jar) scrivere una riga di codice tipo:
SecurityManager.getPrivilege("universalFileAccess")
P.S. "tipo" vuol dire che non me lo ricordo esattamente e bisogna
andarselo a guardare: se qualcuno ha la pazienza posti una mail di
reference anche su questo così, almeno per NS, abbiamo esaurito
l'argomento, magari viene inserito nelle FAQ dal buon Cristiano, e
nessuno lo dovrebbe più far saltare fuori periodicamente!


 > organizzazione (in Intranet)
Appunto...
