如何在不安装到密钥库的情况下连接到SSL证书Webservice?

时间:2016-03-09 09:45:24

标签: java web-services ssl

我正在尝试连接到需要SSL证书的PKCS12网络服务。

问题:是否可以不将证书安装到本地密钥库,而是在运行时动态加载?

我尝试如下:

static {
        KeyStore.getInstance("PKCS12").load(this.getClass().getClassLoader()
           .getResourceAsStream("myfile.p12"), "password".toCharArray());
}

但结果是:

  

sun.security.validator.ValidatorException:PKIX路径构建失败。   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径。

显然它不起作用。但为什么呢?

旁注:链接的SO问题没有回答我的问题,因为它定位trustStore,但我的问题是关于keystore

2 个答案:

答案 0 :(得分:1)

此问题与此代码无关。您的信任库不信任服务器的证书。如果它是自签名的,您将必须导入它。更好的是,让它由CA签名。

答案 1 :(得分:-1)

问题在于虽然您的密钥库已经创建并加载了您的客户端证书(假设一切都很好),但SSLContext未配置为使用它。

尝试:

Keystore keystore = KeyStore.getInstance("PKCS12").load(this.getClass().getClassLoader()
       .getResourceAsStream("myfile.p12"), "password".toCharArray());
SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore,"password".toCharArray()).build();
SSLContext.setDefault(sslcontext);