0

我有以下 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);
}
4

0 回答 0