2012-03-01 45 views
18

Ứng dụng java của tôi sử dụng tệp kho khóa trong đó tôi có chứng chỉ được sử dụng trong kết nối ssl với máy chủ thư mục hoạt động. Những gì tôi phải làm là kiểm tra ngày hết hạn và người dùng nhanh chóng nếu nó hết hạn. Tôi phải làm điều đó trong khi ứng dụng của tôi bắt đầu. Ý tưởng của tôi là sử dụng chương trình bên ngoài: keytool để hiển thị thông tin về chứng chỉ nhất định trong kho khóa và sau đó thực hiện một số hoạt động phân tích cú pháp trên chuỗi mà công cụ khóa đầu ra để tìm ngày xác thực này.Kiểm tra chứng chỉ ngày hết hạn trong kho khóa java

Đây là sản phẩm của một lệnh keytool cụ thể:

Owner: 
Issuer: CN=CPD Root CA, DC=cpd, DC=local<br> 
Serial number: 39e8d1610002000000cb 
<br>Valid from: Wed Feb 22 21:36:31 CET 2012 until: Thu Feb 21 21:36:31 CET 2013 
Certificate fingerprints: <br> 
     MD5: 82:46:8B:DB:BC:5C:64:21:84:BB:68:E3:4B:D4:35:70<br> 
     SHA1: 35:52:CA:F2:11:66:1E:50:63:BC:53:A5:50:C1:F0:1E:62:81:BC:3F<br> 
     Signature algorithm name: SHA1withRSA 

Vấn đề sẽ có ngày phân tích kể từ khi tôi không thể chắc chắn trong đó định dạng nó được hiển thị.

Có cách nào dễ dàng hơn để kiểm tra ngày hết hạn chứng chỉ được bao gồm trong tệp kho khóa java không?

Trả lời

7

Sử dụng lớp java.security.Keystore để tải kho khóa và liệt kê nội dung của nó và kiểm tra từng chứng chỉ hết hạn.

+0

Cảm ơn bạn đã giải quyết được sự cố. –

20

Cảm ơn bạn đã hướng EJP, đây là một khối những gì tôi nghĩ ra.

try { 
     KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
     keystore.load(new FileInputStream("keystoreLocation"), "keystorePassword".toCharArray()); 
     Enumeration<String> aliases = keystore.aliases(); 
     while(aliases.hasMoreElements()){ 
      String alias = aliases.nextElement(); 
      if(keystore.getCertificate(alias).getType().equals("X.509")){ 
       System.out.println(alias + " expires " + ((X509Certificate) keystore.getCertificate(alias)).getNotAfter()); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+1

Trong đoạn mã trên, keystore.getCertificate (bí danh) có thể trả về null nếu mục nhập không chứa mục nhập chứng chỉ. Nó cũng chỉ trả về mục nhập đầu tiên của chuỗi chứng chỉ, theo lý thuyết có thể có một chứng chỉ-thẩm quyền tiếp tục lên chuỗi hết hạn trước đó. –

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