如何用Java代碼來把SSL的認證自動匯入到Java的秘鑰隱藏檔(keystore)

來源:互聯網
上載者:User

我們在開發或者使用SSL的過程中,很多的軟體需要我們提供java的keystore,特別是一些基於Java的中介軟體產品。 我們常規的做法是JDK內建的工具命令(keytool)去做,比如,下面的例子
keytool -import -v -alias EnTrust2048 -file D:\certs\EnTrust2048.cer -keystore D:\certs\test.jks
keytool -import -v -alias EntrustCertificationAuthorityL1C -file D:\certs\EntrustCertificationAuthorityL1C.cer -keystore D:\certs\test.jks
keytool -import -v -alias test.com -file D:\certs\Service-now.com.cer -keystore D:\certs\test.jks

但是這種方式比較繁瑣,假設我們一個檔案夾下面有100個SSL的認證,那麼我們就要輸入100個類似於上面的命令。如果是檔案夾裡面套檔案夾

裡面還有認證,就更麻煩。那麼有沒有好的辦法呢。 筆者就跟大家分享一下如何用java的程式碼去實現。


import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.security.KeyStore;import java.security.cert.CertificateFactory;import java.security.cert.X509Certificate;import java.util.List;import javax.naming.ldap.LdapName;import javax.naming.ldap.Rdn;import javax.security.auth.x500.X500Principal;public class KeyStoreHelper {public static void createTrustJKSKeyStore(final String originalTrustFolder,final String jksTrustStoreLocation, final String password) {File keyStoreFile = new File(jksTrustStoreLocation);if (!keyStoreFile.exists()) {try {KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());keystore.load(null, password.toCharArray());File trustedFolder = new File(originalTrustFolder);File[] certs = trustedFolder.listFiles();if (certs != null) {for (File cert : certs) {CertificateFactory factory = CertificateFactory.getInstance("X.509");try {X509Certificate certificate = (X509Certificate) factory.generateCertificate(new FileInputStream(cert));X500Principal principal = certificate.getSubjectX500Principal();LdapName ldapDN = new LdapName(principal.getName());List<Rdn> rdns = ldapDN.getRdns();    for (Rdn rdn : rdns) {String type = rdn.getType();if (type.equals("CN")) {  keystore.setCertificateEntry((String) rdn.getValue(),certificate);                                    break;}                                 }} catch (Exception ex) {continue;   }}    }FileOutputStream fos = new FileOutputStream(jksTrustStoreLocation);keystore.store(fos, password.toCharArray());fos.close();} catch (Exception exp) {}}}/** * @param args */public static void main(String[] args) {KeyStoreHelper.createTrustJKSKeyStore("D:\\cacerts", "D:\\cacerts\\test.jks", "test123");}}


上面這個Java類可以協助我們做這個事情。同時我們還可以把這個協助方法開發一個可視化的程式,這樣就更加方便,下圖就是筆者自己開發的一個Eclipse Plugin外掛程式

的介面設計。





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.