2015-07-02 9 views
9

Esiste un servizio Web protetto da un certificato. Nel codice client che lo chiama, la CA del certificato deve essere presente nel truststore (percorso_JRE \ lib \ security \ cacerts); in caso contrario, si ottiene l'eccezione PKIX sul lato client.Affidarsi a un certificato autofirmato scaduto mentre si chiama un webservice

Cosa succede se il certificato è scaduto - il codice client non funziona.

Tuttavia, questo può essere aggirato con l'aggiunta del certificato direttamente nel truststore - Trusting an expired certificate

vale a dire se il certificato stesso e non la CA è presente nel truststore, allora tutto funziona, anche se il certificato è scaduto.

Nel mio scenario, il certificato del servizio Web è autofirmato, quindi dovevo comunque aggiungerlo al truststore e il client continua a funzionare anche quando il certificato è scaduto.

Ora la mia domanda è questa funziona in tutti gli scenari - il mio programma è solo un programma a riga di comando che esegue un JRE locale.

Nel caso in cui ci sia un'applicazione che chiama il servizio web e l'applicazione è in esecuzione su Websphere, JBoss, WebLogic, Tomcat, Glassfish ecc. E il certificato autofirmato viene aggiunto al truststore di quell'ambiente, posso ancora supporre che continuerà lavorare (non dare errori scaduti)?

Suppongo che funzionerebbe, perché quei server di applicazioni userebbero anche un JRE come qualsiasi altro programma o mi manca qualcosa?

+5

Se non si desidera che sicuro, non utilizzare HTTPS. Se lo vuoi sicuro, non provare a scegliere le tue caratteristiche di sicurezza. – EJP

+0

come @EJP ha detto: di solito non è una buona idea indebolire la sicurezza. Ma spesso anche noi programmatori dobbiamo impedire alle applicazioni di fallire silenziosamente. Quindi è necessario assicurarsi che se il programma fallisce, il motivo diventerà chiaro a qualsiasi amministratore che si occupa di questo problema o si potrebbe provare a rilevare le eccezioni che si verificano dai certificati scaduti o forzare dall'interno del codice quali certificati sono accettati: http: // stackoverflow.com/questions/6659360/how-to-solve-javax-net-ssl-sslhandshakeexception-error – Marged

+0

Se hai il comando openssl sul tuo ambiente (installalo). puoi usarlo come applicazione di background in background cmd con [data check] (http://stackoverflow.com/questions/21297853/how-to-determine-ssl-cert-expiration-date-from-a-pem-encoded-certificate # answer-21297927) e leggi il risultato –

risposta

1

è possibile ignorare tutti i certificati dal codice di seguito

try { 
      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) { 
       } 
      } }; 
      SSLContext sc = SSLContext.getInstance("SSL"); 
      sc.init(null, trustAllCerts, new java.security.SecureRandom()); 

      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
      HostnameVerifier allHostsValid = new HostnameVerifier() { 
       public boolean verify(String hostname, SSLSession session) { 
        return true; 
       } 
      }; 
      SSLContext.setDefault(sc); 
      HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); 
      LOGGER.debug("All Certificates Have Been Trusted Successfully."); 
     } catch (KeyManagementException ex) { 
      LOGGER.error("Error:",ex); 
     } catch (NoSuchAlgorithmException ex) { 
      LOGGER.error("Error:",ex); 
     } 
+0

Lo so. Tuttavia, non è quello che sto cercando. – user93353

+0

Puoi chiarire di più ciò che desideri –

+0

Voglio sapere se la scadenza dei certificati autofirmati è sempre ignorata se il certificato autofirmato è presente nell'archivio fiduciario – user93353

Problemi correlati