2010-07-16 3 views
8

J'ai un certificat de serveur auto-signé (cert.pem) et je dois l'activer pour les sockets SSL dans une application Android. Idéalement, je voudrais emballer le code en tant que fichier .jar et ne pas avoir besoin d'un fichier de certificat externe (c'est-à-dire l'inclure dans le code).Comment activer un certificat auto-signé pour les sockets SSL sur Android?

Avec ce code, je peux accepter tous les certificats, ce qui est pas ce que je veux:

SSLContext sc = SSLContext.getInstance("TLS"); 
sc.init(null, new TrustManager [] { new MyTrustManager() }, new SecureRandom()); 

Est-ce que je dois ajouter le certificat à une coutume KeyManager ou TrustManager sur mesure?

Un problème que je l'ai rencontré est que Android n'accepte pas JKS keystores (KeyStore.getDefaultType() retourne "BKS"): " java.security.KeyStoreException: mise en œuvre KeyStore JKS pas trouvé"

Tous Des idées comment procéder seraient très appréciées!

Répondre

13

Oui, vous devez ajouter le certificat à un KeyStore personnalisé. Il s'agit essentiellement d'un processus en quatre étapes:

  1. Obtenez votre certificat de serveur.
  2. Importez le certificat de serveur dans un fichier de clés en tant que ressource brute dans votre application. Le type KeyStore doit être BKS.
  3. Créez votre propre TrustManager dans votre programme Java/Android pour charger le certificat dans un SSLContext.
  4. Utilisez ce SSLContext pour vos connexions SSL.

Voir ce lien pour obtenir des instructions détaillées et des exemples de code:
http://randomizedsort.blogspot.com/2010/09/step-to-step-guide-to-programming.html

Bonne chance.
Nehc