如何解决 SSL 握手异常

How to resolve SSL handshake exception

我正在尝试执行以下代码行:

public static String invokeRestService(String request) throws Exception {
        try {

            URL url = new URL("https://XXXXXXX:8403/v1/payment/test/req");
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.
            urlConnection.setRequestMethod("POST");
            urlConnection.setRequestProperty("Accept", "application/json");
            urlConnection.setDoOutput(true);
            OutputStreamWriter osw = new OutputStreamWriter(urlConnection.getOutputStream());
            osw.write(request);
            osw.flush();
            osw.close();
            System.out.println(urlConnection.getResponseCode());

        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

每当我尝试 运行 上面的代码时,我都会观察到以下错误消息,它说 SSL 失败但是当我试图在没有任何授权的情况下通过邮递员访问相同的端点 URL header 它按预期工作并且 return 200 响应代码按预期工作。当我试图通过 JAVA 代码访问该端点时,我遇到了这个异常。无论如何要显式设置 SSL 吗?或者如何使用系统默认的 SSL?

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)

我正在调查你的问题,在看了这个 link 之后:https://www.ibm.com/support/knowledgecenter/en/SS9J9E/ioc/ts_liberty_ip.html

我认为您的 DNS 记录不正确,其中指出:您正在尝试使用不存在的 URL 执行 SSL 握手。

您可以在浏览器中或使用 Curl 访问 URL 吗?

如果不是这种情况,那么我认为您证书的 CN(通用名称)与您要连接的 url 的域不匹配