java-ignorer le certificat ssl expiré


URL myUrl = new URL("https://www.....");

Le certificat SSL du site Web a expiré. Comment l'éviter et faire fonctionner URL ()?

Author: Grodriguez, 2012-01-01

3 answers

Vous devez créer un TrustManager qui encapsule le gestionnaire de confiance par défaut, attrape le CertificiateExpiredException et l'ignore.

Remarque: comme détaillé dans cette réponse, que ce soit sécurisé ou non dépend beaucoup de l'implémentation. En particulier, il repose sur la date de validation effectuée en dernier, après que tout le reste a été vérifié correctement.

Quelque chose dans ce sens devrait fonctionner:

TrustManagerFactory tmf = TrustManagerFactory.getInstance(
    TrustManagerFactory.getDefaultAlgorithm());
// Initialise the TMF as you normally would, for example:
tmf.init((KeyStore)null); 

TrustManager[] trustManagers = tmf.getTrustManagers();
final X509TrustManager origTrustmanager = (X509TrustManager)trustManagers[0];

TrustManager[] wrappedTrustManagers = new TrustManager[]{
   new X509TrustManager() {
       public java.security.cert.X509Certificate[] getAcceptedIssuers() {
          return origTrustmanager.getAcceptedIssuers();
       }

       public void checkClientTrusted(X509Certificate[] certs, String authType) {
           origTrustmanager.checkClientTrusted(certs, authType);
       }

       public void checkServerTrusted(X509Certificate[] certs, String authType) {
           try {
               origTrustmanager.checkServerTrusted(certs, authType);
           } catch (CertificateExpiredException e) {}
       }
   }
};

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, wrappedTrustManagers, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

Les gestionnaires de confiance jettent CertificateExceptions (voir sous-classes pour détails) lorsque quelque chose ne va pas avec un certificat. Soyez précis dans ce que vous voulez attraper/ignorer. Tout ce que vous voulez vraiment validé doit être vérifié avant que vous attrapez est potentiellement levée, ou vous aurez à valider manuellement. Tout ce qui est plus détendu que cela (en particulier, ne rien faire et donc ne pas lancer d'exception) ignorera complètement la vérification et la validation du certificat, ce qui revient à peu près à utiliser des suites de chiffrement anonymes ou à ignorer Authentication. Cela irait à l'encontre de l'objectif de sécurité de l'utilisation de SSL/TLS (au lieu d'être seulement un peu plus flexible à la date d'expiration).

 17
Author: Bruno, 2017-05-23 11:45:49

Vous devez créer un validateur X509 personnalisé qui ignorera les certificats expirés. En fait, aucune vérification ne sera effectuée.

Code à partir d'ici: http://exampledepot.com/egs/javax.net.ssl/TrustAll.html

// 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) {
        }
    }
};

// Install the all-trusting trust manager
try {
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}

// Now you can access an https URL without having the certificate in the truststore
// It should work with expired certificate as well
try {
    URL myUrl = new URL("https://www.....");
} catch (MalformedURLException e) {
}
 2
Author: F--, 2012-01-01 16:05:47

J'ai écrit un TrustManager personnalisé pour résoudre ce problème, vous pouvez le voir à https://gist.github.com/divergentdave/9a68d820e3610513bd4fcdc4ae5f91a1 . Ce TrustManager encapsule le X509Certificate incriminé dans une autre classe pour désactiver la vérification d'expiration tout en laissant toutes les autres validations en place. (c'est-à-dire correspond au nom d'hôte, aux chaînes à une autorité de certification de confiance, à la signature valide, etc.)

 1
Author: dncook, 2016-07-22 04:58:59