Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSL握手在Java7和Java8中的工作原理_Java_Ssl_Httpclient - Fatal编程技术网

SSL握手在Java7和Java8中的工作原理

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[我尝试过,它对我很有效

最近,在使用HttpClient访问Java应用程序中的第三方服务(CURL服务)时,我遇到了如下问题:

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
....
我在JDK 7中遇到了这个问题。通过对这个问题的研究,我发现了两条建议,即

  • 在JDK 7信任库中添加该特定第三方的证书。[我试过了,但还是遇到了同样的问题]
  • 使用JDK 8而不是JDK 7[我尝试过,它对我很有效]
因此,我试图理解像与Java7或更低版本相比,SSL握手是如何在Java8中发生的?我可以在JDK7中解决这个问题

编码Snnipet

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”标记将此答案视为正确答案