Я пытаюсь подключиться к веб-странице для сбора информации, и я использую jsoup для анализа HTML. Тем не менее, всякий раз, когда я пытаюсь подключиться к URL-адресу для загрузки источника, я получаю сообщение об ошибке в отношении пути сборки PKIX. Я огляделся, и все, что я нашел, говорит, что добавить сертификат CA Root на веб-сайт в мой магазин доверия, который я сделал, но проблема не устранена (сертификат CA Root уже был там). Я могу подключиться к веб-сайту через веб-браузер, но не через класс URL. Вот самый базовый код, который я мог бы написать, который приведет к ошибке.Ошибка при подключении к URL-адресу. Не удалось создать путь к PKIX.
public class URLConnectStart {
public static void main(String[] args) {
try {
URL u = new URL("https://ntst.umd.edu/soc/");
u.openStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Здесь ошибка
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
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at URLConnectStart.run(URLConnectStart.java:14)
at URLConnectStart.main(URLConnectStart.java:8)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
at sun.security.validator.Validator.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
... 16 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
... 22 more
информация из хрома относительно CERT веб-сайта
Любая помощь будет оценена. Это не критическое приложение, поэтому безопасность не так важна, но если я могу поддерживать безопасность, я бы предпочел сделать это. Несмотря ни на что, все, что я хочу сделать, это загрузить HTML для этого сайта с помощью кода.
спасибо.
Этот комментарий был очень полезен для понимания проблемы, но по какой-то причине я не мог решить проблему. Я смог добавить сертификат в хранилище ключей, но когда я запускаю программу, я все равно получаю ту же ошибку. Предполагается, что в хранилище ключей должно быть более 1 записи, или мне нужно добавить что-то в свой код? – Jtvd78
Хранилище сертификатов должно содержать все корневые сертификаты ЦС, поставляемые вместе с JDK/JRE, в дополнение ко всему, что вы могли добавить. В моем файле cacert по умолчанию (Java 1.8.0_66) было 93 сертификата, и после добавления промежуточного элемента в это хранилище мне удалось подключиться к URL с вашим фрагментом кода. –
Хорошо, я узнал, что я делаю неправильно. Я создавал новые cacerts в папке bin вместо того, чтобы использовать один в/lib/security. Я могу подключиться к веб-сайту, и я свяжусь с администраторами об их проблеме с сертификатом. Спасибо за помощь. – Jtvd78