问题描述
执行时返回以下错误:
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 (将#修改为@)