簡體   English   中英

Curl請求https端點工作但java客戶端請求失敗,錯誤為'javax.net.ssl.SSLHandshakeException'

[英]Curl Request to https endoint working but java client request fails with Error 'javax.net.ssl.SSLHandshakeException'

我試圖通過使用Java客戶端發出GET請求來連接到https端點。 端點就像這個' https:// domain / path / {token}',但每次我做一個reqeust我得到'javax.net.ssl.SSLHandshakeException:收到致命警報:handshake_failure'例外,我搜索了很多網站,但沒有運氣。 有趣的是,當我通過POSTMAN從不同的主機(窗口)發出相同的請求時它也可以工作,我也復制了從POSTMAN生成的curl命令並在我的客戶端運行的HOST上運行它也可以正常工作。 只有java代碼無法連接到端點。 現在我的問題是:
--->這是證書問題嗎?
--->如果是這樣,curl如何在不需要證書的情況下工作。

謝謝。

注意:以下是已經嘗試過的事情:
- >使用curl命令為java客戶端連接設置相同的HEADERS集。
- >也使用了備用休息客戶端(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
(我知道在我的curl請求中我已將accept設置為*,但它有效)
實際結果:

javax.net.ssl.SSLHandshakeException:收到致命警報:handshake_failure

您必須將遠程服務器證書添加到java的Truststore 有幾種方法可以做到這一點。 是一個例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM