【发布时间】:2012-10-27 07:57:55
【问题描述】:
我的本地开发机器上有一个有效的密钥库,其中包含用于通过 HTTPS 访问网络服务的证书。
我通过以下方式在我的项目中访问此密钥库:
System.setProperty("javax.net.ssl.truststore", "C:\\<workspaceprojectPath>\\SIPkeystore\\truststore.jks"); // sollte wohl auch ohne Keystore klappen
System.setProperty("javax.net.ssl.keyStore", "C:\\<workspaceprojectPath>\\SIPkeystore\\SIPkeystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "SECRET");
现在我想从另一个项目访问该证书。我在另一个(本地)项目目录中提供了相同的(完整)路径到密钥库。
显然 jvm 仍然可以找到路径并且正在设置属性,但是在访问 Web 服务时,我收到了相同的错误消息,就好像我根本没有添加密钥库一样。
当尝试运行应用程序时,我得到一个
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
certification path to requested target
是否可以复制现有的密钥库?当我们将应用程序部署到我们的服务器时,这也很重要。该应用程序将作为独立 jar 运行。 (无网络服务器)
编辑: 好的,复制密钥库似乎不是问题,因为我可以在使用原始密钥库文件的本地副本时运行原始应用程序。好像是配置问题。
【问题讨论】:
-
您确定在第二个项目中连接到同一个 Web 服务吗?
-
您确定将签名证书添加到 trustStore 而不是 keyStore? (只是问,因为我已经这样做了,想知道为什么它不起作用!)
-
@Devon_C_Miller:我将它添加到密钥库中。我认为信任库只是为了确保密钥库是可信的。您能否进一步详细说明。谢谢
-
密钥库保存所有私钥和相应的证书。信任库保存受信任签署证书的机构的证书。此外,如果您添加的证书没有 -trustcacerts 标志,则在尝试构建 PKIX 路径时将不会考虑它。