2015-07-02 23 views
9

Es gibt einen Webservice, der durch ein Zertifikat geschützt ist. In dem Client-Code, der sie aufruft, muss die Zertifizierungsstelle des Zertifikats im Truststore (JRE_Pfad \ lib \ security \ cacerts) angezeigt werden - andernfalls erhalten Sie die PKIX-Ausnahme auf der Clientseite.Einem abgelaufenen selbstsignierten Zertifikat beim Aufruf eines Webservice vertrauen

Was passiert, wenn das Zertifikat abgelaufen ist - der Client-Code schlägt fehl.

Dies kann jedoch in die Trusts direkt durch Zugabe des Zertifikats umgangen werden - Trusting an expired certificate

das heißt, wenn das Zertifikat selbst und nicht die CA in dem Trusts ist, dann ist alles funktioniert auch, wenn das Zertifikat abgelaufen ist.

In meinem Szenario ist das Webservice-Zertifikat ein selbstsigniertes, also musste ich es trotzdem zum Truststore hinzufügen, und der Client funktioniert auch dann gut, wenn das Zertifikat abgelaufen ist.

Jetzt ist meine Frage, wird dies in allen Szenarien funktionieren - mein Programm ist nur ein Befehlszeilenprogramm von einer lokalen JRE ausgeführt.

Wenn eine Anwendung den Webservice aufruft und die Anwendung auf Websphere, JBoss, WebLogic, Tomcat, Glassfish usw. läuft und das selbstsignierte Zertifikat dem Truststore dieser Umgebung hinzugefügt wird, kann ich weiterhin davon ausgehen, dass es fortgesetzt wird arbeiten (keine abgelaufenen Fehler geben)?

Ich nehme an, es würde funktionieren - weil diese Anwendungsserver auch eine JRE wie jedes Programm verwenden würden - oder fehlt mir etwas?

+5

Wenn Sie es sicher nicht wollen, nicht HTTPS verwenden. Wenn Sie es sicher möchten, versuchen Sie nicht, Ihre eigenen Sicherheitsfunktionen auszuwählen. – EJP

+0

wie @EJP sagte: Es ist normalerweise keine gute Idee, die Sicherheit zu schwächen. Aber oft müssen wir als Programmierer auch verhindern, dass Anwendungen stillschweigend ausfallen. Sie sollten also entweder sicherstellen, dass bei einem Fehler des Programms der Grund für jeden Administrator klar wird, der sich mit diesem Problem befasst, oder Sie könnten Ausnahmen von abgelaufenen Zertifikaten abfangen oder in Ihrem Code erzwingen, welche Zertifikate akzeptiert werden: http: // stackoverflow.com/questions/6659360/how-to-solve-javax-net-ssl-sslhandshakeexception-error – Marged

+0

Wenn Sie OpenSSL-Befehl für Ihre Umgebung haben (installieren Sie es). Sie können es als Hintergrund cmd Hintergrund-Anwendung mit [Datum prüfen] (http://stackoverflow.com/questions/21297853/how-to-determine-ssl-cert-expiration-date-from-a-pem-encoded-certificate # answer-21297927) und das Ergebnis lesen –

Antwort

1

können Sie alle Zertifikate umgehen, indem sie unter Code

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

Ich weiß das. Allerdings suche ich nicht danach. – user93353

+0

Können Sie mehr klären, was Sie wollen –

+0

Ich möchte wissen, ob der Ablauf von selbstsignierten Zertifikaten immer ignoriert wird, wenn das selbstsignierte Zertifikat im Trust Store vorhanden ist – user93353