你好,
我正在尝试使用 Apache Http Client 4.5.3 从 jdk1.6.0_45 向 API 网关发送 POST 请求
public class App {
public static void main(String[] args) throws IOException {
System.setProperty("javax.net.debug", "ssl");
HttpClient connection = HttpClientBuilder.create().build();
String url = "https://76mpviml3c.execute-api.us-east-1.amazonaws.com/agstage/";
HttpPost request = new HttpPost(url);
connection.execute(request);
}
我得到 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure.
你能帮我理解我做错了什么吗?
顺便说一句:AmazonS3Client (aws-java-sdk-s3 rev="1.11.109") 在 jdk1.6.0_45 上运行良好
日志:
触发 SecureRandom 的播种 完成播种 SecureRandom 允许不安全的重新协商:false 允许遗留问候消息:true 是否初始握手:true 是否安全重新协商:false %% 没有缓存的客户端 session *** ClientHello, TLSv1 RandomCookie: GMT: 1490949205 字节 = { 187, 178, 36, 198, 107, 55, 182, 178, 107, 167, 74, 180, 59, 166, 13, 66, 247, 17, 201, 9, 36, 195, 234, 237, 68, 23, 124, 177 } session ID:{} 密码套件:[SSL_RSA_WITH_RC4_128_MD5、SSL_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_DHE_RSA_WITH_AES_128_CBC_SHA、TLS_DHE_DSS_WITH_AES_128_CBC_SHA、SSL_RSA_WITH_ 3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA,SSL_RSA_ EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA,TLS_EMPTY_RENEGOTIATION_INFO_SCSV] 压缩方法:{ 0 }
主要,写入:TLSv1 握手,长度 = 75 线程“main”中的异常 javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure 在 com.sun.net.ssl.internal.ssl.Alerts.getSSLException (Alerts.java:174) 在 com.sun.net.ssl.internal.ssl.Alerts.getSSLException (Alerts.java:136) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1822) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1004) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199) 在 org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396) 在 org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355) 在 org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) 在 org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359) 在 org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381) 在 org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237) 在 org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) 在 org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) 在 org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111) 在 org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) 在 App.main(App.java:18) 主要,阅读:TLSv1 警报,长度 = 2 主要,RECV TLSv1 警报:致命,握手失败 主要,称为 closeSocket() 主要,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure
最佳答案
我在使用 AWS + Java7 + HTTPClient4.3 时遇到了类似的问题;将 Apache HTTPClient 升级到 v4.5.7 修复了它。查看此版本是否解决了您的问题。
关于java - 使用 Apache Http Client 4.5.3 从 jdk1.6.0_45 向 API 网关发出简单的 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46689593/