Java 客户端Hello之后发生SSL握手致命错误

Java 客户端Hello之后发生SSL握手致命错误,java,ssl,jsse,Java,Ssl,Jsse,我正在尝试对由内部CA签名的服务器进行https调用。尽管在信任库中添加了根证书,但无法使其工作,因此我已将trustManager设置为信任所有证书,并暂时禁用主机名验证。 curl——不安全的调用有效。 使用-Djavax.net.debug=all,在客户端hello之后握手失败 ***克利恩塞洛,TLSv1。。。main,读取:TLSv1警报,长度=2 main,RECV TLSv1警报:致命,握手失败main,称为closeSocket()main,处理异常: javax.net.ss

我正在尝试对由内部CA签名的服务器进行https调用。尽管在信任库中添加了根证书,但无法使其工作,因此我已将trustManager设置为信任所有证书,并暂时禁用主机名验证。
curl——不安全的
调用有效。
使用
-Djavax.net.debug=all
,在客户端hello之后握手失败

***克利恩塞洛,TLSv1。。。main,读取:TLSv1警报,长度=2 main,RECV TLSv1警报:致命,握手失败main,称为closeSocket()main,处理异常: javax.net.ssl.SSLHandshakeException:收到致命警报: 握手失败main,称为close()main,称为 closeInternal(真)

堆栈跟踪是:

javax.net.ssl.SSLHandshakeException:收到致命警报: 握手失败 位于的sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 位于的sun.security.ssl.Alerts.getSSLException(Alerts.java:154) sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1959)位于 sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1077)位于 sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) 在 sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 在 sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)

我正在使用

SSLContext sslContext = SSLContext.getInstance("TLS");
任何帮助都将不胜感激


注:4年后,我正在使用java7为我自己的问题添加一个答案

我不记得确切的问题是什么,但握手失败没有单一的原因-握手失败发生在ClientHello之后最可能的原因是客户端和服务器无法就继续握手的通用协议或密码套件达成一致


调试类似SSL问题的最简单方法是使用tcpdump捕获网络流量并在Wireshark中进行分析。我们可以检查ClientHello,找出正在使用的协议,它宣传支持的密码套件等等。

四年后,我自己的问题得到了答案

我不记得确切的问题是什么,但握手失败没有单一的原因-握手失败发生在ClientHello之后最可能的原因是客户端和服务器无法就继续握手的通用协议或密码套件达成一致


调试类似SSL问题的最简单方法是使用tcpdump捕获网络流量并在Wireshark中进行分析。我们可以检查ClientHello并找出正在使用的协议、它宣传支持的密码套件等。

在验证证书信任之前,可能会发生握手失败。检查两端是否启用了TLS,以及是否存在通用密码套件。查看服务器端的日志,检查与wireshark的协商。请使用
-Djavax.net.debug=ssl运行客户端,并在问题中发布结果。在验证证书信任之前,可能会发生握手失败。检查两端是否启用了TLS,以及是否存在通用密码套件。查看服务器端的日志,检查与wireshark的协商。请使用
-Djavax.net.debug=ssl运行客户端,握手
,并在问题中发布结果。wireshark很棒,但对于Java
javax.net.debug
提供了相同的信息和更多信息。Yes握手_失败可能有很多原因,在这种情况下,很可能存在协议兼容性,特别是因为2011年发布的j7实现了TLS1.1和1.2,但由于兼容性问题,默认情况下在客户端禁用了它们,但数月内,BEAST攻击被发布,许多人响应要求1.1或更高,包括2015年针对所有处理卡支付的网站的支付卡行业委员会(这是最重要的)。Wireshark很棒,但对于Java
javax.net.debug
提供了相同的信息和更多信息。Yes握手_失败可能有很多原因,在这种情况下,很可能存在协议兼容性,特别是因为2011年发布的j7实现了TLS1.1和1.2,但由于兼容性问题,默认情况下在客户端禁用了它们,但数月内,BEAST攻击被发布,许多人响应要求1.1或更高,包括2015年的支付卡行业委员会,负责处理卡支付的所有站点(这是最重要的)。