Я пытаюсь использовать HtmlUnit войти на сайт, который использует соединение HTTPS и я получаю сообщение об ошибке вызвано заявлениемНевозможно подключиться с помощью HtmlUnit на сайт, используя HTTPS
page = webClient.getPage(url);
Исключение составляет
error: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`
То, что я сделал до сих пор:
вывезенных отдельные сертификаты на веб-сайте» s цепочка сертификатов с помощью Firefox и импортировать их в хранилище ключей по умолчанию в JVM, используя Java-Keytool, например:
keytool -import -trustcacerts -alias root -file C:\Users\myUser\Desktop\Certificates\VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt -keystore C:\Program Files (x86)\Java\jre1.8.0_91\lib\security\cacerts
Начало нового хранилища ключей с помощью Java Keytool, и импортировать только соответствующий корень, промежуточный и конкретный веб-сайт сертификат.
Установить этот сертификат в хранилище сертификатов Java с использованием
System.setProperty("javax.net.ssl.trustStore", "C:/Users/Henry/workspace/AutoEtime/cacerts");
- попытался изменить версию браузера для Chrome, а затем Firefox
- Пытались использовать SSLPoke.class из confluence.atlassian.com, чтобы проверить, если сертификаты были правильные, но я не знаю, порта для подключения, и использование по умолчанию 433 дает
ConnectException: Connection timed out
Я не пробовал использовать любого из набросков других методов d в найденной документации WebClientOptions
here, потому что я не уверен, как использовать их для получения эффекта, который я хочу.
Одним из наиболее распространенных ответов, которые я видел в Интернете является предложение использовать webClient.setUseInsecureSSL(true);
Это прекрасно работает для тестирования моего приложения, однако мне нужно иметь соединение быть защищены с помощью SSL из-за чувствительности имя пользователя и пароли, которые я использую для подключения к веб-сайту.
Одна интересная вещь, которую я хочу добавить, заключается в том, что один из каждых 5-10 попыток фактически работает и не бросает исключение SSLHandshakeException, хотя я ничего не изменил в коде.
Как исправить эту проблему? Кроме того, почему он работает каждый раз в то время?
Порт по умолчанию для HTTPS - 443, а не 433. Ручное изменение/запись файлов в Windows под '\ Program Files' или' \ Program Files (x86) '- плохая идея; для новых версий Windows такие изменения могут не работать или работать только иногда, что _might_ объясняет ваше прерывистое поведение.Либо установите Java в другом месте (мне нравится 'c: \ Java'), либо используйте вторую пулю: создайте собственное хранилище ключей и укажите на него; вам потребуется только корневой сертификат (ы), если сервер ведет себя корректно, и убедитесь, что перед началом использования SSL в процессе JVM установите 'trustStore' (AND' trustStorePassword', если не 'changeit'). –
Возможно ли, что вы указали имя хоста, против которого вы пытаетесь? –
Вы были правы, Дейв, я набрал порт в неправильном как в моем вопросе, так и в качестве аргумента при запуске SSLPoke.class. Как только я изменил его и добавил сертификаты, он успешно подключился. –