Aller au contenu

SSL et keymanagers (authentification client)


Manticore

Recommended Posts

Bonjour,

je suis actuellement en train de dévelloper une petite application qui a besoin de se connecter en ssl, ceci avec une authentification forte (client + serveur).

J'utilise pour cela un certificat chainé. Malheusement mon keymanager n'envoie que le premier certificat, ce qui fait que mon serveur n'arrive pas à reconnaitre la CA. Est-il possible de spécifier l'envoie de toute la chaine de certificat et non plus seulement le premier ?

Merci de votre aide voici le code que j'utilise

// Connexion HTTPS
public void setHTTPS() throws IOException, KeyManagementException,
KeyStoreException, NoSuchAlgorithmException, CertificateException,
UnrecoverableKeyException{
  URL myurl = new URL(URL);

  String trustStorePassword = PASSTRUSTSTORE;
  String keyStorePassword = PASSKEYSTORE;

  // Création du TrustManagers et du KeyManager
  TrustManager[] trustManagers = createTrustManagers(trustStorePassword);
  KeyManager[] keyManagers = createKeyManagers(keyStorePassword);

  // Création du contest SSL (authentification bidirectionnelle et
protocole utilise)
  SSLContext sslContext=SSLContext.getInstance("TLS");
  sslContext.init(keyManagers,trustManagers,null);
  SSLSocketFactory socketFactory = sslContext.getSocketFactory();

  String[][] data = new String[12][2];
  String encodedData = null;
  Mesure newMes = (Mesure) mesList.getLast();

...

  //Chargement de la page
  HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
  HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory);
  con.setRequestProperty("Content-Length", "" + encodedData.length());
  con.setRequestProperty("Content-Type", "Application/x-www-form-urlencoded");
  con.setRequestMethod("POST");
  con.setDoOutput(true);


  OutputStream os = con.getOutputStream();
  OutputStreamWriter osw = new OutputStreamWriter(os);

  osw.write(encodedData);
  osw.flush(); // envoie
  osw.close(); // Fermeture

}

// Creation du TrustManager pour l'authentification du serveur
private TrustManager[] createTrustManagers(String
trustStorePassword) throws KeyStoreException,
NoSuchAlgorithmException, CertificateException, IOException {
  // Creation du KeyStore en specifiant l extension du certificat accepte
  KeyStore trustStore = KeyStore.getInstance("BKS");

  // Creation d un Inputstream pour recupere le ficher Truststore (ressource)
  InputStream inputstream =
this.getResources().openRawResource(R.raw.mytruststore);

  // Initialise le Keystore avec le certificat de confiance et son
mot de passe
  trustStore.load(inputstream, trustStorePassword.toCharArray());

  //Création du TrustManagerFactory et chargement du certificat dans
celui ci
  TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
  trustManagerFactory.init(trustStore);

  return trustManagerFactory.getTrustManagers();
}


private KeyManager[] createKeyManagers(String keyStorePassword)
throws CertificateException, IOException, KeyStoreException,
NoSuchAlgorithmException, UnrecoverableKeyException {
  // Creation du KeyStore en specifiant l extension du certificat accepte
  KeyStore keyStore = KeyStore.getInstance("BKS");

  // Creation d un Inputstream pour recupere le ficher Truststore (ressource)
  InputStream inputstream =
this.getResources().openRawResource(R.raw.mykeystore);

  // Initialise le Keystore avec le certificat de confiance et son
mot de passe
  keyStore.load(inputstream, keyStorePassword.toCharArray());

    //create keymanager factory and load the keystore object in it
    KeyManagerFactory keyManagerFactory =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    keyManagerFactory.init(keyStore, keyStorePassword.toCharArray());
    KeyManager[] keyManager = keyManagerFactory.getKeyManagers();

  return keyManager;
}

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Manticore,

pouvez-vous décrire un peu plus votre besoin ?

S'agit-il d'un site pour un besoin interne ou pour un site orienté à l'extérieur (exemple: site d'e-commerce) ?

Quelle application dévellopez-vous donc ?

Le certificat que vous utilisez, de quelle Autorité de Certification est-il ?

VeriSign

GlobalSign

Thawte

GeoTrust

RapidSSL

Networking4all

?

En attente de vous lire,

http://www.networking4all.com/fr/

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...