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

Java 是否可以将自定义信任库与SOAPConnection一起使用?,java,ssl,soap,certificate,truststore,Java,Ssl,Soap,Certificate,Truststore,(这是Java 7的特点。) 我们正在考虑使用javax.xml.soap.SOAPConnection及其相关内容来相对快速地发送和接收soap消息 但是,将要连接的服务器在默认Java 7信任库中使用信任锚点为而不是的证书。我们不希望修改默认信任库,而是希望使用自定义信任库 如果我们在较低的级别工作,我们可以做一些事情,比如获取SSLContext,使用自定义信任库重新初始化它,从中获取SSLSocketFactory,等等 但是从SOAPConnectionAPI和相关类的API中可以看到

(这是Java 7的特点。)

我们正在考虑使用
javax.xml.soap.SOAPConnection
及其相关内容来相对快速地发送和接收soap消息

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

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

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


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

是的,这是可能的。运行java应用程序时,传递信任存储/密钥存储详细信息,如下所示。将以下内容附加到您的正常执行代码中

-Djavax.net.ssl.keyStore=myKS.jks -Djavax.net.ssl.keyStorePassword=123456  -Djavax.net.ssl.trustStore=myTS.jks   -Djavax.net.ssl.trustStorePassword=123456  

额外的研究非常清楚地表明,在SOAP类中无法做到这一点——它们总是使用JVM范围的默认值


因此,我最终使用了一种方法,即创建一个自定义trustmanager,它是两个trustmanager的组合--一个是从默认truststore构建的,另一个是从自定义truststore构建的--然后将该组合trustmanager注入默认的
SSLContext

谢谢,但这并不能真正解决具体问题。正如我在问题中所说,“……但这改变了我们不希望发生的事情”。您建议的解决方案将更改整个JVM的信任库。