«

»

Sep 07

Accepter les certificats SSL non valides lors des requetes HTTPS

certificat sslJ’ai récemment été confronté à écrire une application qui échange des données avec applications qui utilise des certificats de sécurité parfois non valides. Après avoir passé quelques heures à faire des recherche et à écrire du code, je suis arrivé au bout de code présenté ci-dessous qui accepte touts les sites webs quelques soit leurs certificats.

 

public static URL getSslURL(String url) throws Exception
{
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]
{
new X509TrustManager()
{
public java.security.cert.X509Certificate[] getAcceptedIssuers()
{
return null;
}

public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType)
{
}

public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType)
{
}
}
};

// Create empty HostnameVerifier
HostnameVerifier hv = new HostnameVerifier()
{
public boolean verify(String arg0, SSLSession arg1)
{
return true;
}
};

// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hv);

return new URL(url);
}

On peut alors l’utiliser comme suit :

URL page;

if (url.startsWith("https"))
{
page = getSslURL(url);
} else
{
page = new URL(url);
}