Aller au contenu

[Résolu] KeyStore/KeyManager : Problème avec les certificats chainés


palopalo

Recommended Posts

Bonjour,

J'ai actuellement un certificat chainé (3 parties) et avec ça j'essaie d'authentifier mon client.

En observant les échanges à l'aide de WireShark, je constate que mon client n'envoie pas tout le certificat chainé, mais uniquement la 1ère partie. Ce qui empêche l'authentification du client.

J'ai essayé de trouver une solution à l'aide de la méthode getCertificateChain(alias), qui me permet de vérifier si j'ai bien mes 3 parties de certificats.

Maintenant, je ne sais pas comment lui dire d'envoyer les 3, car après vérification ils sont bien les 3 dans mon KeyStore (vu que je les affiches correctement).

Voici un bout de mon code ou je créé mon KeyManagers.

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 KeyStore (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());

   // Recupre l'alias et la cle prive du certificat
   alias = ((String)keyStore.aliases().nextElement());
   privateKey = (PrivateKey)keyStore.getKey(alias, keyStorePassword.toCharArray());


   // Recupere les parties du certificats et les affiches
   java.security.cert.Certificate[] certs = keyStore.getCertificateChain(alias);

   for(int i=0;i<certs.length;i++) { 
     Log.w(TAG, "Certs " + i + ": " + certs[i]);
   }

   //Creation du KeyManagerFactory et chargement du certificat dans celui ci 
   KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
   keyManagerFactory.init(keyStore, keyStorePassword.toCharArray());

   KeyManager[] keyManager = keyManagerFactory.getKeyManagers();

   return keyManager;
 }

En espérant que vous ayez déjà eu ce genre de problème :)

Lien vers le commentaire
Partager sur d’autres sites

La seule solution que j'ai trouvé est de refaire le certificat client, signé par le certificat CA global et Root (comment avant), mais ne pas les chainer.

Je n'ai pas réussis à trouver d'information pour savoir si Android ne supporte pas les certificats chainés ou s'il y a du code qui permet de l'avertir.

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...