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 :

[SSL] accepter un certificat invalide


Sujet :

Sécurité Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 36
    Points : 22
    Points
    22
    Par défaut [SSL] accepter un certificat invalide
    Bonjour,

    Je cherche à établir une connection https avec un serveur.
    Le pb est que le certificat du serveur est invalide (ou plutot out of date).
    Mais je voudrais qd mm l'accepter.
    Et je n'y arrive pas :-/

    J'utilise l'api HttpClient de chez jakarta Commons.
    J'ai essaye d'implémenter ma SocketFactory, mais rien n'y fait, il ne veut pas m'accepter le certif (SSLHandshakeException)

    Merci

    Nicolas

  2. #2
    raj
    raj est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 100
    Points
    100
    Par défaut
    J'ai eu le meme problème il y a qq mois .
    Il faut que tu regarde la doc de JSSE , tu dois implémenter une interface
    je sais plus laquelle , je vais regarder dans mes vieux codes .....

    Je te tiens au courant

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 36
    Points : 22
    Points
    22
    Par défaut
    Ca yest j'ai trouvé.
    En fait je savais que le but était d'avoir un SSLContext avec un TrustManager qui accepte tous les certificats (ou en tout cas ceux qu'on désire).

    J'avais réussi à mettre en place un tel SSLContext en utilisant ensuite la classe URL normale.
    Mais en utilisant l'api HttpClient, j'arrivais pas à mettre en place mon SSLContext.

    Et finalement, avec HttpClient, il faut réécrire complétement une SocketFactory (qui implemente ProtocolSocketFactory du package org.apache.commons.httpclient.protocol), et la on peut utiliser son SSLContext avec un TrustManager à nous.

    Voici le 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
    60
    61
     
    public class MySSLSocketFactory implements ProtocolSocketFactory
    {
        private SSLContext sslcontext = null;
     
        public MySSLSocketFactory() {            
        }
     
        private static SSLContext createEasySSLContext() 
        {
            try {
                SSLContext context = SSLContext.getInstance("SSL");
                context.init(null,new TrustManager[]{new MyX509TrustManager()},null);
                return context;
            } catch (Exception e) {
                throw new HttpClientError(e.toString());
            }
        }
     
        private SSLContext getSSLContext() 
        {
            if (this.sslcontext == null)
                this.sslcontext = createEasySSLContext();
            return this.sslcontext;
        }
     
        public Socket createSocket( String host, int port, InetAddress clientHost, int clientPort)
            throws IOException, UnknownHostException 
        {
            return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort);
        }
     
        public Socket createSocket(String host,int port,InetAddress localAddress, 
            int localPort, HttpConnectionParams params) 
        		throws IOException, UnknownHostException 
    	{
            return createSocket(host, port, localAddress, localPort);
        }
     
        public Socket createSocket(String host, int port)
            throws IOException, UnknownHostException 
        {
            return getSSLContext().getSocketFactory().createSocket(host,port);
        }
     
        public boolean equals(Object obj) {
            return ((obj != null) && obj.getClass().equals(MySSLSocketFactory.class));
        }
     
        public int hashCode() {
            return MySSLSocketFactory.class.hashCode();
        }
     
        public static class MyX509TrustManager implements X509TrustManager
        {
            public MyX509TrustManager() {}
            public X509Certificate[] getAcceptedIssuers() {return null;}
            public void checkClientTrusted(X509Certificate[] chain, String authType){}
            public void checkServerTrusted(X509Certificate[] chain, String authType){}        
        }
    }
    Ensuite le tout est d'implémenter les fonctions de MyX509TrustManager pour accepter tel ou tel certificat.

    Qq exemples ici
    http://svn.apache.org/viewcvs.cgi/ja...t/contrib/ssl/

    Voila.
    A+

    Merci

    Nicolas

  4. #4
    Membre du Club Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Points : 63
    Points
    63
    Par défaut
    tu dis que tu as réussi à faire accepter les certificats en passant par la classe URL, comment as tu fait ?

    en fait je dois me connecter à un web service, donc je ne peux pas utiliser la classe httpClient pour me connecter, mais la classe URL.

    ça m'interresse beaucoup de savoir comment tu t'y es pris.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/01/2016, 19h19
  2. [Security] [LDAP, SSL] Ajouter un certificat dans une Application Web
    Par enjoy dans le forum Spring
    Réponses: 1
    Dernier message: 20/02/2009, 13h02
  3. [IIS 6 - SSL] Installation de certificat
    Par bartoumi dans le forum IIS
    Réponses: 2
    Dernier message: 13/06/2008, 13h18
  4. [HTTPS] connexion à un site + acceptation du certificat
    Par MaKyOtO dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 21/11/2007, 13h16
  5. Réponses: 1
    Dernier message: 17/11/2006, 15h29

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