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

Langage Java Discussion :

Connexion en HTTPS en java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut Connexion en HTTPS en java
    Bonjour,

    J'ai développé une application en Java qui va chercher des informations sur un serveur en REST et qui récupère les informations en JSON avant de les traiter.
    Mon serveur web est développé en PHP.
    Jusque là mes connexions se faisaient en HTTP et ça marchait sans problème. On souhaite passer en HTTPS pour sécuriser le tout. J'ai donc acheté un certificat "officiel" (chez goDaddy), je l'ai installé sur mon serveur, pas de soucis.
    Quand je me connecte à mon serveur avec firefox, pas de soucis, ma connexion est bien en HTTPS et ça fonctionne.
    Dans mon java, j'ai modifié le code pour utiliser HttpsURLConnection sauf que j'ai une erreur quand j'essaie de me connecter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative DNS name matching monsite.monserver.com found.
    J'ai fait une petite classe java pour tester et je ne comprend pas si je tente d'accéder à https://www.google.com/ pas de soucis, mais si j'essaie de me connecter à mon site https://monsite.monserver.com/ j'ai l'erreur ci dessus.
    D'où ça vient ? Merci de votre aide.

    Voici mon code pour tester (trouvé sur le web)
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.security.cert.Certificate;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLPeerUnverifiedException;
     
    public class HttpsClient{
     
       public static void main(String[] args)
       {
            new HttpsClient().testIt();
       }
     
       private void testIt(){
     
          String https_url = "https://www.google.com/";
          URL url;
          try {
     
    	     url = new URL(https_url);
    	     HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
     
    	     //dumpl all cert info
    	     print_https_cert(con);
     
    	     //dump all the content
    	     print_content(con);
     
          } catch (MalformedURLException e) {
    	     e.printStackTrace();
          } catch (IOException e) {
    	     e.printStackTrace();
          }
     
       }
     
       private void print_https_cert(HttpsURLConnection con){
     
        if(con!=null){
     
          try {
     
    	System.out.println("Response Code : " + con.getResponseCode());
    	System.out.println("Cipher Suite : " + con.getCipherSuite());
    	System.out.println("\n");
     
    	Certificate[] certs = con.getServerCertificates();
    	for(Certificate cert : certs){
    	   System.out.println("Cert Type : " + cert.getType());
    	   System.out.println("Cert Hash Code : " + cert.hashCode());
    	   System.out.println("Cert Public Key Algorithm : "
                                        + cert.getPublicKey().getAlgorithm());
    	   System.out.println("Cert Public Key Format : "
                                        + cert.getPublicKey().getFormat());
    	   System.out.println("\n");
    	}
     
    	} catch (SSLPeerUnverifiedException e) {
    		e.printStackTrace();
    	} catch (IOException e){
    		e.printStackTrace();
    	}
     
         }
     
       }
     
       private void print_content(HttpsURLConnection con){
    	if(con!=null){
     
    	try {
     
    	   System.out.println("****** Content of the URL ********");
    	   BufferedReader br =
    		new BufferedReader(
    			new InputStreamReader(con.getInputStream()));
     
    	   String input;
     
    	   while ((input = br.readLine()) != null){
    	      System.out.println(input);
    	   }
    	   br.close();
     
    	} catch (IOException e) {
    	   e.printStackTrace();
    	}
     
           }
     
       }
     
    }

  2. #2
    Membre éclairé Avatar de supaplex
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2012
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Avril 2012
    Messages : 47
    Par défaut
    J'ai googlé rapidement ton erreur, j'ai trouvé cela :

    You also have to set a HostnameVerifier in the HttpsURLConnection. This has to verify that the hostname is accepted by your implementation.
    et le hostname en question dans ton cas est : monsite.monserver.com

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut
    OK merci je vais creuser du côté du HostnameVerifier...
    Mais ça ne m'explique pas pourquoi ça marche avec google et pas mon site

  4. #4
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Salut,

    Peux tu taper la commande suivante dans un invité Windows (en mode administrateur) et poster le résultat ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    keytool -list -v -keystore path/keystore/serveur -storepass tonMDP > c:/cert.txt
    cela va te générer un détail de ton certificat dans le fichier C:/cert.txt

    Pour le coup du HostnameVerifier, ce n'est pas une bonne pratique car tu vas complètement bypasser la vérification du nom de domaine. Du coup pour un truc qui se dit être sécurisé c'est quand même un comble..

    Cdt.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par jejeman Voir le message
    Quand je me connecte à mon serveur avec firefox, pas de soucis, ma connexion est bien en HTTPS et ça fonctionne.
    T'es sûr que ça fonctionne depuis toujours avec Firefox, et que tu avais pas eu, par hasard, au départ un gros warning que tu as fait disparaître pour toujours en cliquant sur "Ajouter une exception" ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut
    D'accord avec toi @Nico02, pas terrible pour la sécurité...
    @thelvin oui ça marche avec firefox et d'autres browser d'ailleurs, c'est un véritable certificat

    En cherchant sur le net j'ai trouvé que java 6 n'arrivait pas à décoder correctement les certificats de signature récente genre PKCS #1 SHA-256 With RSA Encryption
    Or c'est mon type de certificat.
    J'ai donc augmenté la platform pour passer à java 7 et là plus de problème, pas besoin de HostnameVerifier
    Je pense qu'il va être temps de dire à mes "vieux" clients qu'il faut oublier java 6...

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ah, oui. Le message d'erreur est vraiment pas clair, par contre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. POST HTTP en Java
    Par 0r3L dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 07/01/2010, 09h41
  2. connexion a ldap avec java
    Par himachalene dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 05/12/2006, 19h15
  3. Connexion avec HTTP HEADER
    Par breizhgen dans le forum Langage
    Réponses: 9
    Dernier message: 01/09/2006, 22h56
  4. Connexion serveur HTTP
    Par xwindoo dans le forum Développement
    Réponses: 4
    Dernier message: 24/08/2006, 18h40

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