2016-09-24 10 views
0

J'essaie de configurer une authentification SpringSecurity CAS sur un serveur fish-fish et le serveur a un certificat auto-signé expiré. J'ai réussi à importer le cert mais je "m encore obtenir l'erreur suivante:.Glassfish comment faire confiance à un certificat expiré pour SSL

FAILURE: javax.net.ssl.SSLHandshakeException : sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed

Alors, évidemment, cela signifie que nous avons une erreur Horodatage (cert expiré)

J'ai lu qu'il pourrait y avoir une façon d'écrire une coutume SSLContext pour gérer cette cert spécifique et la liste blanche - mais je suis vraiment confus sur la façon dont je voudrais injecter une coutume SSLContext dans le mélange

Est-ce quelque chose que je fais dans web.xml ou tout simplement mis dans le. code ou quelque chose?

Merci

Répondre

0

Eh bien, on dirait que j'ai trouvé une façon terrible de le faire. J'ai jeté cette classe SSLHelper dans mon projet et il juste fait les choses magiques

import com.sun.net.ssl.HostnameVerifier; 
import com.sun.net.ssl.HttpsURLConnection; 
import com.sun.net.ssl.SSLContext; 
import com.sun.net.ssl.TrustManager; 
import com.sun.net.ssl.X509TrustManager; 
import java.security.KeyManagementException; 
import java.security.KeyStore; 
import java.security.KeyStoreException; 
import java.security.NoSuchAlgorithmException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.net.ssl.SSLSession; 
import javax.net.ssl.TrustManagerFactory; 
import javax.security.cert.CertificateException; 
import javax.security.cert.X509Certificate; 

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
/** 
* 
* @author jstein 
*/ 
public class SSLHelper { 

    static { 
     disableSslVerification(); 
    } 

    private static void disableSslVerification() { 
     try { 
      TrustManager[] trustAllCerts; 
      trustAllCerts = new TrustManager[]{new X509TrustManager() { 
       @Override 
       public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
        return null; 
       } 

       @Override 
       public boolean isClientTrusted(java.security.cert.X509Certificate[] xcs) { 
        return true; 
       } 

       @Override 
       public boolean isServerTrusted(java.security.cert.X509Certificate[] xcs) { 
        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()); 

      HostnameVerifier allHostsValid; 
      allHostsValid = new HostnameVerifier() { 

       @Override 
       public boolean verify(String string, String string1) { 
        return true; 
       } 
      }; 

      // Install the all-trusting host verifier 
      HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } catch (KeyManagementException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Et soudain tout fonctionne :)