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

Entrée/Sortie Java Discussion :

Recuperer un fichier à partir d'un serveur distant via HTTPS?


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 60
    Points
    60
    Par défaut Recuperer un fichier à partir d'un serveur distant via HTTPS?
    salut,

    est il possible de se connecter a un serveur distant ( File System quelqconque ) en HTTPS ( obligé ! ) afin de récupérer plusieurs fichiers de données..et bien sur en java?

    si Oui, quels conditions doievent etre satisfaite pour que cela puisse etre possible( login/password, securite, ...etc)

    merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99

  3. #3
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 60
    Points
    60
    Par défaut
    Je ne trouve pas d'exemples ni des tutoriaux ici !! en plus sur google c'est pas tres bien précis ...aurais tu un bon lien?

    merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Cela répond à ta question :

    oui il est possible de se connecter à distance à un serveur en HTTPS en java et de récupérer des données.

    Après si tu veux une réponse plus précise, il va falloir développer ta question

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99

  6. #6
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 60
    Points
    60
    Par défaut
    en effet j'ai essaye de tester un exemple mais j'ai obtenu l'exception suivante

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1591)
    	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
    	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
    	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
    	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
    	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
    	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
    	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
    	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
    	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
    	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1107)
    	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:405)
    	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:977)
    	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
    	at HTTPSConnector.main(HTTPSConnector.java:32)
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
    	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
    	at sun.security.validator.Validator.validate(Validator.java:218)
    	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
    	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
    	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
    	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
    	... 12 more
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
    	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
    	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
    	... 18 more

    voiçi l'exemple:

    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
    26
    27
     
     
    mport java.net.URL;
    import java.io.*;
    import javax.net.ssl.HttpsURLConnection;
     
    public class HTTPSConnector
    {
      public static void main(String[] args)
      throws Exception
      {
        String httpsURL = "https://your.https.url.here/";
        URL myurl = new URL(httpsURL);
        HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
        InputStream ins = con.getInputStream();
        InputStreamReader isr=new InputStreamReader(ins);
        BufferedReader in =new BufferedReader(isr);
     
        String inputLine;
     
        while ((inputLine = in.readLine()) != null)
            System.out.println(inputLine);
     
        in.close();
     
      }
    }
    il parait qu'il faut injecter le certificat dans la connection ( je pense) alors comment palier cela?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Essaye cet exemple.

    Notes qu'avant tout échange en HTTPS tu devras passer par une connexion HTTP pour récupérer le certificat et le stocker dans le système.

    Tu peux utiliser pour cela keytool.

    Si tu veux procéder à la validation dans l'application même, c'est plus compliqué.

    Il faudra procéder comme suit :

    crééer un SSLContext
    passer un tableau de Key Managers (null si celui par défaut) et un tableau de Trust Managers (ici du X509TrustManager, null si celui par défaut) et un SecureRandom (null si par défaut) à la méthode init du context
    appeler SSLContext.getSocketFactory pour obtenir une factory
    faire un setDefaultSSLSocketFactory sur la classe HttpURLConnection (AVANT d'instancier une connection)

    Pour gérer des certificats particulier (ou tous les certificats) tu peux redéfinir ton propre Trust Manager.

  8. #8
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 60
    Points
    60
    Par défaut
    deja en tentant d'acceder aui site depuis IE je vois ces lignes affichées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
     Le certificat de sécurité de ce site Web présente un problème. 
     
     
     Le certificat de sécurité présenté par ce site Web n’a pas été émis par une autorité de certification approuvée.
    Le certificat de sécurité présenté par ce site Web a expiré ou n’est pas encore valide.
    Le certificat de sécurité présenté par ce site Web a été émis pour une autre adresse de site Web.

    je clique sur " Poursuivre avec ce site Web (non recommandé). " pour acceder au site...;est ce deja un obstacle pour qu'un code java puisse y acceder?

    merci

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    C'est toi qui défini ce qui est valide ou pas...

  10. #10
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Mon soucis actuel c'est la connexion !!
    en effet il parait que j'arrive a recuperer le certificat mais dans mon code quand j'essaie de em connecter ca foire...en effet apres avoir accepter le certificat je dois passer par une saisie d'un login et mot de passe pour que je puisse me connecter au site! ...sauf que je reçois l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Exception in thread "main" java.io.IOException: Server returned HTTP response code: 401 for URL: https://xxxxxx:1443/
    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1241)
    	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
    	at HTTPSConnector.HTTPSread(HTTPSConnector.java:102)
    	at HTTPSConnector.main(HTTPSConnector.java:117)

    pôurtant dans mon code j'ai ce qui suit :

    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
    26
    27
    28
    29
    30
    31
    32
     
     
    	public void HTTPSread()throws Exception
    	{
    		 String httpsURL = "https://xxxxxxx:1443";
    		 URL myurl = new URL(httpsURL);	 		 
    		 String filename = System.getProperty("java.home")+ "/lib/security/jssecacerts".replace('/', File.separatorChar);
    		 System.out.println(filename);
    		 String password = "changeit";
    		 System.setProperty("javax.net.ssl.trustStore",filename);
    		 System.setProperty("javax.net.ssl.trustStorePassword",password);		 
     
    		 HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
    		 String authentication = "monlogin" + ":" + "monpassword";
             String encodedPassword = "Basic " + new sun.misc.BASE64Encoder().encode(authentication.getBytes());
             con.setRequestProperty("Proxy-Authorization", encodedPassword);
    		// con.setAllowUserInteraction(true);
             con.setReadTimeout(3600000);
    		 con.setConnectTimeout(3600000);
    		 con.setRequestMethod("GET");	  
    		// con.setDoInput(true);
    		//con.connect();
    		 InputStream ins = con.getInputStream();
    		 InputStreamReader isr=new InputStreamReader(ins);
    		 BufferedReader in =new BufferedReader(isr);
     
    		 String inputLine;
    		 while ((inputLine = in.readLine()) != null)
    		 System.out.println(inputLine);
    		 in.close();
     
    	}
    et voila!! malgre tout ca et malgre que je peux recuperer le certificat je reçois ce message !!

    comment dois je faire pour me connecter avec mon compte finalement!

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Quelle ligne pose problème exactement ?
    (il n'y a pas de numéro de ligne dans l'extrait de code)

    Je suppose que c'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream ins = con.getInputStream();
    au vu du message...

    Mais pourquoi la ligne qui réalise la connexion est en commentaire ?

  12. #12
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 60
    Points
    60
    Par défaut
    Oui effectivement c'est cette ligne !!!
    pour le connect c'est une erreur c'est pas commenté
    je en comprends pas pourquoi la connexion ne se passe pas bien alors qu'au navigateur tout va bien avec le bon compte( login/password) ....et le certificat est bien la present et validé il parait

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Je constate également que tu proposes de t'authentifier auprès du proxy, mais la réponse est de type 401, pas 407.


    Cf le paragraphe 14.47 de la RFC 2616.

    Tu dois peut-être ajouter un paramètre supplémentaire (en plus de l'authentification proxy).

  14. #14
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 60
    Points
    60
    Par défaut
    Oui j'ai bien un http status 401 qui est retourné ce qui correspond a un probleme d'authentification je suppose !!

  15. #15
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 60
    Points
    60
    Par défaut
    Ok c'est bon il s'agit de mettre "Authorization" au lieu de "Proxy-Authorization" et ca passe j'arrive a acceder aux pages du site...

    par contre ya t il une restriction sur les format de fichiers que ej peux recuperer?
    pourrais je recuperer des rar, des war, des doc? etc?

    merci

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    A priori il n'y a pas de restriction, sauf particularité de la configuration du serveur...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/10/2014, 12h21
  2. transfert de fichier à partir d'un serveur BDD distant
    Par Mustang.ensi dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 29/11/2010, 11h52
  3. Réponses: 1
    Dernier message: 31/03/2010, 23h18
  4. Réponses: 4
    Dernier message: 29/10/2008, 14h44
  5. Réponses: 9
    Dernier message: 04/05/2007, 11h04

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