我正在尝试连接到需要 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 回答
该问题与此代码无关 . 您的信任库不信任服务器的证书 . 如果它's self-signed, you'将不得不导入它 . 更好的是,让它由CA签名 .
问题是虽然您的密钥库已经创建并加载了您的客户端证书(假设一切都很好),但SSLContext未配置为使用它 .
尝试: