Можно ли использовать пользовательский truststore с SOAPConnection?


(это с Java 7.)

Мы рассматриваем возможность использования javax.xml.soap.SOAPConnection и связанного с ним материала для относительно быстрой и грязной отправки и получения сообщений SOAP.

Однако сервер, к которому будет осуществляться подключение, использует сертификаты, якорями доверия которых являются , а не в хранилище доверия Java 7 по умолчанию. Мы не хотим изменять хранилище доверия по умолчанию, но вместо этого хотим использовать пользовательское хранилище доверия.

Если бы мы работали на более низком уровне, мы могли бы делать такие вещи, как получение an SSLContext, повторная инициализация его с помощью пользовательского truststore, получение из него SSLSocketFactory и так далее.

Но из того, что я вижу в API SOAPConnection и API связанных классов, нет очевидного способа изменить экземпляр SSLContext, который используют реализации SOAPConnection. Я мог бы изменить контекст по умолчанию, но это меняет вещи в масштабах JVM, а это не то, что мы хотим, чтобы произошло.

Неужели нам просто не повезло, если мы хотим использовать SOAPConnection тогда? Любые другие библиотеки, которые позволят вам создавать SOAP запросы относительно просты, но позволяют указать SSLContext или SSLSocketFactory для использования?

2 2

2 ответа:

Дополнительные исследования показывают довольно ясно, что нет никакого способа сделать это в пределах классов SOAP - они всегда используют общие значения по умолчанию для JVM.

Так что я в конечном итоге использовала этот подход в Ответ, где вам сделать заказ диспетчер trustmanager, которая представляет собой совокупность двух trustmanagers -- одна построена из умолчанию truststore и одной причине в пользовательском хранилище ... а потом впрыскивают что композитные диспетчер trustmanager в умолчанию SSLContext.

Да, это возможно. При запуске 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