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
J'ai fait de longues recherches sur le net, sans trouver mon bonheur.Code:javax.net.ssl.SSLHandshakeException: org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate signature.
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 :
Si quelqu'un a une idée, car là je ne sais plus quoi faire.Code:
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();
Merci d'avance.
C.