【问题标题】:Import Certificates into Keystore将证书导入密钥库
【发布时间】:2014-02-13 10:52:51
【问题描述】:

我使用以下代码通过使用 URL 类的 url 链接来提取证书:

URL url = new URL("https://www.google.com/");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.connect();

我的问题是:我想将证书直接导入 java KeyStore,以便我可以使用它进行验证。我发现以下代码是完美的,但它需要已经下载证书:(有人可以帮我修改它。换句话说,将我以前的代码应用到以下方法中:

KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null); //Make an empty store
InputStream fis = /* insert your file path here */; 
BufferedInputStream bis = new BufferedInputStream(fis);

CertificateFactory cf = CertificateFactory.getInstance("X.509");

while (bis.available() > 0) {
    Certificate cert = cf.generateCertificate(bis);
    trustStore.setCertificateEntry("fiddler"+bis.available(), cert);
}

【问题讨论】:

    标签: java certificate keystore


    【解决方案1】:

    我想将证书直接导入 java KeyStore 以便我可以使用它进行验证

    通常,您使用自定义 X509TrustManager 并覆盖 checkServerTrusted。在checkServerTrusted 中,您可以执行诸如验证链是否完整返回您受信任的根,或固定服务器的公钥等操作。

    通过将逻辑构建到您的应用程序中,您可以避免与密钥库交互相关的问题(例如用户删除所需的证书);以及与 CA/浏览器 (CA/B) 模型相关的风险(包括数百个根和下属并信任它们)。

    有人说“信任”是在您没有任何安全控制可放置的情况下使用的。在这种情况下,自定义 X509TrustManager 是所需的控件,无需像 CA/B 模型中那样信任其他控件。

    【讨论】: