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

Sécurité Java Discussion :

Erreur "SunCertPathBuilderException: unable to find valid certification path to request"


Sujet :

Sécurité Java

  1. #1
    Futur Membre du Club
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    7
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Erreur "SunCertPathBuilderException: unable to find valid certification path to request"
    Salem,
    je veux télécharger un fichier via une connexion "https" mais cela ne fonctionne pas.
    j'ai besoin de votre aide, mon code est le suivant, je veux savoir qu'est ce qu'il manque
    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
    import java.net.URL;
    import java.io.*;
    import javax.net.ssl.HttpsURLConnection;
     
    public class https
    {
      public static void main(String[] args)
      throws Exception
      {
        String httpsURL = "https://www.certification.tn/cgi-bin/pub/crl/cacrl.crl";
        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();
     
      }
    }
    et l'erreur indiqué est la suivante
    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:1520)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:182)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:176)
    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:511)
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:449)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:817)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1056)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1040)
    at sun.net.http://www.protocol.https.HttpsClien...lient.java:405)
    at sun.net.http://www.protocol.https.AbstractDe...ction.java:170)
    at sun.net.http://www.protocol.http.HttpURLConn...ction.java:981)
    at sun.net.http://www.protocol.https.HttpsURLCo...nImpl.java:234)
    at https.main(https.java:13)
    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
    Java Result: 1

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    C'est bon signe cette exception, ça veut dire que SSL et le principe de certificats en général marchent, youpi !!!!

    Alors sérieusement : tu souhaites te connecter via SSL à un site qui te fournit un certificat permettant (entre autres) d'identifier ledit server. Ce certificat est signé par une autorité de certification, qui elle même est signée par une autre autorité etc etc jusqu'à ce qu'on arrive à une autorité racine (signée par elle même). Pour assurer que tu fais confiance au certificat du server, lors de l'établissement de la connexion, la signature est vérifiée et on remonte jusqu'à l'autorité racine à laquelle tu dois faire confiance (les fameux truststores en Java).

    Par défaut quand tu installes Java, tu as tout une multitude d'autorités de certifications qui sont données qui sont des autorités que l'on peut a priori accepter comme fiables en toutes circonstance (verisign par exemple). Le problème ici est que ton certificat n'appartient pas (directement ou indirectement) à une de ces autorités, ou qu'il manque des maillons pour y remonter dans les certificats que tu connais et à qui tu fais confiance.

    Passons maintenant aux solutions possible :
    • tu ajoutes toute la chaine de certificats dans ton truststore (le plus propre et sûr). Voici la documentation pour créer un keystore/truststore (un truststore est en fait la même chose qu'un keystore mais ne contient que des clefs publiques, tout ça n'est qu'une question de vocabulaire). La documentation explique tout et donne des exemples à la fin.
    • tu ajoutes le certificat du server dans ton truststore donc comme ça tu lui feras confiance. Mais quand il sera périmé, il faudra rajouter le nouveau, et ainsi de suite
    • tu dis à Java d'accepter tous les certificats. C'est moche, pas sûr (on perd la moitié des avantages de SSL à savoir l'identification) et je le déconseille vivement en production (pour tester c'est ok, mais pas après). Je ne devrais pas, mais voilà un lien qui dit comment faire.

    Pour résumer, les PKI c'est pas facile à aborder mais il faut faire l'effort de comprendre pour voir l'intérêt et les enjeux. La solution la plus simple en matiére de sécurité est rarement la meilleure !

    A plus

  3. #3
    Membre du Club
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2010
    Messages : 61
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup.

    J'ai essayé avec le 3ème point pour tester et ça marche nickel.
    A noter que je l'ai placer dans mon main pour tester.

    J'ai parcouru très rapidement la doc pour le point 1 et ça m'a l'air plutôt compliqué mais je m'y attaquerais très prochaine pour que je puisse déployer en production.

    Merci encore pour ses informations qui m'ont été très précieuse !

    Cordialement,

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Testeur Web
    Inscrit en
    Mars 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Testeur Web

    Informations forums :
    Inscription : Mars 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    J'ai le même problème de certificat quand je test l'envoi de mail via smtp.gmail.com depusi un serveur jenkins sous windows 7.
    Quelqu'un a un solution ?

  5. #5
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2016
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2016
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    j'ai le même problème sous talend (connexion de talend à un web service), quelqu'un aurait des idées

Discussions similaires

  1. Erreur : Unable to find a javac compiler
    Par fk04 dans le forum ANT
    Réponses: 4
    Dernier message: 05/03/2011, 23h00
  2. Réponses: 3
    Dernier message: 09/02/2010, 17h29
  3. [PHP 5.2] Erreur : Unable to find the wrapper "http"
    Par Troopers dans le forum Langage
    Réponses: 2
    Dernier message: 23/01/2009, 11h11
  4. Réponses: 1
    Dernier message: 02/08/2008, 12h03
  5. Input - Form non validé - Unable to find
    Par ToTo1234 dans le forum Struts 1
    Réponses: 2
    Dernier message: 15/02/2008, 10h23

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