Как настроить сокет SSL для javax.xml.ws.Service? - PullRequest
1 голос
/ 14 января 2012

У меня есть приложение tomcat, которое запускает ssl, размещенный на IIS, клиентский веб-сервис с поддержкой аутентификации

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

Для веб-службы IIS URL wsdl может измениться, поэтому я использую

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

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

1 Ответ

2 голосов
/ 14 января 2012

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

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

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

SSLSocketFactory sslFactory = ...; Карта ctxt = ((BindingProvider) прокси-сервер) .getRequestContext (); ctxt.put (SSL_SOCKET_FACTORY, sslFactory);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...