2013-06-27 2 views
2

Мне предоставили SOAP WS для работы. Они дали мне файл wsdl, из которого я смог создать клиентский заглушку (я использовал утилиту wsdl2java в cxf).Используйте файл хранилища ключей для запуска клиента для SOAP WS

С этим wsdl мне также был предоставлен файл .keystore, и я знаю, как добавить его в свой keytool (это даже правильный способ его поместить?).

Я построил JUnit тест, что я бегу, чтобы проверить мой клиент, но я постоянно получаю ошибку

HTTP транспорта: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX путь не удалось: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели

Где я могу найти простой справочник о том, что делать с этим файлом .keystore?

Благодаря

ответ

0

Отличного блог, чтобы помочь вам понять Хранилище ключей и сертификаты на импорт необходимый для HTTPS SSL рукопожатия:

http://ruchirawageesha.blogspot.in/2010/07/how-to-create-clientserver-keystores.html

Надеется, что это поможет вам установить уры клиента хранилище ключи правильно, чтобы вызвать веб-сервисы. Удачи!

+0

нормально, это очень круто. но у меня есть только один файл .keystore и у меня нет доступа к стороне сервера – user1241320

3

Ошибка означает, что сертификат сервера не найден в вашем доверенном магазине. Проверьте содержимое файла .keystore, чтобы узнать, содержит ли он сертификат сервера (указанный в truststore как trustedEntry). Если да, установите следующие системные свойства (используя параметр -D JVM или System.setProperty()).

javax.net.ssl.trustStore=<<your .keystore>> 
javax.net.ssl.trustStorePassword=<<keystore password>> 

Если эти свойства не установлены, те по умолчанию будет выбран из вашего местоположения по умолчанию. [$ JAVA_HOME/Библиотека/безопасность/jssecacerts, $ JAVA_HOME/Библиотека/безопасность/cacerts]

Для того, чтобы просмотреть содержимое файла хранилища ключей, используйте

keytool -list -v -keystore file.keystore -storepass mypassword 

Для отладки процесса диалога SSL и просмотра сертификатов, установите параметр VM -Djavax.net.debug = все

Если веб-службе требуется двухсторонний SSL, клиент должен отправить свою личность (выбранную из хранилища ключей). В этом случае ваш .keystore будет содержать privateKeyEntry, который будет отправлен на сервер в процессе рукопожатия. Чтобы настроить это, задайте свойства JVMM javax.net.ssl.keyStore и javax.net.ssl.keyStorePassword, чтобы указать на хранилище ключей.

+0

hello @ user1573133, мне нужен двухсторонний SSL. Я устанавливаю выше свойства, но кажется, что мой privateKey не отправлен, никаких идей? Спасибо заранее, Luis – Gaucho

+0

привет, неправильный сертификат, извините, с вышеуказанными настройками он должен работать ... – Gaucho

2

Следующие работы для меня: конфигурации сервера

  1. Применение. Apache Tomcat/7.0.52. server.xml: set clientAuth = "true" в разъеме https.

  2. Конфигурация сервера приложений. Apache Tomcat/7.0.52. Пользователи tomcat.XML: обрешетка пользователь с DN пользователя, как он появляется в сертификате (при условии)

  3. Веб-сервис JAX-WS web service eclipse tutorial. Спасибо Арпиту! Добавьте это ограничение безопасности в дескриптор развертывания (web.xml)

  4. Клиент. Сгенерировано с плагином apache-cxf maven.

  5. Основной класс:

    HelloWorldImplService helloWorldImplService = new HelloWorldImplService(); 
    HelloWorld helloWorld = helloWorldImplService.getHelloWorldImplPort(); 
    SayHelloWorld parameters = new SayHelloWorld(); 
    parameters.setArg0("World"); 
    SayHelloWorldResponse helloWorldResponse = helloWorld.sayHelloWorld(parameters); 
    System.out.println(helloWorldResponse.getReturn()); 
    
  6. параметры клиента JVM:

    -Djavax.net.ssl.trustStore=/xxxx/cacerts.jks -Djavax.net.ssl.trustStorePassword=xxxx -Djavax.net.ssl.keyStore=/xxx/user.jks -Djavax.net.ssl.keyStorePassword=xxxx 
    

Вы можете посмотреть здесь: Java SOAP client with certificate authentication