SSL握手在Java7和Java8中的工作原理
最近,在使用HttpClient访问Java应用程序中的第三方服务(CURL服务)时,我遇到了如下问题:SSL握手在Java7和Java8中的工作原理,java,ssl,httpclient,Java,Ssl,Httpclient,最近,在使用HttpClient访问Java应用程序中的第三方服务(CURL服务)时,我遇到了如下问题: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake .... 我在JDK 7中遇到了这个问题。通过对这个问题的研究,我发现了两条建议,即 在JDK 7信任库中添加该特定第三方的证书。[我试过了,但还是遇到了同样的问题] 使用JDK 8而不是JDK 7[我尝试过,它对我很有效
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
....
我在JDK 7中遇到了这个问题。通过对这个问题的研究,我发现了两条建议,即
- 在JDK 7信任库中添加该特定第三方的证书。[我试过了,但还是遇到了同样的问题]
- 使用JDK 8而不是JDK 7[我尝试过,它对我很有效]
public String getProduct(final String accessToken) throws IOException, ParseException {
log.info("accessToken: " + accessToken);
final String stringUrl = "https://api.molt.in/v1/products";
HttpClient httpClient = HttpClientBuilder.create().build();
HttpGet getRequest = new HttpGet(stringUrl);
getRequest.setHeader("Authorization", "Bearer " + accessToken);
HttpContext httpContext = new BasicHttpContext();
HttpResponse response = httpClient.execute(getRequest, httpContext);
log.info("Response Code : " + response.getStatusLine().getStatusCode());
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
log.info("result: " + result);
rd.close();
return result.toString();
}
~z~你好
Chandan服务器关闭握手,因为客户端使用了不受支持的协议。请参阅,其中建议启动Java 7时使用:
-Dhttps.protocols=TLSv1.1,TLSv1.2
如果服务器证书不受信任,您的客户端会出现错误(javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败),其工作方式如下:Java客户端检查服务器的证书,以确保与之对话的机器是它声称的机器,在您的示例“api.molt.in”中。支票的工作原理如下:
- 如果证书是自签名的,则如果在默认信任存储中找到该证书,则该证书是受信任的
- 如果证书由授权机构签名,则如果在默认信任存储中找到授权机构的证书,则该证书是可信的
受信任方的列表可能会在每个Java次要版本中更新。例如,使用生成的证书仅受Java 8信任。是的,您是对的。成功了。早些时候,我还尝试更新Https协议版本,但由于其他一些异常,我在添加此协议后再次删除了它,它对我有效。。。谢谢您可以通过切换文本左侧的“v”标记将此答案视为正确答案