我使用以下代码通过使用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);
}
答案 0 :(得分:0)
我想将证书直接导入到Java KeyStore中,以便我可以将其用于验证
通常,您使用自定义X509TrustManager
并覆盖checkServerTrusted
。在checkServerTrusted
中,您可以执行诸如验证链完全回到您的受信任根目录,或者固定服务器的公钥。
通过在应用程序中构建逻辑,可以避免与密钥库交互相关的问题(例如用户删除所需的证书);以及与CA /浏览器(CA / B)模型相关的风险(包括数百个根和下属并信任它们)。
有人说“信任”是指您没有任何安全控制权时所使用的内容。在这种情况下,自定义X509TrustManager
是所需的控件,并且不需要像CA / B模型那样信任其他人。