2010-08-18 32 views

Trả lời

31

Có một ví dụ tại Ví dụ Depot cho thấy cách lấy Tập hợp chứng chỉ gốc và lặp qua chúng được gọi là Listing the Most-Trusted Certificate Authorities (CA) in a Key Store. Đây là một phiên bản được sửa đổi một chút, in ra từng chứng chỉ (được thử nghiệm trên Windows Vista).

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.security.InvalidAlgorithmParameterException; 
import java.security.KeyStore; 
import java.security.KeyStoreException; 
import java.security.NoSuchAlgorithmException; 
import java.security.cert.CertificateException; 
import java.security.cert.PKIXParameters; 
import java.security.cert.TrustAnchor; 
import java.security.cert.X509Certificate; 
import java.util.Iterator; 


public class Main { 

    public static void main(String[] args) { 
     try { 
      // Load the JDK's cacerts keystore file 
      String filename = System.getProperty("java.home") + "/lib/security/cacerts".replace('/', File.separatorChar); 
      FileInputStream is = new FileInputStream(filename); 
      KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
      String password = "changeit"; 
      keystore.load(is, password.toCharArray()); 

      // This class retrieves the most-trusted CAs from the keystore 
      PKIXParameters params = new PKIXParameters(keystore); 

      // Get the set of trust anchors, which contain the most-trusted CA certificates 
      Iterator it = params.getTrustAnchors().iterator(); 
      while(it.hasNext()) { 
       TrustAnchor ta = (TrustAnchor)it.next(); 
       // Get certificate 
       X509Certificate cert = ta.getTrustedCert(); 
       System.out.println(cert); 
      } 
     } catch (CertificateException e) { 
     } catch (KeyStoreException e) { 
     } catch (NoSuchAlgorithmException e) { 
     } catch (InvalidAlgorithmParameterException e) { 
     } catch (IOException e) { 
     } 
    } 
} 
+1

ok, tôi sẽ cố gắng này ra. (thời gian trôi qua) Nó hoạt động. Bạn biết đấy, điều đáng buồn là mật khẩu cho kho khóa mặc định thực sự là 'thay đổi'. Cảm ơn. –

+5

Bạn biết mật khẩu tốt hơn cho kho khóa mặc định? –

+0

có cách nào để thay đổi mật khẩu mặc định không ?? –

3

này cần được linh hoạt hơn bằng cách sử dụng cửa hàng tin cậy mặc định trong hệ thống để có được tất cả các chứng chỉ:

TrustManagerFactory trustManagerFactory = 
    TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
List<Certificate> x509Certificates = new ArrayList<>(); 
trustManagerFactory.init((KeyStore)null);     
Arrays.asList(trustManagerFactory.getTrustManagers()).stream().forEach(t -> { 
        x509Certificates.addAll(Arrays.asList(((X509TrustManager)t).getAcceptedIssuers())); 
       }); 

`` `

+0

yêu cầu Android N – estoke

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