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
).
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