2014-07-23 66 views
9

如何將.p12證書從類路徑導入到java密鑰庫中?首先,我使用InstallCert https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java並做了一些更改,以便將服務器證書導入java安裝目錄中的密鑰存儲區。這工作正常,但現在我想從我的類路徑加載證書。以編程方式將.cer證書導入密鑰存儲區

編輯:我只是用一個.cer證書,看下答案

+0

正如你解決了你自己的問題,你應該把它作爲一個答案。它幫助了我,因爲這是一個我不久將要面對的問題。所以它可以幫助別人。 –

+0

好的,很高興幫助其他人:) – Pali

回答

18

答案:

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(); 

對於Java Web Start的不使用的類加載器,使用類itselfe:

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

+1這就是了不起! :) –

+0

非常感謝:) – Pali

+1

任何線索如何解決訪問被拒絕的問題? (雖然我是管理員)java.io.FileNotFoundException:C:\ Program Files文件(x86)\ Java \ jre1.8.0_45 \ lib \ security \ cacerts(訪問被拒絕) – lumo

相關問題