【问题标题】:How to resolve SSL handshake exception [duplicate]如何解决 SSL 握手异常 [重复]
【发布时间】:2019-07-11 17:18:24
【问题描述】:

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

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 时,它按预期工作并按预期返回 200 响应代码.当我尝试通过 JAVA 代码访问该端点时,我遇到了这个异常。无论如何设置 SSL 显式?或如何使用系统默认 SSL?

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException:没有主题替代名称 出现在 sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 在 sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)

【问题讨论】:

    标签: java ssl httpurlconnection


    【解决方案1】:

    在查看此链接后,我正在调查您的问题:https://www.ibm.com/support/knowledgecenter/en/SS9J9E/ioc/ts_liberty_ip.html

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

    您能否在浏览器中或使用 Curl 访问该 URL?

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

    【讨论】:

    • 我认为必须检查认证文件。如果提供了 DNS 名称,则当 DNS 名称不存在时会出现此问题。
    • 当我尝试从 POSTMAN 中点击时,它工作正常。并返回 200 响应。
    • 那我认为您证书中的CN(通用名)与您连接的域名不匹配。
    • 你有什么想法可以克服这个问题吗?
    • 有几个选项:重新生成使用正确 CN 的新证书,或编辑您的主机文件以将您的请求重定向到正确的地址
    猜你喜欢
    • 2018-04-08
    • 2011-04-16
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多