PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求的有效认证路径

问题描述

我有以下 java 代码来发送 POST 请求。

执行时返回以下错误

PKIX 路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到到请求目标的有效认证路径

从我对这个主题的研究来看,原因通常是因为 POST 请求的 url 是 https,并且它的证书需要添加到 jdk 密钥库(cacerts)中。

所以我从 https url 下载了证书并添加到 cacerts 中,如下所示。

keytool -import -alias testcert1 -keystore "...\jdk1.7.0_80\jre\lib\security\cacerts" -file certificate.cer

运行在\jdk1.7.0_80\jre\lib\security\cacerts

证书成功导入cacerts。

运行命令读取cacerts,显示证书。

错误仍然存​​在。

关于可能是什么问题的任何其他想法?

应用程序查询的 cacerts 是否可以在其他地方?

如果是这样,如何知道在哪里。

import javax.net.ssl.SSLContext;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.client.methods.HttpPost;
import com.google.gson.Gson;
import org.apache.http.entity.StringEntity;
import org.apache.http.HttpResponse;

public void sendPostRequest(Object src)
{
    SSLContext context = SSLContexts.custom().useProtocol("TLSv1.2").build();

    HttpClient client = HttpClientBuilder.create().setSSLContext(context).build();
    HttpPost httpPost = new HttpPost(httpsurl);

    httpPost.setHeader("User-Agent","abc");
    httpPost.setHeader("Content-Type","application/json; charset=UTF-8");   
    httpPost.setHeader("OtherInfo","xyz");
    httpPost.setHeader("Accept","application/json");

    Gson gson = new Gson();

    StringEntity input;
    input = new StringEntity(gson.toJson(src));

    input.setContentType("application/json");
    httpPost.setEntity(input);

    HttpResponse httpResponse = client.execute(httpPost);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)