2012-01-13 2 views
1

У меня есть приложение TOMCAT, вызывающую МПМ прошел SSL включен, клиент аутентификации включен WebserviceКак настроить SSL-сокет для javax.xml.ws.Service?

Это приложение Tomcat разговаривает с несколькими wenservices и, вероятно, каждый из них требуют клиента AUTH наряду с проверкой подлинности PKI.

Для IIS Webservice WSDL-адрес может меняться, следовательно, я использую

javax.xml.ws.Service (URL, QName) конструктор, передавая URL для WSDL ...

Вещь Мне нужно вызвать выше с помощью SSL с пользовательским ключом клиента. Как я могу сказать указанному конструктору использовать sslsocket, который я создаю с помощью моего настраиваемого KeyManager? Я не хочу использовать HttpsURLConnection.setDefaultSSLSocketFactory, так как это обеспечит выполнение другого исходящего ssl-соединения, которое будет следовать моему менеджеру ключей, который является эксклюзивным для веб-службы IIS. Спасибо за ваш ответ.

+0

Разве это не так, как ваш предыдущий вопрос с более подробной информацией? http://serverfault.com/q/349392/47187 (Как я подозревал при написании моего ответа там, это становится вопросом для StackOverflow: вы можете отметить этот вопрос и попросить его перенести). – Bruno

ответ

2

Если вы будете следовать ответ на your similar question on ServerFault и убедитесь, что для Tomcat <Connectors /> не использовать javax.net.ssl свойства, устанавливая хранилище ключей для ключа менеджера по умолчанию не может быть конец света. HttpsURLConnection s будет только аутентифицироваться вместе с ним на сервере, который его запрашивает (аутентификация сертификата клиента всегда запрашивается сервером) и запрашивает сертификат клиента из списка CA, который будет соответствовать эмитенту вашего сертификата. На практике это может быть не такой большой проблемой.

Если вы считаете, что это слишком большая проблема, похоже, есть undocumented property под названием com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory. Его документация выглядит следующим образом:

Установите это свойство на BindingProvider.getRequestContext(), чтобы включить HttpsURLConnection.setSSLSocketFactory (SSLSocketFactory). Собственность устанавливается следующим образом:

SSLSocketFactory sslFactory = ...; Карта ctxt = ((BindingProvider) proxy) .getRequestContext(); ctxt.put (SSL_SOCKET_FACTORY, sslFactory);

ЭТО СОБСТВЕННОСТЬ ЭКСПЕРИМЕНТАЛЬНО И МОЖЕТ ИЗМЕНИТЬСЯ БЕЗ ПРЕДУПРЕЖДЕНИЯ В БУДУЩЕЕ.

Смежные вопросы