Проблема SSL-соединения с веб-сервисом из Java bean - PullRequest
4 голосов
/ 26 августа 2010

Я написал приложение, которое подключается к веб-службе SSL (включая сертификат клиента) через jaxws. Чтобы это работало, у меня есть wstrust.jks, который содержит доверенный корневой сертификат для ws, и client.p12, который является клиентским сертификатом для использования при подключении к ws. Затем я создал собственный SSLSocketFactory, чтобы иметь возможность использовать мои wstrust.jks и client.12 при подключении к ws. Я говорю jaxws использовать мою реализацию:

[javax.xml.ws.BindingProvider] .getRequestContext (). Put (JAXWSProperties.SSL_SOCKET_FACTORY, customSSLSocketFactory);

Все работает как шарм, если я запускаю его как отдельное java-приложение. Однако, когда я использую ту же технику внутри Java-бина (JSF), развернутого как war-файл, работающий под Tomcat, я получаю "Ошибка построения пути PKIX".

НО Если я настраиваю SSL через JAVA_OPTS, когда я запускаю свой Tomcat (через параметры -Djavax.net.ssl. *), Я заставляю его работать.

Итак, мой вопрос:

Как мне (или возможно ли) заставить мою методику custom-SSLSocketFactory работать внутри Java-компонента?

Я предполагаю, что tomcat оборачивается вокруг моего приложения, когда оно работает как bean-компонент, оно работает по-другому, и мое желание использовать пользовательский SSLSocketFactory не выполняется ...

Спасибо за любой вклад в этом!

/ Tobbe

1 Ответ

2 голосов
/ 27 августа 2010

Решил это.Если у кого-то есть такая же проблема, вот как.Вместо того, чтобы устанавливать свою собственную фабрику через:

[javax.xml.ws.BindingProvider] .getRequestContext (). Put (JAXWSProperties.SSL_SOCKET_FACTORY, customSSLSocketFactory);

Мне пришлось установить его через

HttpsURLConnection.setDefaultSSLSocketFactory (customSSLSocketFactory);

в противном случае это может игнорироваться.

/ Tobbe

...