Received fatal alert: handshake_failure排查过程

        本文重在排查问题的过程,解决方法得视情况而定。网上千篇一律的解决方法,可能都不适合您,所以排查问题过程才是重中之重。

问题

        系统升级了一些jar(漏洞扫描,必须升级)。请求某银行失败,异常堆栈信息:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure,回滚系统一切正常。

原因分析:

    针对问题,有2个方向(正方向:从升级jar方向排查,反方向:从错误原因出发)

1、正方向:

        由于是通讯层面的错误,怀疑是升级httpClinet(4.5.1升级到4.5.13)导致。于是百度发现httpClient升级列表内容:https://downloads.apache.org/httpcomponents/httpclient/RELEASE_NOTES-4.5.x.txt, 查到这里笔者看了看升级内容,一脸懵逼,不能看出是什么问题导致本次错误。笔者这里采用死办法(都是因为自己太菜),用二分查找法,直接把jar升级到4.5.8,测试该本不行,于是回退4.5.6结果又可以,就这样最终锁定4.5.8版本的问题,查看4.5.8版本升级内容如下图所示,至此正方向无疾而终(但对后续解决方法有用,知道问题之根源)。

2、反方向:

        handshake_failure错误,一看就是ssl握手错误(不知道,一百就一目了然),对应ssl握手过程,笔者不在叙述(笔者也是菜鸟),只献上一张图:


        由于笔者对ssl握手没有深入理解,导致排查问题用了很长一段时间,没有快速定位,所以先把SSL握手目的提前警示给大家,希望对后续读者有帮助(提示:目的1非常重要)。

SSL握手主要有三个目的:

1. 客户端与服务器需要就一组用于保护数据的算法达成一致

2. 它们需要确立一组由那些算法所使用的加密密钥;

3. 握手还可以选择对客户端进行认证。

          笔者百度了半天,才弄来一个参数(打开ssl debug日志):-Djavax.net.debug=ssl ,运行时加上即可(不知道怎样加也可以百度,因为笔者有过百度idea的经历)。

测试正常请求日志:

测试异常请求日志:


        从异常日志看出,client_hello就异常了,在这里笔者,还以为找到了答案,因为网上千篇一律的说TLSv1.xx协议不一样,从异常日志所得确实不一样,于是按照百度所得改协议,发现没啥用,而且日志打印还是一模一样的错误(不排除读者没改对,备注:这个参数笔者都改过:jdk.tls.disabledAlgorithms)。

      后来笔者又仔细看了正常请求日志,发现正常请求SSL协议也不一致,我方是TSLv1.2,对方是SSLv3,也是正常的,笔者就无从着手了,于是每一行,每一行的日志对比(心酸得很,都是因为对SSL握手理解不透彻),发现是Cipher Suites 包含的算法不一样,支持的算法少了很多!到此时笔者突然想到正方向升级httpClient内容过滤掉了一些弱密码组件,肯定是这里的问题,又仔细看看了正常日志,发现调用方始终用的是SSL_RSA_WITH_3DES_EDE_CBC_SHA加密方式,而升级httpClient后,打印的我方支持的密码组件没有这个(Cipher Suites列表没有)。猜测就是这个原因了(前文提到SSL目的1,客户端与服务器需要就一组用于保护数据的算法达成一致),这里明显不一致,所以握手失败了,于是查看httpClient源码。



        验证上面结论是否可以行,测试传递密码套件SSL_RSA_WITH_3DES_EDE_CBC_SHA(本例中,只改了httpClientUtils工具类),果然测试通过(握手成功,交易正常)。



回顾及结论:

    1、对SSL握手过程理解不是很清楚,本文client_hello阶段握手失败,客户端把支持的加密套件、版本号信息等发给服务端,以供服务端选取合适支持的加密套件。然儿本例中,服务端指定了SSL_RSA_WITH_3DES_EDE_CBC_SHA加密套件,升级httpClient过滤掉了该弱密码套件,所以导致ssl握手失败。

    2、网上千篇一律的说是两边(客户端与服务端)支持的"SSLv3","TLSv1","TLSv1.1","TLSv1.2",不一样,其实也是正确的。在本例中服务端采用的是jdk1.6支持的SSLv3协议并指定了SSL_RSA_WITH_3DES_EDE_CBC_SHA加密套件,而我方(客户端)client_hello发送支持加密套件不支持此套件,所以导致握手失败。如果服务端没有指定加密算法,那么我方(客户端)指定协议是可以握手成功的。

    3、遇到问题,我们不能盲目百度,生搬硬套,要善于思考。看似复杂,无从下手的问题,往往解决方案非常简单。还是笔者中学老师说的对,真相往往真的在表面,正确答案(真相)在看你,而你确视而不见

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容