(这是Java 7。)
我们正在考虑使用javax.xml.soap.SOAPConnection
及其相关内容来做一些相对快速和脏的SOAP消息发送和接收。
但是,将要连接的服务器使用默认Java 7信任库中信任锚为不的证书。我们不想修改默认信任库,而是想使用自定义信任库。
如果我们在较低级别工作,我们可以做一些事情,例如获取SSLContext
,使用自定义信任库重新初始化它,从中获取SSLSocketFactory
等等。
但是从SOAPConnection
API和相关类的API中可以看到,没有明显的方法可以更改SSLContext
实现使用的SOAPConnection
实例。我可以更改默认上下文,但这会改变JVM范围内的事情,这不是我们想要发生的事情。
如果我们想使用SOAPConnection
,我们是否只是运气不好?是否允许您相对简单地创建SOAP请求的任何其他库,但是您是否允许指定要使用的SSLContext
或SSLSocketFactory
?
答案 0 :(得分:2)
其他研究清楚地表明,在SOAP类中没有办法做到这一点 - 它们总是使用JVM范围的默认值。
所以我最终使用this answer中的方法,在那里你创建了一个自定义信任管理器,它由两个信任管理器组成 - 一个是从默认信任库构建的,一个是从自定义信任库构建的 - 然后注入复合信任管理器进入默认的SSLContext
。
答案 1 :(得分:0)
是的,有可能。运行java应用程序时,请传递trust-store / key-store详细信息,如下所示。在您的正常执行代码后附加。
-Djavax.net.ssl.keyStore=myKS.jks -Djavax.net.ssl.keyStorePassword=123456 -Djavax.net.ssl.trustStore=myTS.jks -Djavax.net.ssl.trustStorePassword=123456