Я пытаюсь установить тестовое соединение SSL, используя следующий код Java:
String httpsURL = "https://www.somehost.com";
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
InputStream ins = con.getInputStream();
InputStreamReader isr=new InputStreamReader(ins);
BufferedReader in =new BufferedReader(isr);
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
Когда я подключаюсь к хосту А, все работает нормально - соединение установлено и ответ получен.
Однако, когда я подключаюсь к хосту B, который защищен сертификатом, выданным тем же органом, что и хост A, я получаю следующее исключение:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Все, что я прочитал до сих пор, говорит о том, что мне нужно установить сертификаты в моем хранилище ключей, однако, если это было решением, то почему Хост A работает, а Хост B не работает?
В качестве, вероятно, бесполезного - если я напишу похожий фрагмент кода C #, тогда соединение будет успешно согласовано как для хостов A, так и для B - то же самое применимо для перехода к URL в браузере.