PKIX路径构建失败:无法找到请求的目标的有效证书路径-导入的CERT

时间:2018-09-25 12:47:37

标签: java ssl-certificate get-request

我正在尝试通过REST API在站点上使用get请求。但是访问acces的链接是一个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,2018年9月25日,trustedCertEntry, 证书指纹(SHA1):AB:6D:C6:2E:9F:B3:D9:48:1E:A9:84:AA:DD:03:64:1D:7C:08:42:CE

我该如何解决?

编辑:感谢Guillaume解决。 我的问题是我有程序文件/ JDK和程序文件/ JRE。我正在Eclipse中使用JRE导入到JDK中的cacerts文件中。在-Djavax.net.debug = ssl VM参数中发现了这。

也是:中的IP:

static {
    HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("10.31.17.38"));
}

应该等于我正在使用的变量requestLink中的那个。实际上,当我不这样做时,我会确切地告诉我一个错误。

1 个答案:

答案 0 :(得分:0)

该网站可能未发送完整的认证路径(包括根目录)。 尝试添加以下VM选项:-Dcom.sun.security.enableAIAcaIssuers=true

从命令行启动Java程序时,您的命令应如下所示(如Oracle doc中所述)

java -Dcom.sun.security.enableAIAcaIssuers=true <Main Class>

从Eclipse启动时,应在“ VM Arguments:”下添加该选项。