J'utilise le SSL Socket et Trustmanager de ce côté Auto-signature SSL
mais je continue à avoir l'erreur suivante:
09-28 19: 52: 41.942: WARN/System.err (10101): javax.net.ssl.SSLHandshakeException: org.bouncycastle.jce.exception.ExtCertPathValidatorException: Impossible de valider la signature du certificat.
Qu'est-ce qui ne va pas? J'ai déjà vérifié différents articles sur stackoverflow mais je ne peux pas sembler le faire fonctionner.
Mon code:
SchemeRegistry schemeRegistry = new SchemeRegistry();
// http scheme
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
// https scheme
schemeRegistry.register(new Scheme("https", new EasySSLSocketFactory(), 443));
params = new BasicHttpParams();
params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 1);
params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(1));
params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "utf8");
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope("www.example.com", AuthScope.ANY_PORT),
new UsernamePasswordCredentials("user", "password"));
clientConnectionManager = new ThreadSafeClientConnManager(params, schemeRegistry);
context = new BasicHttpContext();
context.setAttribute("http.auth.credentials-provider", credentialsProvider);
DefaultHttpClient client = new DefaultHttpClient(clientConnectionManager, params);
HttpGet get = new HttpGet("https://www.example.com/web/restricted/form/formelement=512663");
HttpResponse response = client.execute(get, context);
Log.w("Response ","Status line : "+ response.toString());
Comme Michael Levy l'a mentionné, la raison pour laquelle j'ai eu cette exception est que j'avais laissé mon émulateur Android ouvert pendant quelques jours et que l'horloge s'était très bien désynchronisée. Une fois que j'ai redémarré l'émulateur, l'exception est partie.
Très probablement, le serveur a renvoyé la chaîne de certificats avec des autorités en lesquelles vous n'avez pas confiance. (signifie: les certificats d'autorité ne sont pas reconnus par votre appareil comme fiables) Solution: examinez attentivement les certificats provenant du site Web HTTPS et ajoutez les autorités respectives à votre magasin de clés de confiance - mais cette partie semble être délicate.
(voici quelques explications: http://groups.google.com/group/Android-security-discuss/browse_thread/thread/0bf726de4f5275a3/391b900631d7f358 )
En passant, nous pourrions facilement reproduire cette erreur - il suffit de changer la date du téléphone plusieurs années plus tard.
REMARQUE: l’erreur peut être une petite différence d’un téléphone à l’autre. Certains pourraient montrer que le certificat a expiré.