J'essaie de faire fonctionner DefaultHttpClient()
avec certificat SSL expiré.Comment accepter un certificat ssl expiré avec le client Apache?
Android API 2.2
Il ne compilera pas à cause de cette ligne:
SSLSocketFactory sf = new SSLSocketFactory (SSLContext);
Erreur: The constructor SSLSocketFactory(SSLContext)
est pas défini
Qu'est-ce que je fais mal?
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ssl.SSLSocketFactory;
{...}
SSLContext sslContext = SSLContext.getInstance("SSL");
// set up a TrustManager that trusts everything
sslContext.init(null, new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
System.out.println("getAcceptedIssuers =============");
return null;
}
public void checkClientTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkClientTrusted =============");
}
public void checkServerTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkServerTrusted =============");
}
} }, new SecureRandom());
SSLSocketFactory sf = new SSLSocketFactory(sslContext);
Scheme httpsScheme = new Scheme("https", sf, 443);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(httpsScheme);
HttpParams params = new BasicHttpParams();
ClientConnectionManager cm = new SingleClientConnManager(params, schemeRegistry);
//DefaultHttpClient httpclient = new DefaultHttpClient();
DefaultHttpClient httpclient = new DefaultHttpClient(cm, params);
Indépendamment de la façon de passer ce 'SSLContext' au client HTTP, ce que vous faites mal, c'est que vous utilisez un gestionnaire de confiance qui ne fait rien pour vérifier le certificat du serveur. Ces gestionnaires de confiance pass-through laisseront * tout * certificat (y compris ceux provenant de MITM potentiel), pas seulement ceux en qui vous avez confiance mais qui ont expiré. – Bruno