Bonjour,

j'ai dans mon appli un appel à un webservice en https. Avec les versions d'Android >= 3 aucun souci.
Avec les autres, plus anciens, j'ai l'exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
javax.net.ssl.SSLHandshakeException: org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate signature.
J'ai fait de longues recherches sur le net, sans trouver mon bonheur.
J'ai utilisé keytool pour générer un .bks que je charge dans un truststore, mais ça ne donne rien (toujours la même exception et le même message).

Voilà le bout de code de mon appli qui ouvre la connexion avec le serveur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
URL urlWS = new URL("https://www.toto.fr/tata.asmx");
con = (HttpsURLConnection) urlWS.openConnection(); 
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("Content-type", "text/xml; charset=utf-8");   
con.setRequestProperty("Accept-Encoding", "gzip");
con.setRequestProperty("SOAPAction", soapAction);
 
InputStream stream = getResources().openRawResource(R.raw.trustca);
KeyStore ks = KeyStore.getInstance("BKS");
ks.load(stream, "monpwd".toCharArray());
stream.close();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
SSLContext context2 = SSLContext.getInstance("TLS");
context2.init(null, new TrustManager[] { defaultTrustManager }, null);
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.STRICT_HOSTNAME_VERIFIER;
con.setSSLSocketFactory(context2.getSocketFactory());
con.setHostnameVerifier(hostnameVerifier);
con.connect();
OutputStream reqStream = con.getOutputStream();
Si quelqu'un a une idée, car là je ne sais plus quoi faire.

Merci d'avance.

C.