L'idée précédente était de passer par le KeyStore afin de stocker le certificat nécessaire à la connexion. L'autre possibilité est de laisser faire entièrement le boulot à Java.

Pour commencer, il faut créer une classe implémentant X509TrustManager qui va gérer l'acceptation (ou non) des certificats :

class TrustAllManager implements X509TrustManager
{
 
    public TrustAllManager() {}
 
    public boolean checkClientTrusted(java.security.cert.X509Certificate[] chain)
    {
        return true;
    }
 
    public boolean isServerTrusted(java.security.cert.X509Certificate[] chain)
    {
        return true;
    }
 
    public boolean isClientTrusted(java.security.cert.X509Certificate[] chain)
    {
        return true;
    }
 
    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers()
    {
        return null;
    }
 
    @Override
    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType)
    {
    }
 
    @Override
    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)
    {
    }
}

Bien évidemment, il est possible de limiter les certificats auxquels on fait confiance en remplissant les méthodes adéquatement. L'exemple ci-dessus accepte tous les certificats, ce qui peut être sujet à des trous de sécurité !

Pour terminer, il ne reste plus qu'a paramétrer le contexte SSL avec le TrustManager défini puis de faire en sorte que toutes les connexion HTTPS utilisent ce contexte :

try
{
    //Récupération des données
    TrustManager[] trustAllCerts = new TrustManager[] { new TrustAllManager() };
    SSLContext sc = SSLContext.getInstance("SSL");
 
    //initialisation du contexte SSL en acceptant tous les certificats
    sc.init(null, trustAllCerts, null);
 
    //désormais les connexion HTTPS se feront via ce contexte
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
catch(Exception e)
{
    e.printStackTrace();
}

Et le tour est joué !