Используйте HttpURLConnection, чтобы получить страницу с самозаверяющим сертификатом - PullRequest
1 голос
/ 26 ноября 2010

Я использую этот код для загрузки страницы временной шкалы из нашей локальной системы Trac:

HttpURLConnection con = (HttpURLConnection) TRAC_TIMELINE_URL.openConnection();
String userpassword = TRAC_USERNAME + ":" + TRAC_PASS;
String encodedAuthorization = new String(Base64.encodeBase64(
        userpassword.getBytes(Charsets.ASCII)), Charsets.ASCII);
con.setRequestProperty("Authorization", "Basic " + encodedAuthorization);
InputStream ins = con.getInputStream();

Поскольку доступ к серверу Trac осуществляется через HTTPS, но он имеет самозаверяющий сертификат, я получаю следующее исключение при вызове getInputStream:

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

Какой самый быстрый способ заставить это работать? Я в порядке, просто полностью игнорируя правильность сертификата, потому что этот запрос будет сделан по локальной сети.

1 Ответ

0 голосов
/ 26 ноября 2010

Как минимум, вам необходимо убедиться, что сертификат public , который соответствует частному сертификату, используемому вашей системой Trac (или сертификату CA, подписавшему этот сертификат сервера), находится в вашем доверенном хранилище,Для библиотек Java SSL требуется наличие цепочки доверия к известному корню доверия (проверка связи между DN сертификата сервера и запрошенным именем хоста необязательна, хотя настоятельно рекомендуется для обычного HTTPS).

...