是否可以将自定义信任库与 SOAPConnection 一起使用?

Is it possible to use custom truststore with SOAPConnection?

(这是 Java 7.)

我们正在考虑使用 javax.xml.soap.SOAPConnection 及其相关的东西来完成一些相对快速和肮脏的 SOAP 消息发送和接收。

但是,这将要连接的服务器使用的证书在默认 Java 7 信任库中的信任锚是 而不是 。我们不想修改默认信任库,而是想使用自定义信任库。

如果我们在较低级别工作,我们可以做一些事情,例如获取 SSLContext、使用自定义信任库重新初始化它、从中获取 SSLSocketFactory 等等。

但是从我在 SOAPConnection API 和关联 类 的 API 中看到的情况来看,没有明显的方法来改变 SSLContext SOAPConnection 实现使用的实例。我可以更改默认上下文,但这会改变 JVM 范围内的事情,这不是我们想要发生的事情。

如果我们想使用 SOAPConnection 是不是运气不好?任何其他库可以让您相对简单地创建 SOAP 请求,但可以让您指定要使用的 SSLContextSSLSocketFactory

是的,这是可能的。当 运行 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  

其他研究非常清楚地表明,在 SOAP 中无法做到这一点 类 -- 他们总是使用 JVM 范围内的默认值。

所以我最终使用了 this answer 中的方法,您创建了一个由两个信任管理器组合而成的自定义信任管理器——一个是从默认信任库构建的,另一个是从自定义信任库构建的——然后将该复合信任管理器注入默认 SSLContext.