背景
今天尝试用Java去访问一个https接口,但抛出下面的异常:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
解决过程
(个人发现)建议如果是ssl双向认证的,先看看是不是客户端证书文件路径获取有问题(debug一下,看看是不是null),导致没携带证书访问https服务器,也会报这个handshake_failure错误。
遇到问题首先去Google,然后在javax.net.ssl.SSLException: Received fatal alert: protocol_version
找到了问题原因:客户端和服务端SSL协议版本不一致。
及解决方案:需要设置Java客户端https.protocols环境变量,使用服务端支持的SSL协议版本。
但经过我一步步踩坑,到最终解决问题,我发现问题的原因并不完全和上面描述的一直,下面我一步步讲解我的解决过程。
想了解更多https.protocols在Java中的使用,可以阅读这篇文章: