2015-07-02 19 views
9

Sertifika tarafından korunan bir web hizmeti var. Bu kodu alan istemci kodunda, sertifikanın CA'sı güven deposunda (JRE_path \ lib \ security \ cacerts) sunmalıdır - eğer değilse, istemci tarafında PKIX istisnasını alırsınız.Web servisini çağırarak süresi dolmuş kendi imzasını taşıyan bir sertifikaya güvenme

Sertifika süresi dolduğunda ne olur - istemci kodu başarısız olur. Sertifika kendisi değil CA truststore mevcutsa, yeniden Trusting an expired certificate

yani, sonra her şey sertifikasının süresi olsa dahi çalışır -

Ancak bu truststore doğrudan sertifikasını ekleyerek atlanabilir.

Benim durumumda, webservice sertifikası kendinden imzalı bir sertifikadır, bu yüzden onu yine de güven deposuna eklemeliydim ve istemci, sertifikanın süresi dolduğunda bile iyi çalışmaya devam ediyor.

Şimdi benim sorum bu tüm senaryolarda işe yarayacak - programım yerel bir JRE'nin çalıştırıldığı bir komut satırı programıdır.

Web servisini çağıran bir uygulama olması durumunda ve uygulama Websphere, JBoss, WebLogic, Tomcat, Glassfish vb. Üzerinde çalışıyorsa ve o ortamın güvenicisine kendinden imzalı sertifika eklendiyse, hala devam edeceğini varsayabilir miyim? çalışmak (süresi dolmuş hataları vermez)?

Çalışacağını varsayalım - çünkü bu uygulama sunucuları JRE'yi herhangi bir programda olduğu gibi kullanacaklar - ya da bir şeyi özledim mi? Eğer güvenli HTTPS kullanmayan istemiyorsanız

+5

bütün sertifikaları atlayabilir. Güvende olmasını istiyorsanız, kendi güvenlik özelliklerinizi seçmeye çalışmayın. – EJP

+0

gibi @EJP şunları söyledi: güvenliği zayıflatmak genellikle iyi bir fikir değildir. Ancak çoğu zaman programcılar da uygulamaların sessizce başarısız olmasını engellemek zorundayız. Bu nedenle, eğer program başarısız olursa, bu soruna bakan herhangi bir yöneticinin nedeninin netleşeceğinden emin olmalısınız ya da süresi geçmiş sertifikalardan kaynaklanan istisnaları veya kodunuzun kabul edildiği sertifikaların içinden gelen zorlamaları yakalamaya çalışabilirsiniz: http: // stackoverflow.com/questions/6659360/how-to-solve-javax-net-ssl-sslhandshakeexception-error – Marged

+0

Ortamınızda openssl komutunuz varsa (kurun). [tarih kontrolü] ile arka plan cmd arka plan uygulaması olarak kullanabilirsiniz (http://stackoverflow.com/questions/21297853/how-to-determine-ssl-cert-expiration-date-from-a-pem-encoded-certificate # answer-21297927) ve sonucu okuyun –

cevap

1

Aşağıdaki kodu

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

Bunu biliyorum. Ancak, aradığım şey bu değil. – user93353

+0

İstediğin şeyin ne olduğunu netleştirebilir misin –

+0

Kendinden imzalı sertifikaların geçerliliğinin sona erdiğini bilmek istiyorum Kendini imzalı cert güven mağazada varsa – user93353

İlgili konular