首页 文章

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

提问于
浏览
0

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

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

我尝试如下:

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 回答

  • 1

    该问题与此代码无关 . 您的信任库不信任服务器的证书 . 如果它's self-signed, you'将不得不导入它 . 更好的是,让它由CA签名 .

  • -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);
    

相关问题