一个实际问题分析及解决之四:通过IBM的JDK建立SSL连接

接前面内容,这里主要谈我们实现一开始描述的实际的技术需求的过程。

我们在建立与服务器的SonicMQ的SSL连接时,用了第三方jar去完成握手,而该第三方包采用的是标准的Java接口方式,即SSLContext.getInstance()。这也很容易理解,因为第三方jar的提供方并不能假设用户一定是在websphere环境下使用该第三方jar,所以采用标准方式更为可取。

我们的碰到的最大问题就是该jar在Oracle的jdk上可以工作,而在IBM的jdk都不能工作,出现SSLHandShake failure错误。开启-Djavax.net.debug=true后发现在第一步"ClientHello"时就出错了,因为write时采用了SSLv3协议,而recv得到则是TLSv1协议,故协议匹配失败,握手不成功。

多次研究后,终于发现问题出在Oralce的jdk和IBM的jdk对下面语句的处理是不一样的。Oracle的JDK会优先采用TLSv1和TLSv2去尝试握手连接,而IBM的JDK则直接采用SSLv3协议,而对方不支持SSLv3协议,故握手失败。

SSLContext.getInstance("SSL");

分析找出原因之后,就是怎么解决。两个选择:

  • 一个是改第三方源码,把参数SSL改成TLS。一个参考可见:

http://stackoverflow.com/questions/34185238/ews-api-javax-net-ssl-sslhandshakeexception-received-fatal-alert-handshake-fa

  • 另一个选择是更新IBM的JDK,因为IBM已经意识到这个问题并提供了fix patch。具体说明如下

http://www-01.ibm.com/support/docview.wss?uid=swg21687173

其描述的现象跟我们实际碰到的完全吻合,如下:

其提供了fix patch的安装,以解决这个问题。

http://www-01.ibm.com/support/docview.wss?uid=swg24038669

一个问题:既然IBM已经意识到这个接口的实现是有问题的,为什么不升级websphere的情况下大部分SSL连接不会有问题呢?

回答这个问题就要参考上一篇中提到两种使用方式,实际中大部分情况属于前一种,即通过websphere中的ssl配置来建立SSL连接,而不是直接跟IBM的JDK交互来建立SSL连接,要知道在SSL配置中协议项的默认值是TLS_SSL,表示优先选用TLS协议,所以大部分情况不会出错。而我们的使用方式属于另一种。

时间: 2024-10-10 00:16:47

一个实际问题分析及解决之四:通过IBM的JDK建立SSL连接的相关文章

一个实际问题分析及解决之三:websphere中SSL配置及使用

SSL配置是websphere security中很重要的一部分,具体详细阅读下面内容. http://www.ibm.com/developerworks/websphere/techjournal/0612_birk/0612_birk.html 这里重点分析两个问题:KeyStore和TrustStore的区别以及如何使用websphere的ssl配置. 一. KeyStore和TrustStore的区别 TrustStore主要用于存放public certificate,即公钥.而公钥

一个实际问题分析及解决之五:两种方法的区别和选择

前面两篇文章分别解释了在websphere环境下建立SSL连接的两种办法,那么一更进一步: 两者的区别是什么? 本质上两者是一样的都是通过JVM来建立socket连接,区别在于配置JVM socket连接方式. 两种配置方式的优先级? 系统变量方式的优先级高,会覆盖websphere的配置.具体可看下面一篇文章. http://www.ibm.com/developerworks/websphere/techjournal/0502_benantar/0502_benantar.html 如何选

一个实际问题分析及解决之二:理解SSL协议

SSL协议并不陌生,平常见到的以https开头的网站都是采用了SSL协议,虽然SSL协议加在HTTP上最为常见,但它的使用并不限于http,应该说http是在SSL协议层之上的协议,因为http协议属于应用层协议而SSL协议则属于网络层协议. 下面几篇文章对SSL协议做了详细说明: https://en.wikipedia.org/wiki/Transport_Layer_Security http://baike.baidu.com/view/14121.htm 我们以常见的https为例,它

5WHY分析法:一个问题分析与解决的工具

5WHY分析法很多做项目的都知道,但是却很少有人能用到实处,或者是灵活运用,所以今天小编又来翻一遍这个“旧账”,让大家更了解5WHY分析法. 什么是5WHY分析法? 所谓5why分析法,又称“5问法”,也就是对一个问题点连续以5个“为什么”来自问,以追究其根本原因. 5why法的关键所在:鼓励解决问题的人要努力避开主观或自负的假设和逻辑陷阱,从结果着手,沿着因果关系链条,顺藤摸瓜,直至找出原有问题的根本原因. 5WHY分析法的运用 如图,沿着“为什么——为什么”的因果路径逐一提问,先问第一个“为

关于解决 请求被中止:无法建立SSL / TLS安全通道

我使用HttpWebRequest访问其他网站时,出现"请求被中止:无法建立 SSL / TLS安全通道"错误,于是goog和百度了一番,提供的答案基本 是:ServicePointManager.ServerCertificateValidationCallback写委托 public ResponseModel GetHtml(string url) { ServicePointManager.ServerCertificateValidationCallback = Valida

文《关于c++与java中文乱码问题分析与解决》中一个bug分析

文<关于c++与java中文乱码问题分析与解决>中一个bug分析 DionysosLai([email protected]) 2014/10/21 在前几篇一博客<关于c++与java中文乱码问题分析与解决>,地址如下:http://blog.csdn.net/dionysos_lai/article/details/38389765.文中详细介绍了c++与java数据传递时,为何会出现中文乱码的原因,并提出了适当的解决方法.方法如下: int CCDirector::GBKTo

采用[ICONIX] 方法实践分析和设计之四 [健壮性分析]

在前三章中通过(问题域)建模和用例分析之后,在许多的UML书中可能接下来就要进行时序图和协同图的绘制了.但是问题好像还没那么简单,因为这里有一条鸿沟还没有跨过去,正如下图所示:                    在我刚学开始学习 UML时,在拿到用例文本时要去画时序图总感觉有些别扭,不知如何才能将文本中的意思完全用图的形式表达出来,总是感觉分析出来的文本中缺了一些很重要的东西, 而这些被丢掉的对象最终可能会导致无法绘制时序图,但又找不出用例文本中到底还有什么东西被遗漏,最终导致设计瘫痪.后来

YARN环境中应用程序JAR包冲突问题的分析及解决

Hadoop框架自身集成了很多第三方的JAR包库.Hadoop框架自身启动或者在运行用户的MapReduce等应用程序时,会优先查找Hadoop预置的JAR包.这样的话,当用户的应用程序使用的第三方库已经存在于Hadoop框架的预置目录,但是两者的版本不同时,Hadoop会优先为应用程序加载Hadoop自身预置的JAR包,这种情况的结果是往往会导致应用程序无法正常运行. 下面从我们在实践中遇到的一个实际问题出发,剖析Hadoop on YARN 环境下,MapReduce程序运行时JAR包查找的

&#160; 挖矿程序minerd,wnTKYg入侵分析和解决

挖矿程序minerd,wnTKYg入侵分析和解决                                   作者:CYH 一.起因:最近登陆一台redis服务器 发现登陆的时间非常长,而且各种命令敲大显示出的内容延迟很高 二,分析:  首先我安装了iftop监控em1这个网卡流量 Iftop -i  em1 发现里面的流量使用很低,没多少服务使用大的流量,没占用带宽,排除了ddos大流量攻击可能 接着我输入命令top 查看各种负载,一看吓一跳,cpu平均负载达到70左右,使用率达到99