2015-07-02 31 views
9

Có chứng chỉ web được bảo vệ bởi chứng chỉ. Trong mã máy khách gọi nó, CA của chứng chỉ phải xuất hiện trong truststore (JRE_path \ lib \ security \ cacerts) - nếu không, bạn sẽ nhận được ngoại lệ PKIX ở phía máy khách.Tin tưởng vào chứng chỉ tự ký đã hết hạn trong khi gọi một webservice

Điều gì xảy ra nếu chứng chỉ đã hết hạn - mã khách hàng không thành công.

Tuy nhiên, điều này có thể được bỏ qua bằng cách thêm giấy chứng nhận trực tiếp vào truststore - Trusting an expired certificate

Ví dụ: nếu giấy chứng nhận riêng của mình và không phải là CA có mặt trong truststore, sau đó mọi thứ hoạt động ngay cả khi chứng chỉ đã hết hạn.

Trong trường hợp của tôi, chứng chỉ webservice là một chứng chỉ tự ký, vì vậy tôi vẫn phải thêm nó vào truststore và máy khách tiếp tục hoạt động tốt ngay cả khi chứng chỉ đã hết hạn.

Bây giờ câu hỏi của tôi sẽ làm việc này trong mọi tình huống - chương trình của tôi chỉ là một chương trình dòng lệnh chạy của một JRE cục bộ.

Trong trường hợp có ứng dụng gọi webservice và ứng dụng đang chạy trên Websphere, JBoss, WebLogic, Tomcat, Glassfish vv và cert tự ký được thêm vào truststore của môi trường đó, tôi vẫn có thể giả định rằng nó sẽ tiếp tục để làm việc (không cung cấp lỗi đã hết hạn)?

Tôi cho rằng nó sẽ hoạt động - bởi vì các máy chủ ứng dụng đó cũng sẽ sử dụng JRE giống như bất kỳ chương trình nào - hoặc tôi thiếu gì đó?

+5

Nếu bạn không muốn nó an toàn, không sử dụng HTTPS. Nếu bạn muốn nó an toàn, đừng cố gắng chọn lựa các tính năng bảo mật của riêng bạn. – EJP

+0

như @EJP cho biết: thường không phải là một ý tưởng tốt để làm suy yếu an ninh. Nhưng thường thì chúng tôi là những người lập trình cũng phải ngăn không cho các ứng dụng bị mất âm thầm. Vì vậy, bạn nên đảm bảo rằng nếu chương trình không thành công sẽ trở nên rõ ràng đối với bất kỳ quản trị viên nào đang xem xét vấn đề này hoặc bạn có thể cố gắng nắm bắt các ngoại lệ xảy ra từ các chứng chỉ đã hết hạn hoặc bắt buộc từ bên trong mã của bạn mà chứng chỉ được chấp nhận: http: // stackoverflow.com/questions/6659360/how-to-solve-javax-net-ssl-sslhandshakeexception-error – Marged

+0

Nếu bạn có lệnh openssl trên môi trường của bạn (cài đặt nó). bạn có thể sử dụng nó làm ứng dụng nền cmd nền với [kiểm tra ngày tháng] (http://stackoverflow.com/questions/21297853/how-to-determine-ssl-cert-expiration-date-from-a-pem-encoded-certificate # answer-21297927) và đọc kết quả –

Trả lời

1

Bạn có thể bỏ qua tất cả các chứng chỉ theo mã dưới đây

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

Tôi biết điều này. Tuy nhiên, đó không phải là những gì tôi đang tìm kiếm. – user93353

+0

Bạn có thể làm rõ thêm những gì bạn muốn –

+0

Tôi muốn biết nếu hết hạn giấy chứng nhận tự ký luôn luôn bị bỏ qua nếu cert tự ký có mặt trong cửa hàng ủy thác – user93353

Các vấn đề liên quan