2014-07-23 16 views
9

Làm cách nào để nhập chứng chỉ .p12 từ đường dẫn lớp vào kho khóa java? Đầu tiên tôi sử dụng InstallCert https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java và thực hiện một số thay đổi để chứng chỉ máy chủ sẽ được nhập vào kho khóa trong thư mục cài đặt java. Điều này hoạt động tốt nhưng bây giờ tôi muốn tải một chứng chỉ từ classpath của tôi.Nhập chứng chỉ .cer vào kho khóa

EDIT: Tôi chỉ cần sử dụng giấy chứng nhận cer, xem câu trả lời tiếp theo

+0

Khi bạn giải quyết câu hỏi của riêng mình, bạn nên đặt câu hỏi đó làm câu trả lời. Nó đã giúp tôi bởi vì đây là một vấn đề mà tôi sẽ phải đối phó trong một tương lai gần. Vì vậy, nó có thể giúp đỡ người khác. –

+0

Được rồi, vui lòng giúp những người khác :) – Pali

Trả lời

18

Câu trả lời:

InputStream certIn = ClassLoader.class.getResourceAsStream("/package/myCert.cer"); 

    final char sep = File.separatorChar; 
    File dir = new File(System.getProperty("java.home") + sep + "lib" + sep + "security"); 
    File file = new File(dir, "cacerts"); 
    InputStream localCertIn = new FileInputStream(file); 

    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
    keystore.load(localCertIn, passphrase); 
    if (keystore.containsAlias("myAlias")) { 
     certIn.close(); 
     localCertIn.close(); 
     return; 
    } 
    localCertIn.close(); 

    BufferedInputStream bis = new BufferedInputStream(certIn); 
    CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
    while (bis.available() > 0) { 
     Certificate cert = cf.generateCertificate(bis); 
     keystore.setCertificateEntry("myAlias", cert); 
    } 

    certIn.close(); 

    OutputStream out = new FileOutputStream(file); 
    keystore.store(out, passphrase); 
    out.close(); 

Đối với Java Web Start không sử dụng ClassLoader, sử dụng lớp itselfe:

InputStream certIn = Certificates.class.getResourceAsStream("/package/myCert.cer"); 
+0

+1 Thật tuyệt vời! :) –

+0

Cảm ơn bạn rất nhiều :) – Pali

+1

bất kỳ đầu mối nào để giải quyết vấn đề về truy cập bị từ chối? (mặc dù tôi là quản trị viên) java.io.FileNotFoundException: C: \ Program Files (x86) \ Java \ jre1.8.0_45 \ lib \ security \ cacerts (Truy cập bị từ chối) – lumo

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