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 :

Récupérer un certificat


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 40
    Par défaut Récupérer un certificat
    Bonsoir,

    J'ai comme objectif de récupérer le certificat (CA) d'un serveur et de le vérifier afin de l'authentifier puis de lui envoyer mon propre certificat (auto signer) pour qu'il puisse authentifier mon client et bien sûr tout ceci de manière sécurisé (https).

    J'ai trouvé sur .apache.org un bout de code pour les connections SSL/TLS, mais je ne comprend pas comment pour pourrais récupérer puis envoyer les différentes les informations de mes certificats.

    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
    TrustManager easyTrustManager = new X509TrustManager() {
     
        @Override
        public void checkClientTrusted(
                X509Certificate[] chain,
                String authType) throws CertificateException {
            // Oh, I am easy!
        }
     
        @Override
        public void checkServerTrusted(
                X509Certificate[] chain,
                String authType) throws CertificateException {
            // Oh, I am easy!
        }
     
        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
     
    };
     
    SSLContext sslcontext = SSLContext.getInstance("TLS");
    sslcontext.init(null, new TrustManager[] { easyTrustManager }, null);
     
    SSLSocketFactory sf = new SSLSocketFactory(sslcontext); 
    SSLSocket socket = (SSLSocket) sf.createSocket();
    socket.setEnabledCipherSuites(new String[] { "SSL_RSA_WITH_RC4_128_MD5" });
     
    HttpParams params = new BasicHttpParams();
    params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000L);
    InetSocketAddress address = new InetSocketAddress("locahost", 443);
    sf.connectSocket(socket, address, null, params);

  2. #2
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Ca dépends comment il est stocké et via quel protocole il est accessible.

    La chaine de certification peut parfois être stockée avec le certificat, comme elle peut être située ailleurs dans le SI sous forme de PKCS#7 accessible via un FTP public, ou HTTP, ou LDAP, ...

    Bref ça dépends.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 40
    Par défaut
    J'ouvre une connexion HTTPS vers mon serveur. Pour une authentification unilatéral de mon serveur j'utilise cette ligne "sslContext.init(null,trustManagers,null);" qui me demande de créer un nouveau TrustManagers. Mon problème actuellement se trouve à 2 endroits.

    1. Créer un trustore BKS (JKS non suporté par Android)
    2. Mettre mon BKS dans les ressources de mon android


    Pour la création d'un BKS j'ai uniquement trouvé ce lien, mais aucune explication de la commande...

    Voici l'état de mon code actuelle pour la connexion à mon serveur et la partie du TrustManager

    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
        public void setHTTPS() throws IOException, KeyManagementException{
        String host = URL;
        URL myurl = new URL(host);
     
        String trustStoreFileName = PATHKEYSTORE;
        String trustStorePassword = PASSKEYSTORE;
     
     
        try{
          TrustManager[] trustManagers = createTrustManagers(trustStoreFileName, trustStorePassword);
     
          SSLContext sslContext=SSLContext.getInstance("TLS");
          sslContext.init(null,trustManagers,null);
          HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
     
          //Chargement de la page...
          HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
          con.connect();
        }catch(Exception e){
          Log.e(TAG, "ErreurTrust: " + e);
        }
     
      }
     
        private static TrustManager[] createTrustManagers(String trustStoreFileName, String trustStorePassword) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
          //create Inputstream to truststore file
          java.io.InputStream inputStream = new java.io.FileInputStream(trustStoreFileName);
     
          //create keystore object, load it with truststorefile data
          KeyStore trustStore = KeyStore.getInstance("BKS");
          trustStore.load(inputStream, trustStorePassword == null ? null : trustStorePassword.toCharArray());
     
          //create trustmanager factory and load the keystore object in it 
          TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
          trustManagerFactory.init(trustStore);
     
          //return 
          return trustManagerFactory.getTrustManagers();
        }

  4. #4
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    C'est pas ici le forum Android.

    Java != Android.

    De ce que j'ai pu lire rapidement dans le java.security de Android la gestion des magasins est très différente.
    Par ailleurs le format de magasin BKS n'est pas géré par la JCA de standard de Java. Il faut une API tierce comme BouncyCastle qui elle le gère.

    Bref voilà.

    Du coup je te moinsse sans pitié, la première fois pour pas avoir posté sur le bon forum, la deuxième pour ne pas avoir précisé ta plateforme. Hin hin hin.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 40
    Par défaut
    Bon c'est peut-être réveiller un sujet mal placé, mais je tenais à mettre le lien vers la suite de la discussion qui avait abouti sur une solution. Ou alors supprimer complètement le topic, ça le fait aussi

    http://www.developpez.net/forums/d10...er-certificat/

    merci de votre compréhension .

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

Discussions similaires

  1. Récupérer info certificat SSL perl / TCPDUMP
    Par franpom dans le forum Langage
    Réponses: 0
    Dernier message: 24/02/2014, 13h33
  2. Envoyer/Récupérer un certificat
    Par PaloPalo dans le forum Android
    Réponses: 5
    Dernier message: 11/04/2011, 17h03
  3. Applet : Récupérer les certificats du Web Browser
    Par Nicolas74100 dans le forum Sécurité
    Réponses: 3
    Dernier message: 23/11/2010, 17h16
  4. Récupérer le CN d'une certificat X509
    Par sfaxi dans le forum Apache
    Réponses: 1
    Dernier message: 30/05/2007, 19h01
  5. [C#][VS2005]Récupérer les info d'un certificat avec FX 2.0
    Par virgul dans le forum Windows Forms
    Réponses: 12
    Dernier message: 31/01/2006, 08h52

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