Activer Java pour autoriser le certificat expiré


Existe-t-il des indicateurs de ligne de commande pour activer Java pour autoriser les certificats expirés?

En ce moment, je reçois l'exception suivante car le certificat a expiré.

Caused by: java.security.cert.CertificateExpiredException: NotAfter: {PAST DATETIME}
at sun.security.x509.CertificateValidity.valid(CertificateValidity.java:274)
at sun.security.x509.X509CertImpl.checkValidity(X509CertImpl.java:629)
at sun.security.x509.X509CertImpl.checkValidity(X509CertImpl.java:602)
at org.apache.ws.security.validate.SignatureTrustValidator.validateCertificates(SignatureTrustValidator.java:103)

J'ai essayé l'indicateur de ligne de commande suivant qui n'ignore pas la vérification de l'expiration du certificat

-Dcom.sun.net.ssl.checkRevocation=false

Notre application s'exécute dans tomcat sous path /myapplication. J'ai donc créé une autre application /ignorecertificate et déployée dans le même dossier webapp de Tomcat. Selon la réponse acceptée dans ce question , j'exécute le code suivant au démarrage de l'application /ignoreexpired.

// 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) {
    e.printStackTrace();
}

Puisque les deux applications étaient déployées dans le même tomcat, je m'attendais à ce que /myapplication ignore la vérification / exception d'expiration du certificat (Bcoz les deux applications partagent la même instance java). Mais c'est toujours pas de travail. J'exécute ce code ignorer dans une autre application (/ignoreexpired) car je ne veux apporter aucune modification à mon application actuelle (/myapplication).

Author: Community, 2016-07-01

1 answers

-Dcom.sun.net.ssl.checkRevocation=false

Cette option (avec une configuration supplémentaire) permet de vérifier en ligne auprès de l'émetteur du certificat l'état de révocation du certificat. Pas ce que vous cherchez.

Puisque les deux applications étaient déployées dans le même tomcat, je m'attendais à ce que /myapplication ignore la vérification / l'exception d'expiration du certificat

Les applications s'exécutent dans un contexte JVM différent. Les modifications apportées à TrustManager de l'application /ignoreexpired n'affecteront pas l'autre.

Vous pouvez inclure le certificat expiré dans le truststore utilisé par la JVM. Je pense que le TrustoreManager ne vérifiera pas l'expiration sur les certificats expressément inclus dans le magasin de confiance. Créez un JKS en utilisant keytool ou GUI KeyStore explorer, insérez le certificat (le certificat final, pas la racine) et utilisez-le globalement dans tomcat via

-Djavax.net.ssl.trustStore=/path/to/truststore
-Djavax.net.ssl.trustStorePassword=truststorepassword

Vous pouvez également mettre à jour le magasin de confiance JVM par défaut à jre/lib/security/cacerts

 4
Author: pedrofb, 2016-07-11 05:53:44