Newsgroup: it.comp.java
Titolo: protocollo https e java.net.URL

Ciao,
e' la prima volta che posto su questo NG ; premetto anche che sono alle
prime armi e sono molto digiuna di networking... spero che non
giudicherete ridicola la mia richiesta...
Ebbene: il mio velleitario obiettivo sarebbe quello di scaricare dei
file (che utilizzo quotidianamente per il mio lavoro - sono
programmatore PL/SQL) da un sito in maniera automatica, per poi
imprtarli sul DB e lavorare su quei dati.
Risolto con un po' di pazienza (e molto divertimento) il problema
dell'import con l'utilizzo si java.sql, rimane ora la questione: come
collegarsi al sito e richiedere i file che mi occorrono?
Sto iniziando a fare qualche prova, e ho gia' notato che:
1) new URL("
https://yyy.it
") genera una MalformedURLException
2) se provo ad utilizzare http anziche' https non viene generata
l'eccezione, ma quando apro la connessione all'URL e cerco di leggerne
l'html il mio povero programmino rimane li' appeso... (d'altra parte,
prima di visualizzare la pagina col mio browser devo rispondere alla
domanda "Visualizzare gli oggetti non protetti?"... ha qualcosa a che
fare con questo, vero?)
Insomma, esistera' un modo per dialogare col server?
Anche perche' temo che fornirgli le mie username e password sara'
indispensabile, al momento del download dei file, ed io non ho la piu'
pallida idea su come cio' possa avvenire.
Vi ringrazio tutti quanti per aver letto sin qui; ogni consiglio e' ben
accetto, aspetto fiduciosa!
     Silvia
P.S.
Se può essevi utile, lavoro (o meglio pasticcio) sotto Unix col
j2sdk1.3.1
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ciao, Silvia!
Il giorno 16/03/2004 alle ore 12:06 hai scritto:
 S> 1) new URL("
https://yyy.it
") genera una MalformedURLException
Aggiungi questo all'inizio del programma:
java.security.Security.addProvider(new
com.sun.net.ssl.internal.ssl.Provider());
java.lang.System.setProperty("java.protocol.handler.pkgs",
"com.sun.net.ssl.internal.www.protocol");
 S> prima di visualizzare la pagina col mio browser devo rispondere alla
 S> domanda "Visualizzare gli oggetti non protetti?"... ha qualcosa a che
 S> fare con questo, vero?)
No. La connessione legge solo il testo html e non lo interpreta come fa un
browser.
 S> Anche perche' temo che fornirgli le mie username e password sara'
 S> indispensabile, al momento del download dei file, ed io non ho la piu'
 S> pallida idea su come cio' possa avvenire.
Dipende da come vengono gestiti gli accessi, cioe' se hai un form da
compilare per avere il login oppure se ti compare la finestrella del browser
che ti chiede username e password, se necessita di cookie per gestire le
sessioni, ecc. ecc. insomma non e' proprio semplicissimo ma si fa.
Bye
-- 
Marco Maccaferri
MaccaSoft - 
http://www.maccasoft.com

 Bye
Bye


Ciao, Silvia!
Il giorno 16/03/2004 alle ore 12:23 hai scritto:
 S> La seconda che hai detto.
In questo caso:
String en = "tuoUser:tuaPassword";
String authentication = new sun.misc.BASE64Encoder().encode(en.getBytes());
URL web = new URL(site);
HttpURLConnection con = (HttpURLConnection)web.openConnection();
con.setAllowUserInteraction(true);
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Basic " + authentication);
Se non necessita di altre amenita' (come cookie di sessione per esempio)
dovrebbe essere sufficiente.


 dovrebbe essere sufficiente.
Forse necessita...
Visto che ottengo un'amenita' del tipo
java.security.cert.CertificateException: Could not find trusted
certificate
javax.net.ssl.SSLHandshakeException:
java.security.cert.CertificateException: Could not find trusted
certificate
        at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.a(DashoA6275)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
        at com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA6275)
        at com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA6275)
        at com.sun.net.ssl.internal.ssl.SunJSSE_ax.a(DashoA6275)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.j(DashoA6275)
        at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(DashoA6275)
        at
sun.net.www.protocol.https.HttpsClient.afterConnect(DashoA6275)
        at
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(DashoA6275)
        at
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:574)
        at
com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl.getInputStream(DashoA6275)
        at ProvaUrl.main(ProvaUrl.java:53)
Caused by: java.security.cert.CertificateException: Could not find
trusted certificate
        at
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.a(DashoA6275)
        at
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(DashoA6275)
        at
com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(DashoA6275)
        ... 11 more
Se ne hai voglia attendo altri suggerimenti, altrimenti rimando 
questi tentativi a quando saro' un po' piu' pratica...
Grazie
   Silvia


Ciao, Silvia!
Il giorno 16/03/2004 alle ore 18:26 hai scritto:
 S> Forse necessita...
 S> Visto che ottengo un'amenita' del tipo
 S>
 S> java.security.cert.CertificateException: Could not find trusted
 S> certificate
L'errore significa che il certificato che protegge la connessione SSL non e'
stato firmato da un'autorita' sicura (come Verisign ad esempio). In teoria
quando ti colleghi con un browser ti dovrebbe segnalare che il certificato
e' valido ma non e' firmato da un'autorita' superiore e ti chiede se
accettarlo o meno.
Prova a connetterti con un sito ssl con certificato sicuro
(
https://www.verisign.com
 dovrebbe andare) per vedere se da lo stesso
problema. Magari installa una JVM piu' recente per essere sicura di avere i
certificati aggiornati.
Dovrebbe comunque essere possibile importare manualmente il certificato
nella JVM, ma in questo momento non ti saprei aiutare visto che non mi e'
mai capitato prima. Sul sito 
http://java.sun.com/
 dovresti comunque trovare
tutto quello che serve facendo qualche ricerca.
