以下是使用dev keystore调用第一个Web服务的示例代码
并使用阶段密钥库调用第二个Web服务。
public static void main(String args[]) {
System.setProperty("javax.net.ssl.trustStore",
"C:\\Users\\shahire\\Desktop\\Keystores\\Keystores\\dev\\dev.keystore");
System.out.println("1st web service call");
// 1st axis2 web service call code
System.setProperty("javax.net.ssl.trustStore",
"C:\\Users\\shahire\\Desktop\\Keystores\\Keystores\\stage\\stage.keystore");
System.out.println("2nd web service call");
// 2nd axis2 web service call code
}
我可以拨打第一个Web服务电话,但是访问第二个Web服务电话时出现错误提示
org.apache.axis2.AxisFault:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到到请求目标的有效证书路径
在org.apache.axis2.AxisFault.makeFault(AxisFault.java:417)
通过查看异常,我感觉它在缓存“ javax.net.ssl.trustStore”位置。
当我评论第一个Web服务呼叫时,便可以访问第二个Web服务。
最佳答案
只是要清楚。我不知道Axis2
是否实际上由于某些原因会“重用”或缓存,正如您所说的所提供的truststore系统属性;我最好的猜测是,它会在读取属性的引擎盖下初始化一些对象,并且在配置属性后无需再次读取它。
但是您可以通过将所有受信任的证书放在同一信任库中来解决此问题。这将彻底解决您的问题,因为正如您所说的,您实际上可以成功连接到第二个Web服务。
为什么首先使用不同的信任库?
如果有必要,由于某种安全性要求(您有一个?),您应该调查是否有其他Axis
的ssl属性,尤其是您没有使用的属性。