2015-07-09 2 views
1

Я написал клиент webservice и теперь не могу заставить его работать через https. Хотя я импортировал cert.pfx (alias = cert) в javas cacerts и успешно добавил запись с псевдонимом certs.импортировал сертификат.pfx в cacerts и все еще получал ошибку «PKIX ... не удалось найти допустимый путь сертификации к запрашиваемой цели». Что?

Тем не менее я не могу использовать приглашение wsimport на URL-адрес wsdl. В нем говорится: «Путь к PKIX не смог найти правильный путь сертификации для запрошенной цели. Ну ладно. Поэтому я немного исследовал и попытался установить его с помощью

setlocal set _JAVA_OPTIONS=%_JAVA_OPTIONS% -Djavax.net.ssl.trustStore="C:\Program Files\Java\jdk1.7.0_79\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=xxxxxxxxx -Djavax.net.ssl.keyStore="d:\cert.pfx" "C:\Program Files\Java\jdk1.7.0_79\bin\wsimport" -s C:\Users\me\keystore\bin\s -keep https://service.xxxxxxxxxxx.de/xxxxxxxxxxxxTest?wsdl endlocal

не имеет успеха.

Я также попытался экспортировать сертификат из файла cert.pfx, а затем импортировал сертификат в cacerts через keytool -exportcert и keytool -importcert. Позже я попытался экспортировать сертификаты из своего браузера (потому что мой браузер отлично справляется с сертификатами и может получить доступ к URL-адресу https). Я экспортировал корневой сертификат в файл root.cer и импортировал этот .cer в мои cacerts (мне пришлось использовать другой псевдоним, кроме сертификата. С сертификатом as alias у меня появилось сообщение «Keys not matching» в консоли при использовании keytool незамедлительный).

Дамп на cacerts показывает, что действительно есть запись в cacerts. Я не понимаю, почему Java отказывается делать wsimport по URL-адресу.

В конце концов я только что загрузил адресат url на свою машину и сделал wsimport в загруженном XML-файле, а затем изменил параметры url в сгенерированных заглушках. Не помогает, потому что когда я запускаю приложение im, запущенное в «PKIX ... неспособный найти допустимый путь сертификации к запрашиваемой цели».

+0

ли это веб-сервисы, которые требуют аутентификации клиента? Каково хранилище, которое вы используете с параметром -Djavax.net.ssl.keyStore? Кроме того, вы пытались получить цепочку сертификатов сервера с помощью инструмента командной строки openSSL? –

+0

Я попробую предложение openSSL. Кроме того, каково хранилище ключей, которое я должен использовать с djavax.net.ssl.keystore. Я использовал файл cert.pfx. Я также попытался оставить его и использовать только truststore -Djavax.net.ssl.trustStore = путь к моим cacerts. Разве это не избыточно? Arent im должен использовать enviromentvariables, когда я хочу, чтобы Java явно загружала что-то еще, чем его cacerts? –

+0

У меня есть что-то для запуска. Я экспортировал корневой сертификат из Chrome-браузера (щелкните правой кнопкой мыши в браузере и нажмите «показать информацию о сайте» -> соединения -> показать сертификаты -> правая регистрационная карточка (выбрать корневой сертификат) -> средняя регистрационная карточка-> копировать в файл-> создать .cer), затем я импортировал его в cacerts. Впоследствии я смог сделать wsimport на wsdl-url, а также запустить моего клиента против сервера. (Хотя у меня были ошибки таймаута http) –

ответ

1

Вам необходимо также импортировать сертификат * .der в хранилище ключей, прежде чем пытаться изменить параметры jvm.

Вот общее резюме о том, как импортировать сертификаты исправить следующую ошибку:

Error while trying to execute 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

Как импортировать сертификаты

  1. Перейти к URL в вашем браузере, нажмите на HTTPS цепь сертификата (символ блокировки рядом с адресом URL) до экспорт сертификата
    • Нажмите «подробнее»> «безопасность»> «показать сертификат»> «подробнее»> «экспорт ..».
    • Сохранить как .der
    • Повторите для всех сертификатов, которые необходимо импортировать
  2. Расположить $ JAVA_HOME/JRE/LIB/безопасность/cacerts
  3. Импортировать все *.дер файлы в файл cacerts, используя следующий:

    sudo keytool -import -alias mysitestaging -keystore $JAVA_HOME/jre/lib/security/cacerts -file staging.der 
    sudo keytool -import -alias mysiteprod -keystore $JAVA_HOME/jre/lib/security/cacerts -file prod.der 
    sudo keytool -import -alias mysitedev -keystore $JAVA_HOME/jre/lib/security/cacerts -file dev.der 
    
  4. по умолчанию хранилища ключей пароля «changeit»

  5. Вы можете просмотреть изменения, которые вы сделали с этой командой, которая показывает отпечаток сертификата ,

    keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts 
    
  6. Если это не решает проблему, попробуйте добавить эти опции Java в качестве аргументов:

    -Djavax.net.ssl.trustStore="$JAVA_HOME/jre/lib/security/cacerts" 
    -Djavax.net.ssl.trustStorePassword="changeit"