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 :

Transfert de fichier depuis un poste client en HTTPS


Sujet :

API standards et tierces Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Transfert de fichier depuis un poste client en HTTPS
    Bonjour,

    Je développe une appli J2EE qui est déployée sur un serveur JBoss4.2.3. Cette appli demande une authentification (login/password).
    Mais j'ai aussi un programme client qui doit envoyer des fichiers vers mon appli pour qu'elle les traite, sans s'authentifier.

    J'ai conçu une servlet qui ne demande pas d'authetification particulière et j'ai fait l'envoi des fichiers en faisant le post d'un form, en utilisant le package org.apache.http :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FileBody bin = new FileBody(new File(filePath), "application/octet-stream");
    reqEntity.addPart(fileId, bin);
    HttpPost httppost = new HttpPost(url);
    httppost.setEntity(reqEntity);
     
    HttpClient httpclient = DefaultHttpClient();
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity resEntity = response.getEntity();

    (fileId est un identifiant unique)

    Ça marche bien en HTTP. Mais on l'a demandé que ça fonctionne en HTTPS.
    J'ai regardé sur le net, et j'ai trouvé cette solution pour l'initialisation du HttpClient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SSLContext sslContext = SSLContext.getInstance("SSL");
    sslContext.init(null, new TrustManager[] { new MyTrustManager() }, new SecureRandom());
    SSLSocketFactory sf = new SSLSocketFactory(sslContext);
    Scheme httpsScheme = new Scheme("https", 443, sf);
    SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(httpsScheme);
    ClientConnectionManager cm = new BasicClientConnectionManager(schemeRegistry);
    HttpClient httpClient = new DefaultHttpClient(cm);

    avec MyTrustManager qui accepte tous les certificats(d'après ce que j'ai pu comprendre...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class MyTrustManager implements X509TrustManager{
     
    	public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    	}
     
    	public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    	}
     
    	public X509Certificate[] getAcceptedIssuers() {
    		return null;
    	}
    }
    Le problème c'est que cette solution ne marche pas. Les paramètres sont bien transmis à la servlet mais pas le contenu du fichier.

    Est-ce que quelqu'un pourrait me dire ce qui ne va pas dans ce code? Ou me donner un autre moyen de faire ce transfert?
    J'avais pensé à transférer les fichiers par FTP et appeler ensuite ma servlet mais ça ferait 2 étapes, pas forcément synchronisées, non?

    Merci!

    Fabien

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Pour utiliser le SSL, tu as déjà tout dans apache-commons-httpclient. Le guide est ici avec des exemples. Ce que tu peux faire est de générer manuellement un certificat SSL auto-signé, et de l'utiliser dans ton code. Tu peux apprendre à générer le certificat ici.

    Si tu désires passer par un FTP, tu peux utiliser le protocole FTPS (FTP + SSL). Pour le développement tu peux utiliser apache-commons-net (un exemple de code ici).

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ouais enfin, si les paramètres passent bien mais que le fichier n'est pas transmis, c'est le signe d'un élément perturbateur au milieu.

    Le serveur est probablement protégé par un firewall, un load balancer, un déchiffreur SSL ou on appelle ça comme on veut, mais quelque chose. Et ce quelque chose modifie les requêtes reçues et les fait suivre à la servlet. Sauf qu'il fait ça bien en général, mais il ne sait pas gérer les fichiers attachés.

    Il faut identifier ce quelque chose, l'enlever, prouvant ainsi que tout est bien de sa faute, et de là chercher comment le corriger.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [PHP 5.6] Ouverture d'un fichier Excel distant depuis un poste client
    Par Florian54 dans le forum Langage
    Réponses: 4
    Dernier message: 26/11/2015, 11h21
  2. Réponses: 12
    Dernier message: 11/08/2014, 12h13
  3. transfert du fichier depuis le client vers le serveur
    Par imenboukhris dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 23/04/2014, 11h45
  4. Réponses: 4
    Dernier message: 30/11/2006, 16h22
  5. Copier un fichier depuis le poste client vers le serveur
    Par n@n¤u dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 31/07/2006, 15h28

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