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

Servlets/JSP Java Discussion :

Apache HTTPClient : Connexion SSL via certificat PKI


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 10
    Points : 16
    Points
    16
    Par défaut Apache HTTPClient : Connexion SSL via certificat PKI
    Bonjour,

    J'essaye d'accéder via un programme Java à une servlet qui nécessite une authentification via un certificat.
    J'utilise la librairie HTTPClient de Apache.
    Le certificat est bien installé sur ma machine et je l'ai mis dans le keystore de mon JRE (cacerts).


    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
    KeyStore ksTrustStore = KeyStore.getInstance("JKS");
    FileInputStream fis = new FileInputStream("path_to_jre/lib/security/cacerts");
    ksTrustStore.load(fis, password.toCharArray());
    fis.close();
    SSLSocketFactory sf = new SSLSocketFactory(trustStore);
     
     SchemeRegistry registry = new SchemeRegistry();
     registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
     registry.register(new Scheme("https", sf,443));
     
    ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
    HttpClient client =  DefaultHttpClient(ccm, params);
     
    HttpGet get = new HttpGet("https://the_server/the_servlet");
    HttpResponse response = client.execute(get);
    ...

    Quand j'essaye d'accéder à https://the_server/the_servlet via un navigateur j'ai une pop-up qui me demande de confirmer le certificat client, puis j'ai la réponse du get qui s'affiche ("Hello world doGet()")

    Mais le programme Java reste bloqué sur le "client.execute(get)" et n'en sort jamais

    Est-ce que j'ai oublié quelque chose dans mon programme ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 10
    Points : 16
    Points
    16
    Par défaut
    J'ai regardé les traces réseaux avec Wireshark et je les ai comparées avec celle que j'obtiens quand j'essaye d'accéder à la servlet via navigateur.

    Sur le navigateur j'obtiens en gros :

    Client Hello
    Server Hello
    Client key Exchange
    Client application data
    Plusieurs encrypted Handshake message
    ACK
    FIN,ACK
    FIN,ACK

    Quand je lance mon programme Java j'obtiens :

    Client Hello
    Server Hello
    Client key exchange
    Client application data
    Server encrypted Handshake message
    Client Encrypted Alert
    Server ACK

    Après plus rien, mais la connexion reste en vie.
    Ça voudrait dire que le client ne trust pas le serveur ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 10
    Points : 16
    Points
    16
    Par défaut
    J'ai trouvé le problème. Cela venait d'une renégociation qui échouait. Il faut lancer le programme avec l'option

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -Dsun.security.ssl.allowUnsafeRenegotiation=true
    Tout est expliqué ici :

    http://java.sun.com/javase/javasefor...TLSReadme.html

Discussions similaires

  1. Connexion SSL et certificat
    Par Pko1722 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 30/11/2012, 18h20
  2. Connexion SSL avec certificat auto-signé
    Par hornetbzz dans le forum Apache
    Réponses: 5
    Dernier message: 23/06/2010, 00h49
  3. [SOAP] Connexion en SSL via php sur un https
    Par pierrot2908 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 06/09/2009, 11h23
  4. Réponses: 1
    Dernier message: 26/08/2009, 21h12
  5. [cURL] connexion SSL sur un serveur et envoi de données via POST.
    Par Tongs dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/02/2008, 14h29

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