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