我正在尝试对内部CA签名的服务器进行https调用。尽管在信任库中添加了根证书,但我无法使其工作,所以我将trustManager设置为信任所有证书并暂时禁用主机名验证。
curl --insecure
致电
使用-Djavax.net.debug=all
,握手在客户端问候后失败
*** ClientHello,TLSv1 ...... main,READ:TLSv1 Alert,length = 2 main,RECV TLSv1 ALERT:致命,handshake_failure main,名为closeSocket()main,处理异常: javax.net.ssl.SSLHandshakeException:收到致命警报: handshake_failure main,调用close()main,调用 closeInternal(真)
堆栈跟踪是:
javax.net.ssl.SSLHandshakeException:收到致命警报: handshake_failure at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1959)at at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1077)at at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) 在 sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 在 sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
我正在使用
获取SSL上下文SSLContext sslContext = SSLContext.getInstance("TLS");
任何帮助都将受到高度赞赏。
PS:我正在使用 java7
答案 0 :(得分:0)
4年后为我自己的问题添加答案。
我不记得确切的问题是什么,但是没有握手失败的唯一原因-ClientHello之后立即发生握手失败的最可能原因是客户端和服务器无法就通用协议达成共识或用于继续握手的密码套件。
调试SSL问题的最简单方法是使用tcpdump捕获网络流量并在Wireshark中对其进行分析。我们可以检查ClientHello并找出正在使用的协议,广告支持的密码套件等。