2011-09-30 4 views
3

Dans l'application sur laquelle je travaille, je dois établir une connexion HTTPS avec mon serveur Web qui utilise un certificat auto-signé. Je recevais un certificat pas d'erreurs de confiance et après consultation, je trouve cette annonce de blog: http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/Android Erreur SSL: certificat non approuvé

J'ai créé un keystore JKS pour mon tomcat courir sur ma machine locale à l'aide Keytool avec commande suivante

keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048 

Et je certificat extrait de cette JKS en format DER encodée à l'aide d'un outil open source appelé portecle

Et puis je créé une nouvelle BKS keyStore avec le certificat ci-dessus en utilisant le même outil portecle que Android a construit un soutien pour le fournisseur Bouncy Castle.

Maintenant, si je fais un post http comme indiqué dans la première URL, je reçois l'exception suivante dans le logcat.

WARN/System.err(498): javax.net.ssl.SSLException: Not trusted server certificate 
WARN/System.err(498):  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371) 
WARN/System.err(498):  at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:92) 
WARN/System.err(498):  at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381) 
WARN/System.err(498):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:164) 
WARN/System.err(498):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
WARN/System.err(498):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
WARN/System.err(498):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348) 
WARN/System.err(498):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
WARN/System.err(498):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
WARN/System.err(498):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
WARN/System.err(498):  at com.portal.activity.Registration$ProgressThread.run(Registration.java:324) 
WARN/System.err(498): Caused by: java.security.cert.CertificateException: java.security.InvalidAlgorithmParameterException: the trust anchors set is empty 
WARN/System.err(498):  at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:151) 
WARN/System.err(498):  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:366) 
WARN/System.err(498):  ... 10 more 
WARN/System.err(498): Caused by: java.security.InvalidAlgorithmParameterException: the trust anchors set is empty 
WARN/System.err(498):  at java.security.cert.PKIXParameters.checkTrustAnchors(PKIXParameters.java:611) 
WARN/System.err(498):  at java.security.cert.PKIXParameters.<init>(PKIXParameters.java:86) 
WARN/System.err(498):  at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.<init>(TrustManagerImpl.java:82) 
WARN/System.err(498):  at org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl.engineGetTrustManagers(TrustManagerFactoryImpl.java:132) 
WARN/System.err(498):  at javax.net.ssl.TrustManagerFactory.getTrustManagers(TrustManagerFactory.java:226) 
WARN/System.err(498):  at org.apache.http.conn.ssl.SSLSocketFactory.createTrustManagers(SSLSocketFactory.java:263) 
WARN/System.err(498):  at org.apache.http.conn.ssl.SSLSocketFactory.<init>(SSLSocketFactory.java:190) 
WARN/System.err(498):  at org.apache.http.conn.ssl.SSLSocketFactory.<init>(SSLSocketFactory.java:216) 
WARN/System.err(498):  at com.portal.httpclient.MyHttpClient.newSslSocketFactory(MyHttpClient.java:51) 
WARN/System.err(498):  at com.portal.httpclient.MyHttpClient.createClientConnectionManager(MyHttpClient.java:31) 
WARN/System.err(498):  at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:221) 
WARN/System.err(498):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:539) 
WARN/System.err(498):  ... 3 more 

Mon HttpClient est le même que dans la première URL, sauf que les ports pour http et https sont modifiés pour 8080 et 8443 au lieu de 80 et 443 respectivement.

Aidez-nous s'il vous plaît.

+0

http://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-https –

+0

@ Divyesh-Merci pour la réponse.Je ne veux pas accepter tous les certificats.Je veux Construire mon propre magasin de confiance afin que je puisse accepter des certificats de ce serveur seulement. Je le veux de la même manière qui est spécifié dans la première URL de mon message. – Sreeram

Répondre

0

Je me suis arrêté à l'aide portecle et a fait tout en utilisant commandline

J'utilise juste Keytool pour tout faire, comme indiqué dans l'URL de ma question.

Cela a fonctionné pour moi.

1

Vous pouvez trouver des instructions pour l'utilisation de clés certifiées personnalisées avec Android ici http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html

En bref:

  • Obtenez le cert public pour le serveur
  • Créer un truststore BKS avec ce certificat
  • Créer et utiliser un HttpClient personnalisé pour votre publication

On dirait que vous avez fait les deux premiers mais pas le dernier pas.

De plus, est-ce que Portecle a utilisé les drapeaux corrects? Vous avez besoin du drapeau trustcacerts lors de la création du magasin BKS ou cela ne fonctionnera pas.

+0

Merci pour la réponse.J'ai fait toutes les trois étapes.Je n'ai pas posté la troisième étape ici. Je vais devoir vérifier sur le drapeau trustcacerts dans portecle. – Sreeram

+0

Je n'ai trouvé aucun indicateur pour la mise en portecle.Can vous télécharger à partir de l'URL que j'ai mentionné et vérifier – Sreeram

+0

@Sereram Je ne peux pas voir une option spécifique, même si je suppose que vous devriez utiliser le 'Certificat de confiance d'importation' article. Comme une étape de dépannage, je recommande de recréer votre truststore en utilisant la ligne de commande (selon le lien que j'ai fourni). –

Questions connexes