Ошибка при использовании защищенного базового веб-сервиса SOAP в JAVA - PullRequest
0 голосов
/ 31 января 2019

Я новичок в JAVA , использую веб-сервис (.wsdl) в Клиент веб-службы проект.Я импортирую сертификат клиента в java cacerts store в jrd .Мой код выглядит следующим образом:

        System.setProperty("javax.net.ssl.trustStore","[PATH]/cacerts.jks");
        System.setProperty("javax.net.ssl.trustStorePassword","changeit");

        ServicesProxy service = new ServicesProxy();
        ServiceRequest request = new ServiceRequest(1498);
        ServiceResponse response = service.getDetails(request);

Мне не удалось рукопожатие, я получаю следующее исключение:

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
    PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException: 
    unable to find valid certification path to requested target

Понятия не имею, почему существует исключение.Любая помощь будет оценена.

Ответы [ 6 ]

0 голосов
/ 09 февраля 2019

Привет. Похоже, сертификаты не импортированы правильно, или путь, используемый в коде, не указывает на правильное хранилище ключей.

Надеюсь, что следующие шаги в следующей статье помогут вам.

http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html

0 голосов
/ 08 февраля 2019

Полагаю, ваш код неверен или путь недоступен.Я следовал приведенным инструкциям здесь

Использование SSL Poke для проверки подключения

  1. Загрузка SSLPoke.class
  2. Выполните класс следующим образом, изменив URL и порт:

    $ JAVA_HOME / bin / java SSLPoke yoururl 443

  3. Успешное соединение будет выглядеть так:

    $ JAVA_HOME / bin / java SSLPoke yoururl 443

    Успешно подключено

  4. Попробуйте использовать другое хранилище доверенных сертификатов для подключения

    $ JAVA_HOME / bin / java -Djavax.net.ssl.trustStore = [PATH] /cacerts.jks SSLPoke yoururl 443

В случае сбоя хранилище доверенных сертификатов не содержит надлежащих сертификатов.

Как его решить

Решение извлечено из здесь

  1. Получить сертификат снова с сервера:

    openssl s_client -connect yoururl: 443

Вам нужен openssl.Сохраните вывод в файл с именем public.crt.Вот как должен выглядеть ваш файл:

     -----BEGIN CERTIFICATE-----
     < Bunch of lines of your certificate >
     -----END CERTIFICATE-----

Импорт сертификата:

$ JAVA_HOME / bin / keytool -import -alias -keystore $ JAVA_HOME / jre / lib / security / cacerts -file public.crt

Введите пароль, если будет предложено (по умолчанию - changeit)

Рекомендация

В этом же посте не рекомендуетсяиспользуйте настроенное хранилище доверенных сертификатов, отличное от Cacert JVM, поскольку тогда Java не сможет получить доступ к другим корневым сертификатам.

0 голосов
/ 07 февраля 2019

Это довольно распространенная ошибка при работе с сервисами мыла через SSL, у меня это было несколько раз.

Возможно, ваш сертификат установлен неправильно в вашем хранилище доверенных сертификатов.

Вы можете использовать openssl для проверки и установки правильного сертификата в хранилище доверенных сертификатов, как объяснено здесь

0 голосов
/ 07 февраля 2019

Вместо этого используйте свойство -Djavax.net.ssl.trustStore напрямую.

Еще одна вещь, на которой вы используете сервер, также вам нужно разместить jks для рукопожатия.

Например, серверэто JBoss, то бин

0 голосов
/ 05 февраля 2019

Возможно, вам придется добавить цепочку ключей в сертификат (формат PEM).

CA Root -> промежуточный сертификат -> сертификат.

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

И я не распознаю используемую вами реализацию SOAP JAX-WS.

0 голосов
/ 02 февраля 2019

Не решение вашей проблемы, но, возможно, это поможет найти его: вы можете запустить свой клиент с параметром виртуальной машины -Djavax.net.debug=all, который даст вам много информации о соединении SSL.

Проверказдесь для деталей о выходе:

https://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/ReadDebug.html

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