IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

Connexion https pour récupérer un fichier sur serveur web


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Connexion https pour récupérer un fichier sur serveur web
    Hello et bonne année !
    Je cherche à récupérer un fichier sur un serveur https (ma banque) qui requiert un id de session fourni via cookie. J'ai "écouté" les requêtes et réponses http via le plugin "Temper Data" de firefox. Avec ces données je cherche à re créer la meme requête ds mon code java pour obtenir le cookie de session.
    Voici mon code java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    DefaultHttpClient httpclient = new DefaultHttpClient();
    String uri = "https://particuliers.secure.lcl.fr/everest/UWBI/UWBIAccueil?DEST=IDENTIFICATION";
    HttpPost httpost = new HttpPost(uri);
     
    List <NameValuePair> nvps = new ArrayList <NameValuePair>();
    nvps.add(new BasicNameValuePair("agenceId", "5300"));
    nvps.add(new BasicNameValuePair("compteId", "549011f"));
    nvps.add(new BasicNameValuePair("CodeId", "6G72qs"));
    nvps.add(new BasicNameValuePair("x", "26"));
    nvps.add(new BasicNameValuePair("y", "4"));
     
    httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
     
    httpost.addHeader("Host","particuliers.secure.lcl.fr");
    httpost.addHeader("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)");
    httpost.addHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    httpost.addHeader("Accept-Language","fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3");
    httpost.addHeader("Accept-Encoding","gzip,deflate");
    httpost.addHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
    httpost.addHeader("Keep-Alive","300");
    httpost.addHeader("Connection","keep-alive");
    httpost.addHeader("Referer","https://particuliers.secure.lcl.fr/index.html");
    httpost.addHeader("Cookie","aklBlocage=NON; aklGeneralisation=NON; aklVersionActivex=1.2.39; xtan=-; xtant=1");
     
    HttpResponse response = httpclient.execute(httpost);
    et voici la requête entre firefox et la banque (id et mot de passe maquillés ) que je cherche à reproduire :

    19:48:07.424[637ms][total 670ms] État: 200[OK]
    POST
    https://particuliers.secure.lcl.fr/e...IDENTIFICATION
    Indicateurs
    chargement[LOAD_DOCUMENT_URI LOAD_INITIAL_DOCUMENT_URI ]
    Taille contenu[-1]
    Type Mime[text/html]
    En-têtes requête:
    Host[particuliers.secure.lcl.fr]
    User-Agent[Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)]
    Accept[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8]
    Accept-Language[fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3]
    Accept-Encoding[gzip,deflate]
    Accept-Charset[ISO-8859-1,utf-8;q=0.7,*;q=0.7]
    Keep-Alive[300]
    Connection[keep-alive]
    Referer[https://particuliers.secure.lcl.fr/index.html]
    Cookie[aklBlocage=NON; aklGeneralisation=NON; aklVersionActivex=1.2.39; xtan=-; xtant=1]
    Données POST:
    agenceId[2945]
    compteId[324363]
    CodeId[354120]
    x[43]
    y[4]
    En-têtes réponse:
    Date[Sat, 02 Jan 2010 18:48:36 GMT]
    Server[Apache]
    Pragma[No-cache]
    Cache-Control[no-cache]
    Content-Type[text/html;charset=ISO-8859-1]
    Content-Language[en]
    X-Cache[MISS from particuliers.secure.lcl.fr]
    Via[1.1 particuliers.secure.lcl.fr]
    Set-Cookie[wasnatib2-2Node01Cell_wasnatib2-2Node01_cliclisa4=0006L6d4v-9ZiBLpn:-1; Path=/; Domain=.secure.lcl.fr; Secure]
    Keep-Alive[timeout=30, max=1000]
    Connection[Keep-Alive]
    Transfer-Encoding[chunked]
    Sauf que j'obtiens un message d'erreur "Peer not authenticated" :
    Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:339)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at org.apache.http.examples.client.LclConnectionTest2.main(LclConnectionTest2.java:122)
    ==> c'est comme si la banque refusait de monter une connexion https ???? des idées ? quelqu'un à déjà fait ça ? (les tuto sont plutot rares sur ce sujet...)

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 14
    Points : 11
    Points
    11
    Par défaut qcq info complémentaires
    j'ai fait quelques tests qui précisent le problème.
    en effet, si je tente une requête sur un autre site en https, le code suivant fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet("https://mail.google.com"); 
    System.out.println("executing request " + httpget.getURI());
    ResponseHandler<String> responseHandler = new BasicResponseHandler();
    String responseBody = httpclient.execute(httpget, responseHandler); 
    System.out.println(responseBody);
    et je récupère ça dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    executing request https://mail.google.com
    <html><head><meta http-equiv="Refresh" content="0;URL=https://mail.google.com/mail/" /></head><body><script type="text/javascript" language="javascript"><!--
    location.replace("https://mail.google.com/mail/")
    --></script></body></html>
    et si j'utilie l'url suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HttpGet httpget = new HttpGet("https://particuliers.secure.lcl.fr/index.html");
    j'obtiens un erreur (alors que l'url fonctionne bien ds un browser...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    	at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source)
    	at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    	at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:339)
    	at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
    	at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
    	at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:731)
    	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:709)
    	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:700)
    	at org.apache.http.examples.client.ClientWithResponseHandler.main(ClientWithResponseHandler.java:55)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 9
    Points
    9
    Par défaut Pas la même session SSL !
    Hello benibur

    Il ne suffit pas d'avoir la même session HTTP dans ton browser et dans tes requêtes par Java, les sessions SSL restent différentes. Notamment, elles ont des paires clé publique / clé privée générées dans les premiers échanges SSL (handshake, challenge, puis génération) qui sont différentes, et donc les deux flux HTTP sont encryptés différemment. Sans doute qu'en reproduisant aussi en Java les requêtes non SSL de ton browser qui te loggent dans ta banque, ça a une chance de marcher...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Salut MaDProph !
    On se connais non ? :-)
    Je crains de ne pas avoir compris ta remarque car il me semblait que mon deuxième post décrit des tests qui devraient couvrir ce point.
    En effet, dans ce test ma requête get sur https://mail.google.com fonctionne,
    alors que celle sur https://particuliers.secure.lcl.fr/index.html (requête simple qui n'est pas une requête de connexion mais simplement la demande de la page html où l'utilisateur saisi login et mot de passe), ne fonctionne pas.

    Quelle différence entre demander la page "https://mail.google.com" et "https://particuliers.secure.lcl.fr/index.html" ?

    => est ce que j'ai mal compris ta remarque ??

    A noter que ma requête sur "http://www.lcl.com/fr/" fonctionne bien.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 9
    Points
    9
    Par défaut
    Non, c'est moi qui croyait que tu étais déjà loggé dans le browser, c'est vrai que la différence de comportement est étrange.

    Tu peux essayer de copier ton exception dans google et voir ce que d'autres en disent.

    Notamment, le même problème est mentionné à http://forums.sun.com/thread.jspa?threadID=300242 .

    Une solution mentionnée mais non garantie est d'importer le certificat de ta banque dans les trusted certs de ta JVM avec l'outil keytool. Mais ça n'expliquerait toujours pas la différence de comportement. Je continue à réfléchir...

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5
    Points : 9
    Points
    9
    Par défaut
    Voir aussi
    http://www.houseoffusion.com/groups/...threadid:48564
    http://www.javalobby.org/java/forums/t10611.html
    http://www.talkingtree.com/blog/inde...A3EECD842DB576

    J'ai vérifié que le certificat de ta banque n'est pas expiré (heureusement)...

    S'il s'agissait d'algorithmes de cryptage non supportés, une autre exception serait levée je suppose...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    ok dak, merci pour ces pistes, je bosse sur ce sujet demain, je vous tiens au courant Mr MaDProph !

    Stay tuned !

    Ben

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/04/2013, 10h49
  2. Réponses: 6
    Dernier message: 30/06/2010, 18h34
  3. Réponses: 3
    Dernier message: 21/02/2009, 19h44
  4. [débutant] Ecriture fichier sur serveur web
    Par SPACHFR dans le forum Applets
    Réponses: 8
    Dernier message: 19/02/2009, 12h07
  5. Réponses: 2
    Dernier message: 02/04/2007, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo