1.现象
客户端httpclient访问https服务端,抛出javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
2.原因
JDK1.8版本不支持服务端要求的加密算法套件,当加密密钥长度>128
2.1排查过程
由于客户端做了永久信任,服务端也要求单向认证,所以一定不是证书问题。
服务端要求TLS1.2、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384套件
后来发现服务端指定了一个算法套件,抓包tcpdump+Wireshark发现客户端发送的client hello算法套件 不包含服务端要求的TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
服务端响应包:
Secure Sockets Layer
TLSv1.2 Record Layer: Alert (Level: Fatal, Description: Handshake Failur