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

Java Discussion :

javax.net.ssl.SSLHandshakeException: null cert chain


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut javax.net.ssl.SSLHandshakeException: null cert chain
    Bonjour,

    J'ai un souci avec mon serveur WEB que j'essaie de "SSLiser", j'ai créé un keystore exprès pour le certificat de la CA (CA.cer) que j'ai d'ailleurs importer dedans.

    J'ai également importé sur mon navigateur web un certificat client(client.cer) venant de cette même CA mais j'obtiens le message suivant lorsque le client tente d'accéder à mon serveur :

    javax.net.ssl.SSLHandshakeException: null cert chain

    Bien entendu je force le client à s'authentifier avec son certificat.

    Quelqu'un a t'il eu un problème similaire ? Je ne vois pas pourquoi il me dit que mon certificat est null ?

    Merci d'avances pour vos réponses.

    Narglix

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

    quand tu dis que tu as importé le certificat (fichier .cer) dans ton navigateur, c'est vraiment ce que tu as fait ou tu as importé le .p12 (ou .pfx histoire d'ajouter de la confusion dans les noms...) ?

    Pour faire une authentification client, il faut plus que le certificat du côté client, il faut aussi la clef privée. Ton navigateur ne devrait pas envoyer le certificat si il n'a pas la clef privée asssociée (comment pourrait-il signer et prouver son identité sans la clef privée d'ailleurs ?)

    Vérifie donc si tu as bien le fichier avec clef privée dans ton navigateur pour le certificat client.

    Sinon on pourrait voir le code qui donne ton erreur ?

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut re
    Non c'est bien un .cer que j'obtiens en faisait un request certificate sur le site de la CA.

    Le code du serveur est le suivant :

    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
     //Récupération d'une instance d'un keystore JKS
                KeyStore ksKeys = KeyStore.getInstance("JKS");
                KeyStore ksCA = KeyStore.getInstance("JKS");
                //le fichier se trouve au même emplacement que le programme
                ksKeys.load(new FileInputStream("MyKeystoreForKeys.jks"),
                                                          "password".toCharArray());
                ksCA.load(new FileInputStream("MyKeystoreForCA.jks"),
                                                          "password".toCharArray());
     
                //Création du magasin de keyManager du type SunX509
                KeyManagerFactory kmfKey = KeyManagerFactory.getInstance("SunX509");
                kmfKey.init(ksKeys,"keyPassword".toCharArray());
     
                //Création du magasin de TrustManager du type SunX509
                TrustManagerFactory kmfCA = TrustManagerFactory.getInstance("SunX509");
                kmfCA.init(ksCA);
     
                //Création du contexte
                SSLContext sslContext = SSLContext.getInstance("SSLv3");
                sslContext.init(kmfKey.getKeyManagers(),kmfCA.getTrustManagers(), null);
     
     
                //Initialisation du magasin ServerSocket
                ServerSocketFactory ssf = sslContext.getServerSocketFactory();
                //Création du serveur SSL sur le port voulu
                server = (SSLServerSocket)ssf.createServerSocket(PORT);
                server.setNeedClientAuth(true)
    ;

  4. #4
    Invité
    Invité(e)
    Par défaut
    OK, le .cer ne suffit pas pour authentifier le client, il faut qu'il ait aussi la clef privée (ou alors la CA nomme un fichier avec clef privée .cer, ce qui est un abus qui prete à confusion)...
    Quel navigateur utilises-tu ? dans firefox si tu as une clef privée, tu devrias le voir dans l'onglet "vos certificats", sinon il devrait être dans la partie "personnes". avec IE je ne sais plus mais ça se met je crois dans le magasin de certificats de l'utilisateur courant et tu peux voir si tu possèdes la clef privée associée, car il doit l'écrire quand tu choisis le certificat
    Tu n'as reçu que le .cedr de ta CA ?, c'est quoi comme CA ?

    Sinon à tout hasard. Dans ton key manager, tu as bien le certificat ET la clef privée du server ?

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut Re
    Alors si je me rends dans le magasin de certificat "personnel" d'IE 8, j'ai bien mon certificat avec une clé privée qui correspond à ce certificat.

    J'ai obtenu ce certificat auprès d'une PKI d'une école d'ingénieur.

    Par contre j'utilise 2 keystores différentes: une pour la clé privée et l'autre pour le certificat de confiance.

    Dans mon code j'initialise le Key manager avec mon premier keystore tandis qu'avec l'autre keystore j'initialise un TrustManager factory c'est peut être là-dedans que j'ai un souci.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ah ok
    Alors si je dis pas de bêtise : le keystore doit contenir toute la chaine de certificats du server plus la clef privée du certificat server, et le truststore, uniquement la chaine de certificats des CA acceptées pour l'authentification client. Il se peut que ce soit la même chaine, mais pas forcément...

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut
    J'ai trouvé une solution en utilisant la même keystore pour l'initialisation de la KeyManagerFactory mais cela ne suffisait pas, du côté du serveur CA mon client devait sélectionner « advanced certificate request » puis ensuite « create and submit a request to this CA au lieu d'un juste "web browser certificat" mais je trouve quand même cela étrange.

    Merci George7 pour ton aide

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/11/2014, 10h53
  2. Réponses: 0
    Dernier message: 24/02/2012, 11h58
  3. erreur javax.net.ssl.SSLException: Not trusted server certificate
    Par diengkals dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 23/05/2011, 19h37
  4. [vb.net] probleme de construction de chaine dynamiquement
    Par graphicsxp dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/01/2006, 15h52
  5. [TStringField] inserer dans un champs NOT NULL une chaine vi
    Par kase74 dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/09/2005, 15h48

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