簡體   English   中英

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

[英]Received fatal alert: handshake_failure : javax.net.ssl.SSLHandshakeException

我在Java 8上運行以下代碼,

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.json.JSONObject;

public class HttpPostReq {
public static void main(String args[]) {
    String restUrl = "https://connect-testing.urbanairship.com/api/events/";
    String username = "sample_connection";
    String password = "sample_connection";
    JSONObject jsonToSend = new JSONObject();
    String jsonData = jsonToSend.toString();
    HttpPostReq httpPostReq = new HttpPostReq();
    System.out.println(jsonData);
    HttpPost httpPost = httpPostReq.createConnectivity(restUrl, username, password);
    System.out.println(httpPost);
    httpPostReq.executeReq(jsonData, httpPost);
}

HttpPost createConnectivity(String restUrl, String username, String password) {
    HttpPost post = new HttpPost(restUrl);
    String auth = new StringBuffer(username).append(":").append(password).toString();
    byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
    String authHeader = "Basic " + new String(encodedAuth);
    System.out.println(authHeader);
    post.setHeader("Authorization", authHeader);
    post.setHeader("Content-Type", "application/x-www-form-urlencoded");
    post.setHeader("Accept", "application/vnd.urbanairship+x-ndjson; version=3;");
    post.setHeader("X-Stream", "true");
    return post;
}

void executeReq(String jsonData, HttpPost httpPost) {
    try {
        executeHttpRequest(jsonData, httpPost);
    } catch (UnsupportedEncodingException e) {
        System.out.println("error while encoding api url : " + e);
    } catch (IOException e) {
        System.out.println("ioException occured while sending http request : " + e);
    } catch (Exception e) {
        System.out.println("exception occured while sending http request : " + e);
    } finally {

    }
}

void executeHttpRequest(String jsonData, HttpPost httpPost) throws UnsupportedEncodingException, IOException {
    HttpResponse response = null;
    String line = "";
    StringBuffer result = new StringBuffer();
    httpPost.setEntity(new StringEntity(jsonData));
    HttpClient client = HttpClientBuilder.create().build();
    response = client.execute(httpPost);
    System.out.println("Post parameters : " + jsonData);
    System.out.println("Response Code : " + response.getStatusLine().getStatusCode());
    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    while ((line = reader.readLine()) != null) {
        result.append(line);
    }
    System.out.println(result.toString());
}
}

獲得例外,

發送http請求時發生ioException:javax.net.ssl.SSLHandshakeException:收到致命警報:handshake_failure。

我可以通過卷曲連接,

curl -vv https://connect-testing.urbanairship.com/api/events/ \
--compressed \
-u "sample_connection:sample_connection" \
-H "Accept: application/vnd.urbanairship+x-ndjson; version=3;" \
-d "{}"

誰能告訴我我的java代碼有什么問題?

依賴關系如下,

<dependencies>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20090211</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.2</version>
    </dependency>

可能是客戶端和服務器使用的TLS協議版本或密碼套件之間的兼容性問題。

暫無
暫無

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

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