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

Développement Web en Java Discussion :

Connection HTTPS via application Java Web


Sujet :

Développement Web en Java

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut Connection HTTPS via application Java Web
    Bonjour,

    J'ai un petit soucis pour me connecter à un serveur HTTPS avec mon appli.
    Alors voilà la situation, mon application doit se connecter à un serveur HTTPS pour récupérer une image. L'accès à cette image est dipo en HTTP et en HTTPS avec certificat.

    En HTTP tout se passe bien, y'a pas de problème. Mais en HTTPS la récupération du flux plante et me renvoi l'erreur "java.net.UnknownHostException" sur la racine de l'adresse c'est à dire le nom de domaine.

    Lorsque je fais l'appel à cette adresse via firefox, le serveur Apache distant me renvoi une erreur "403 accès interdit" donc je pense que mon problème vient de là car normalement l'hôte devrait envoyer le certificat à ce moment là non?

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Personne pour m'aider, ou c'est que mon problème n'est pas clair?!

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Je viens d'essayer de récupérer une image sur une site HTTPS sans certificats et j'ai toujours la même erreur. Voici le correspondant, j'espère que quelqu'un pourras m'aiguiller.

    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
     
    public static void main (String[] args){
    try{
            System.getProperties().put("javax.net.debug", "all" );
    	System.setProperty("https.proxyHost", "xxx.xxx.xx" );
    	System.setProperty("https.proxyUserName", m_User);
    	System.setProperty("https.proxyPassword", m_Pwd);
     
    	URL myUrl = new URL("https://www.cic.fr/fr/specif/images/logo/h-logo.jpg");
    	HttpsURLConnection conn = (HttpsURLConnection)myUrl.openConnection();
     
    	conn.setDoInput(true);
    	conn.setAllowUserInteraction(true);
    	conn.setUseCaches(false);
            conn.setDoOutput(true);
            conn.setRequestMethod("POST"); 
            conn.connect();
    	BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
    	do{
    		String ligne=br.readLine();
    		if(ligne==null)break;
    		System.out.println(ligne);
    	}while(true);
     
    }catch(Exception ex){
        System.err.println(ex);
    }
    }

  4. #4
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    System.setProperty("https.proxyHost", "xxx.xxx.xx" );
    System.setProperty("http.proxyUserName", m_User);
    System.setProperty("http.proxyPassword", m_Pwd);
    Pourquoi tu reviens en http.



    Es-tu en authentification réciproque ?
    Si oui tu doit avoir un keyStore et un trutStore.
    Ton KeySort est un JKS, et ton trutStore c'est souvant ton (cacert), bien qu'on puisse avoir un JKS qui sert de trutStore et de KeyStroe, mais il faut le paramétrer.

    Vérifie que tu a l’autorité de certification du serveur pour ton trutStore.


    Dit moi si tu y arrive.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Oups le boulet j'avais pas vu que j'avais oublié le "s"

    Je viens de refaire un test mais ça ne change rien toujours la même erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.net.UnknownHostException: www.cic.fr
    Dans l'exemple où j'ai fourni mon code il n'y a pas d'authentification réciproque car pas de certificat pour le moment (c'est juste pour tester mon code avec un site https pour le moment, mais à terme il y aura une authentification réciproque avec gestion de certificats)

  6. #6
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    mais si tu n'a pas de certif, tu ne peux pas te connecter en https.

    https = http + ssl(certif).

    Ou alors j'ai mal compris
    Dans l'exemple où j'ai fourni mon code il n'y a pas d'authentification réciproque car pas de certificat pour le moment (c'est juste pour tester mon code avec un site https pour le moment, mais à terme il y aura une authentification réciproque avec gestion de certificats)

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Quand je vais sur le site avec IE ou firefox je n'ai pas de certificat à accepter donc je me suis dis qu'il n'y avait pas de certificat mais je me suis peut-être trompé.

  8. #8
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    Je voudrais pas dire de bêtise, mais je crois que ton Browser se charge de s'authentifier et télécharger les certificats. Pour ff, dans option, avancé, chiffrement, SSL. Si tu le décoches, tu peux plus accéder au sites HTTPS.

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Pour ff je pense aussi que c'est automatique, mais IE me demande bien pour certains sites de télécharger le certificat mais pas pour le site du CIC.

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Non je ne suis pas en authentification réciproque, mais j'ai créé mon keyStore (fichier jks) avec KeyTool IUI (interface graphique de KeyTool).

    L'autorité de certification de mon certificat ne fait pas partie du cacert, donc je l'ai précisé de la façon suivante dans mon code :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    try {
         ImageUrl = new URL("https://xxx.xxx.xx/xxxxxxx/MyImage.png");
         System.getProperties().put("javax.net.debug", "all" );
     
         TrustManager[] trustManager = new TrustManager[]{
    			new X509TrustManager() {
    			       public boolean checkClientTrusted(java.security.cert.X509Certificate[] chain){
    				return true;
    			}
    			public boolean isServerTrusted(java.security.cert.X509Certificate[] chain){
    				return true;
    			}
    			public boolean isClientTrusted(java.security.cert.X509Certificate[] chain){
    				return true;
    			}
    			public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    				return null;
    			}
    			public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
    			public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
    		}
     
    	};		
     
            //Connexion au Proxy
    	Properties props = System.getProperties();
    	props.put("https.proxySet", "true");
    	props.put("https.proxyHost", sNomProxy);
    	props.put("https.proxyPort", String.valueOf(iPortProxy));
    	props.put("https.proxyUserName", sUser);
    	props.put("https.proxyPassword", sPwd);		
            System.setProperties(props);
     
    	char[] keystorepass = "xxxx".toCharArray();	
    	File keystoreFile   = new File("D:\\test.jks");
    	KeyStore keyStore   = KeyStore.getInstance("JKS");
    	keyStore.load(new FileInputStream(keystoreFile), keystorepass);
    	KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    	keyManagerFactory.init(keyStore, keystorepass);
    	KeyManager[] keyManager = keyManagerFactory.getKeyManagers();
     
     
    	SSLContext sslContext = SSLContext.getInstance("TLS");
    	sslContext.init(keyManager, trustManager, new SecureRandom());	
     
    	//Ouverture de la connexion
    	connect = (HttpsURLConnection)ImageUrl.openConnection();
            connect.setUseCaches(false);
    	connect.setDoOutput(true);
     
    	try {
    		// Get the response.
    		iStream = ImageUrl.openStream(); 
    	} catch (Exception e) {
                    System.out.println(e);
            }
    catch (Exception e) {
         System.out.println(e);
    }
    Si quelqu'un voit d'où peux provenir l'erreur mon problème rien qu'à la lecture de mon code! J'espère que vous pourrez m'éclairer un peu car là je commence à ne plus savoir ou aller.

    Je n'ai pas encore tester ce code chez moi en dehors du proxy, mais je vais essayer de faire le test avant la fin de la semaine, peut-être que le problème vient de là mais je ne pense pas car vu que la récupération d'une image sur un site http fonctionne correctement avec les mêmes paramètres du proxy.

    Merci d'avance

  11. #11
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    Tu ne peux pas faire une authentification tout seul.
    Ton KeyStore ne sert à rien si le serveur ne le connais pas.

    Et surtout
    Vérifie que tu a l’autorité de certification du serveur pour ton trutStore.

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Salut,

    J'ai enfin résolu mon problème de "java.net.UnknownHostException" ça venait de l'utilisation d'URLConnection pour créer une HTTPSConnection.

    Maintenant ça fonctionne j'arrive à récupérer une image en https sur le serveur distant. Maintenant ce que je comprend pas trop c'est que je n'ai pas besoin de d'utiliser mon fichier jks pour récupérer l'image.
    Ce que je veux au final c'est une double authentification donc comment mettre ça en place?

    Merci

  13. #13
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Salut à tous,

    Je relance ce sujet car j'ai avancé dessus et que je me pose une question au niveau de la sécurité et je suis un peu perdu à vrai dire!!

    Pour tester j'ai un serveur Apache avec mod_ssl ou la double authentification est mise en place. J'ai créé les certificats client et serveur en auto-signés.
    La connexion fonctionne bien pas de soucis à ce niveau là, l'authentification fonctionne et j'arrive à récupérer mon image.

    Mais j'ai une question au niveau de la sécurité, je ne vois pas en quoi la double authentification permet de se prémunir d'une attaque de type Man In The Middle par exemple.

    Je pense qu'un moyen "simple" d'éviter ces attaques serait dans mon code de vérifier la chaine de certification, mais après toutes mes lectures je n'ai pas compris comment faire pouvez-vous m'indiquer des sources "claires"?!!
    Y'a t'il d'autres actions au niveau de mon appli que je doit mettre en place pour être certain que je discute bien avec le serveur voulu?

    Merci de votre aide

  14. #14
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Par défaut
    Personne??!

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

Discussions similaires

  1. le chemin d'une application java (web)
    Par jad_jad dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 15/09/2008, 14h16
  2. [OC4J] Migration d'une application Java web de Tomcat vers OC4J
    Par Alpha2008 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 23/03/2008, 14h40
  3. Application Java Web Start
    Par FranT dans le forum NetBeans
    Réponses: 1
    Dernier message: 26/09/2007, 13h55
  4. Problème lien html via application java
    Par dumasan dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 29/06/2007, 15h47
  5. Réponses: 1
    Dernier message: 23/05/2007, 12h47

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