Newsgroup: it.comp.java
Titolo: midp e https

ciao a tutti
Devo programmare una MIDlet che si connette in https a un sito per
prelevare delle informazioni.
Come strumenti sto utilizzando il Wireless Toolkit versione 1.0.4 e
ovviamente la Java Micro Edition. (MIDP e CLDC)
Sul tutorial che ho scaricato
(
http://wireless.java.sun.com/midp/articles/https
) vengono spiegati in
dettaglio i passi da compiere per aprire una connessione https
dall'emulatore del telefonino verso il sito "protetto".
Come ben sapete i certificati possono essere "trusted" dalle
Certification Authority, come possono benissimo non essere "trusted"
(e in tal caso spetta all'utente la decisione di concedere o meno la
fiducia - il browser lo avverte che il certificato è stato rilasciato
da un'entità che si è deciso di non considerare attendibile ecc.
ecc.). Quindi se dall'emulatore del telefonino mi collego a un sito
certificato Verisign dovrei essere in grado di completare
correttamente la connessione - visualizzando per esempio sul display
dell'emulatore il sorgente html della pagina richiesta; viceversa se
mi collego a un sito il cui certificato è un certificato di test (ad
esempio quello che si può generare con il keytool per far girare
Tomcat in modalità https), la midlet mi ritorna una exception perchè
la Certification Authority che ha firmato il certificato non è
considerata sicura. E anche questo comportamento mi sembra
ragionevole: l'emulatore riceve il certificato del sito e va a vedere
se esiste un matching tra l'ente che ha firmato il certificato e la
lista di enti presenti nel suo keystore; se il matching è positivo si
va avanti, in caso contrario il certificato non è considerato valido e
si fornisce una bella Exception.
Se però importo il certificato di prova dentro il keystore
dell'emulatore, la connessione in https funziona (ciò l'ho testato
personalmente).
In definitiva mi sta bene che la connessione https funzioni con i
certificati universalmente riconosciuti come sicuri (Verisign, Thawte
ecc. ecc.) e non funzioni con i certificati "fai da te" - a meno che
non vengano importati a mano nel keystore.
Non mi spiego però il motivo per cui riesco a connettermi su alcuni
siti https e non su altri (ovviamente ho considerato solo i siti il
cui certificato è stato rilasciato da una CA sicura).
 
Esempio:
riesco a collegarmi a 
https://cpbim1.unipv.it
 ma non a
https://www.intesatrade.it
 
Inizialmente pensavo che il motivo di ciò fosse da attribuirsi alla
classe del certificato (cpbim1 ha un certificato V1, mentre per
intesatrade il certificato è un V3), ma ho dovuto abbandonare presto
questa ipotesi perchè sono riuscito a collegarmi al sito
https://central.sun.net
 che ha un certificato V3.
L'emittente del certificato di cpbim1 è "Secure Server Certification
Authority", mentre l'emittente di Intesatrade è "
www.verisign.com/CPS
Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign". L'algoritmo della firma
elettronica è identico per entrambi : md5RSA.
A questo punto ho pensato che il motivo fosse legato alla CA: magari
per qualche recondito motivo all'emulatore del telefonino piace
l'emittente di cpbim1 ma non quello di intesatrade. La conferma di
questa mia ipotesi sembrerebbe risiedere nella constatazione che la
connessione in https va a buon fine se e solo se la CA è la "Secure
Server Certification Authority": ho provato la connessione su 5 siti
che avevano questo ente e sono sempre riuscito a collegarmi. Viceversa
se l'ente è "
www.verisign.com/CPS
 Incorp.by Ref. LIABILITY LTD.(c)97
VeriSign" non riesco mai a collegarmi, pur essendo un ente "sicuro".
Ho pensato quindi che se la connessione funziona con la prima CA e non
con la seconda, significa che nel keystore dell'emulatore del
telefonino è presente solo la prima; e invece è presente anche la
seconda.
Proseguendo nei miei test sono poi riuscito a collegarmi ad alcuni
siti che hanno come CA l'ente "
www.verisign.com/CPS
 Incorp.by Ref.
LIABILITY LTD.(c)97 VeriSign", e la cosa mi è sembrata ancora più
strana, visto che tutte le precedenti prove avevano dato esito
negativo.
In sostanza riesco a collegarmi al sito
https://firmadigitale.trustitalia.it
 ma non al sito
https://www.trustitalia.it
, e la cosa strana è che entrambi hanno un
certificato il cui emittente è sempre "
www.verisign.com/CPS
 Incorp.by
Ref. LIABILITY LTD.(c)97 VeriSign". Il fatto che sia riuscito a
collegarmi al primo sito e non al secondo mi ha insinuato il dubbio
che i due certificati avessero qualche differenza tra di loro,
differenza che in effetti ho individuato andando a vedere nel
dettaglio le caratteristiche del certificato. Aprendo la finestra del
certificato e cliccando sul tab Dettagli, ho selezionato il campo
"Utilizzo avanzato chiave" e ho notato che il primo certificato
(quello di 
https://firmadigitale.trustitalia.it
) presenta anche i
valori "Autenticazione server" e "Autenticazione client", assenti nel
secondo certificato (quello di 
https://www.trustitalia.it
). Per
curiosità sono andato a vedere le caratteristiche del certificato del
sito 
https://digitalid.verisign.com
, a cui riesco ad accedere anche
attraverso l'emulatore del telefonino, e il cui emittente è "Secure
Server Certification Authority". E ho scoperto che il campo "Utilizzo
avanzato chiave" presenta come valori l'Autenticazione server e
l'Autenticazione client. Sembrerebbe quindi che l'emulatore del
telefonino riesca collegarsi a collegarsi a siti https il cui
certificato consenta l'autenticazione server e l'autenticazione
client.
C'è qualcuno che per caso sta affrontando le stesse problematiche ed è
disposto a darmi una mano?
Giovanni Regola

 ovviamente la Java Micro Edition. (MIDP e CLDC)
Tieni conto che quando passi dall'emulatore all'hardware non sono affatto
sicuro che funzioni, da quel che ricordo il modo in cui funziona (se
funziona)
dipende anche dall'hardware, nel senso che alcuni lo supportano, altri no.
Ciao!
Andrea