curl请求对HTTPS endoint工作,但Java客户端请求失败,错误'javax.net.ssl.sslhand



我试图通过与Java客户端获取请求来连接到HTTPS端点。终点就像这样的'https://domain/path/{token}',但是每次我进行reqeust时,我都会得到'javax.net.ssl.ssl.ssl.sslhandhandhandhandhandhandhandhandhandhandhandhandhandhandhandhandshakeexception:接收致命警报:handshake_failure' 例外,我搜寻了很多网站,但没有运气。有趣的是,当我从其他主机(Windows(通过Postman提出相同的请求,它也可以复制从Postman生成的curl命令,并在主机上运行了我的客户端正在运行的主机也可以正常工作。只有Java代码无法连接到端点。现在我的问题是:
--->这是证书问题。
--->如果是这样,curl如何工作而无需证书。

谢谢。

注意:以下是已经尝试的事情:
->设置与Java客户端连接的curl命令相同的标头。
->还使用了替代的REST客户端(OKHTTP3(和httpclient库,但获得了相同的例外。

请在下面找到工作curl命令:

curl -X GET 
  https://domain/x/y/XUwDummyTokenRKZ80EnxDCJlM 
  -H 'Accept: */*' 
  -H 'Cache-Control: no-cache' 
  -H 'Connection: keep-alive' 
  -H 'Host:hostname' 
  -H 'accept-encoding: gzip, deflate' 
  -H 'cache-control: no-cache

也用于连接到HTTPS端点的Java客户端代码:

 public void printGetResult( String destUrlStr ) {
        try {
           URL url = new URL(destUrlStr);
           HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
           conn.setRequestMethod( "GET" );
           InputStream is = conn.getInputStream();
           InputStreamReader isr = new InputStreamReader(is);
           BufferedReader br = new BufferedReader(isr);
           String inputLine;
           while ((inputLine = br.readLine()) != null) {
               System.out.println(inputLine);
           }
           br.close();

     }catch(Exception e) {
        System.out.println("exception is"+e); 
     }
    }

预期结果:json
(我知道在我的卷曲请求中,我将接受为 *,但它有效(
实际结果:

javax.net.ssl.sslhandshakeexception:收到致命警报:handshake_failure

您必须将远程服务器证书添加到Java的TrustStore。有几种方法可以做到。这是一个例子。

相关内容

最新更新