【发布时间】:2012-03-14 10:48:43
【问题描述】:
我已经使用证书成功设置了 SSL 身份验证:配置了 Apache http-client,配置了服务器(weblogic,CLIENT-CERT login-config,如果重要的话),测试它是否有效。
但是,在客户端代码中,我必须硬编码信任存储的路径(手动初始化 TrustManagerFactory 或通过相应的 JVM 属性)及其密码,我觉得它不正确。此外,证书必须在客户端手动注册keytool,这也不是那么灵活。
那么,有没有办法完全避免这一切?理想情况下,客户端将捆绑有证书文件,并在请求时将其发送到服务器。我试图用谷歌搜索它,但从未找到如何手动流式传输证书文件。
更新
按照here 的建议,我尝试将证书文件读入没有密码的新密钥库,并使用此密钥库初始化KeyManagerFactory 和TrustManagerFactory:
CertificateFactory cf = CertificateFactory.getInstance("X509");
Certificate cer = cf.generateCertificate(new FileInputStream("myFile.cer"));
KeyStore defaultKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
defaultKeyStore.load(null, "".toCharArray());
defaultKeyStore.setCertificateEntry("alias", cer);
trustManagerFactory.init(defaultKeyStore);
keyManagerFactory.init(defaultKeyStore, "".toCharArray());
SSLContext ctx = SSLContext.getInstance("SSL");
ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
但它没有用。通常的例外“对等体未通过身份验证”。我猜是因为我也需要相应的私钥,但是没有办法得到它......
【问题讨论】:
-
自己的证书的私钥拿不到?那没有意义。不清楚你在问什么。
标签: java ssl ssl-certificate