2015-07-02 32 views
9

Istnieje usługa chroniona certyfikatem. W kodzie klienckim, który go wywołuje, urząd certyfikacji musi się znajdować w magazynie zaufanych certyfikatów (JRE_path \ lib \ security \ cacerts) - jeśli nie, po stronie klienta pojawi się wyjątek PKIX.Zaufanie wygasłego certyfikatu z podpisem własnym podczas wywoływania usługi internetowej

Co się stanie, jeśli certyfikat wygasł - kod klienta nie działa.

Jednak ten można obejść przez dodanie certyfikatu bezpośrednio do truststore - Trusting an expired certificate

czyli jeśli sam certyfikat CA i nie jest obecny w truststore, to wszystko działa, nawet jeśli certyfikat wygasł.

W moim scenariuszu certyfikat usługi internetowej jest samopodpisany, więc i tak musiałam go dodać do magazynu zaufanych certyfikatów, a klient nadal działa poprawnie nawet po wygaśnięciu certyfikatu.

Teraz moje pytanie brzmi: będzie to działało we wszystkich scenariuszach - mój program to tylko program wiersza poleceń działający w lokalnym środowisku JRE.

Jeśli istnieje aplikacja wywołująca usługę sieci Web i aplikacja działa w środowisku Websphere, JBoss, WebLogic, Tomcat, Glassfish itp. I certyfikat z podpisem własnym jest dodawany do pliku zaufanych certyfikatów tego środowiska, czy mogę nadal zakładać, że będzie on kontynuowany pracować (nie podawać wygasłych błędów)?

Zakładam, że to zadziała - ponieważ te serwery aplikacji będą również używać środowiska JRE, tak jak w przypadku dowolnego programu - czy też czegoś mi brakuje?

+5

Jeśli nie chcesz, bezpieczny, nie używaj HTTPS. Jeśli chcesz, aby był bezpieczny, nie próbuj wybierać swoich własnych funkcji bezpieczeństwa. – EJP

+0

jak @EJP powiedział: zwykle nie jest dobrym pomysłem osłabienie bezpieczeństwa. Często jednak my, jako programiści, musimy także zapobiegać dyskretnej awarii aplikacji. Powinieneś więc upewnić się, że jeśli program się nie powiedzie, przyczyna stanie się oczywista dla każdego administratora zajmującego się tym problemem lub możesz spróbować wychwycić wyjątki, które wystąpiły z wygasłych certyfikatów lub wymuszać z twojego kodu, które certyfikaty są akceptowane: http: // stackoverflow.com/questions/6659360/how-to-solve-javax-net-ssl-sslhandshakeexception-error – Marged

+0

Jeśli masz polecenie openssl w swoim środowisku (zainstaluj). możesz go używać jako aplikacji w tle w cmd z [sprawdzić datę] (http://stackoverflow.com/questions/21297853/how-to-determine-ssl-cert-expiration-date-from--pem-encoded-certyfikat # answer-21297927) i przeczytaj wynik: –

Odpowiedz

1

można ominąć wszystkie certyfikaty kodem poniżej

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

Wiem to. Jednak tego nie szukam. – user93353

+0

Czy możesz wyjaśnić więcej, co chcesz –

+0

Chcę wiedzieć, czy wygaśnięcie certyfikatów z podpisem własnym jest zawsze ignorowane, jeśli certyfikat z podpisem własnym jest obecny w magazynie zaufania – user93353