В следующем Java-коде я использую два разных URL с одинаковым именем хоста, но с разными номерами портов.Они оба обслуживают один и тот же сертификат (я скачал и распространил их).Но тот с портом 6443
дает SSLHandshakeException
, в то время как тот с портом 443
успешен.Почему Java возражает против сертификата для 6443
URL?
package httpsrequesttest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class HttpsRequestTest {
public static void main(String[] args) {
String[] urls = new String[]{
"https://geoeventsample1.esri.com:6443",
"https://geoeventsample1.esri.com"
};
for (String url : urls) {
try {
InputStream inputStream = new URL(url).openStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
System.out.printf("%s\n\tSuccess\n\tFirst line: %s\n", url, in.readLine());
} catch (IOException ex) {
System.out.printf("%s\n\tFailure\n\tError message: %s\n", url, ex.getClass().getSimpleName() + ": " + ex.getMessage());
}
}
}
}
Вывод:
https://geoeventsample1.esri.com:6443
Failure
Error message: SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
https://geoeventsample1.esri.com
Success
First line: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">