Я пытаюсь использовать запрос get на сайте с REST API.Однако ссылка для доступа это IP-адрес, и я получаю:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: сбой построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели
Когда я использую ту же самую точную ссылку в браузере, она работает.
Как я могу решить эту проблему?
Ниже приведен мой код:
public static void main(String[] args) {
System.getProperties().put( "proxySet", "true" );
System.getProperties().put( "socksProxyHost", "xxx.xxx.xxx.xxx" );
System.getProperties().put( "socksProxyPort", "xxxx" );
URL requestLink = ismTicketManager.UrlEncode.convertToURLEscapingIllegalCharacters("https://xx.xx.xx.xx/e/528f5016-6fd9-403f-85e4-5a54bb2498b9/api/v1/problem/feed?relativeTime=30mins&Api-Token=xxxxx");
try {
HttpURLConnection targetConn = (HttpURLConnection)requestLink.openConnection();
targetConn.setRequestMethod("GET");
System.out.println(targetConn.getResponseCode());
} catch (Exception e) {
e.printStackTrace();
System.out.println("Connection failed");
}
static {
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("127.0.0.1"));
}
}
Я экспортировал сертификат из Firefox и импортировал его в файл cacerts: Список файлов cacerts выглядит следующим образом:
restapi, 25-Sep-2018,rustCertEntry, отпечаток сертификата (SHA1): AB: 6D: C6: 2E: 9F: B3: D9: 48: 1E: A9: 84: AA: DD: 03: 64: 1D: 7C: 08: 42: CE
Как я могу решить эту проблему?
РЕДАКТИРОВАТЬ: Решено благодаря Гийому.Моя проблема заключалась в том, что у меня есть программные файлы / JDK и программные файлы / JRE.Я импортировал в файл cacerts в JDK, в то время как Eclipse использовал JRE.Это было обнаружено благодаря аргументу VM -Djavax.net.debug = ssl.
Кроме того, IP-адрес в:
static {
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("10.31.17.38"));
}
должен совпадать с IP-адресом в переменной requestLink, которой я являюсьс помощью.На самом деле, когда я этого не делал, я получил ошибку, сообщающую мне именно это.