前言

遇到这个问题得说一下笔者的开发环境,笔者所在公司,平时开发用的web容器是jboss,使用的JDK是oracle的JDK,但是测试和生产环境用的是WAS,JDK用的是IBM的JDK,由于项目的不同,测试环境所安装的web容器和JDK版本都并不相同。这个也是笔者遇到问题的原因所在。

问题描述

笔者在公司负责一个项目的开发,该项目有一个功能需要调用到公司另一个项目的接口,而那个项目提供的接口是基于HTTPS的,所以笔者在进行调用的时候,使用了JDK提供的SSL连接进行了请求。

SSLContext.getInstance(“SSL”);

该代码,笔者在自己本机的JBoss上测试过,并没有问题。可是,发布到was里面之后,程序一直没法成功调用接口,通过日志追踪后,发现程序在服务器运行的时候后台报了异常,该异常如下:

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshank

握手失败,网上有人说,该异常是因为证书的原因,可是笔者尝试过后发现,该说法并不对应笔者所描述的场景,最后在同事的帮助下找到了原因。

问题分析

该问题出现的原因在于SSL协议的版本不同。发现问题之后,笔者分析了一下具体情况。由于项目的原因,笔者现在用的JDK版本还是1.5的,同时,笔者去调的项目也是个老项目,用的JDK版本也是1.5的。所以当笔者通过本地测试的时候,SSL的请求方和接收方的版本是一致的,并没有问题。可是由于项目的扩容,笔者项目的测试环境前阵子进行了迁移,新的测试环境采用的是IBM的JDK1.6。因为JDK版本不同,默认采用的握手协议不同,所以导致两边程序进行握手的时候会失败。

仔细查询了一下资料后发现,原来oracle的JDK默认采用的是TLSv1和TLSv2进行尝试握手连接的,而IBM新的JDK采用的是SSLv3,新老版本还不一样。

详细的资料地址:http://www-01.ibm.com/support/docview.wss?uid=swg21687173

问题解决

该问题的解决方法有两个:

方法一:修改获取SSL连接的的代码(笔者使用的方法,简单)

SSLContext.getInstance(“TLS”);

方法二:更新IBM的JDK

在上面给出的链接中,其实IBM已经意识到自己的问题,也给出了另外一个补丁,据说更新后就能成功(笔者没尝试过( ̄▽ ̄)”)

本文章同步发布至 http://blog.e65535.com/2017/01/15/ssl-excepiton/

[工作笔记]JDK版本不同导致的SSL异常的更多相关文章

  1. 生成war的jdk版本高于tomcat使用的jdk版本,导致项目不能正常被访问

    记录一个耽误30分钟的一个坑: 生成war的jdk版本高于tomcat使用的jdk版本,导致项目不能正常被访问 报404错误

  2. jdk 版本不一致导致的错误

    平时做项目时难免会从git,svn下载代码或者把别人的项目文件导入到自己的MyEclipse中进行操作,因此会遇到很多问题,常见的有一种是使用的jdk版本不一致造成的报错, 错误案例:     错误提 ...

  3. [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher 问题--MyEclipse设置JDK版本

    org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML doc ...

  4. 记一次IDEA 打包环境JDK版本和生产环境JDK版本不一致引发的血案

    问题描述: 本地开发环境idea中能正常运行项目,而idea打war包到Linux服务器的Tomcat下却不能正常运行,报如下错误: 09-Aug-2019 08:56:06.878 SEVERE [ ...

  5. java.lang.UnsupportedClassVersionError:JDK版本不一致报错

    交代一下背景:公司运行的一个上线项目,打了个补丁发给客户后,反馈说运行不了.把源码拿回来场景重现.贴上报错信息: 08-15 14:13:29 ERROR doPost(jcm.framework.r ...

  6. 【传输协议】发送https请求,由于客户端jdk版本过高,服务端版本低。导致异常:javax.net.ssl.SSLHandshakeException: Server chose SSLv3, but that protocol version is not enabled or not supported by the client.

    本地环境jdk为1.8,服务器使用jdk版本未知.但发送https请求,抛出如下异常,解决方案. 一:发送异常内容如下 javax.net.ssl.SSLHandshakeException: Ser ...

  7. JDK版本过高,导致Eclipse报错

    1.JDK版本如果比较高,而使用的eclipse版本比较低,导致在eclispe中不能识别而报错.   2.点击Attach Source添加rt.jar后,又出现如下错误 3.这样的错误就是由于ec ...

  8. [Jenkins]JDK版本过高导致的java.io.IOException: Remote call on xxxx failed

    ------------------------------------------------------ 如需转载,请注明出处. 文章链接:https://www.cnblogs.com/dzbl ...

  9. jdk版本及编译版本导致服务器部署UnsupportedClassVersionError错误

    java本地代码运行正常,部署到服务器无法运行,错误如下: Caused by: java.lang.UnsupportedClassVersionError: com/teshehui/cms/ac ...

随机推荐

  1. Android摄像头採集的视频数据流怎样通过Socket实时发送到目标服务端

    分两块: 1.取得摄像头採集的视频流 2.发送到server端 protected MediaRecorder mMediaRecorder; private LocalServerSocket mL ...

  2. 基于bootstrap的纯静态网站目录

    一.博客页面 二.登陆页面 三.信息采集 四.管理后台 五.网站汇总(基于上边四个功能) 因为样式统一采用bootstrap的样式,所以不做介绍 样式导入可以将bootstrap下载至本地(有自动补齐 ...

  3. 安装Ubuntn 和 pycharm

    Ubuntu安装之python开发   什么??公司要用Ubuntu(乌班图)?不会用??怎么进行python开发??? 乌班图操作系统下载地址:http://releases.ubuntu.com/ ...

  4. Hibernate的检索策略和优化

    一.检索策略概述 当我们实现了一对多或者多对多的映射后,在检索数据库时需要注意两个问题: 1.使用尽可能小的内存:当 Hibernate 从数据库中加载一个客户信息时, 如果同时加载所有关联这个客户的 ...

  5. Linux环境下安装Tomcat

    一.准备安装的tar包 1.将安装包放在服务器上:apache-tomcat-7.0.81.tar.gz 2.将安装包解压:tar -zxvf apache-tomcat-7.0.81.tar.gz ...

  6. meteor---在合并打包多个文件ZIP下载的功能

    实现多个文件边打包边下载的功能,速度还可以,本人亲测,欢迎大家来指点archiver --用NPM安装这个模块---本人文件存储在file-collection 中,可以用fs : fs.create ...

  7. CodeSign相关

    要让苹果App在真机上跑,需要私钥(PrivateKey),证书(Certificate)和描述文件(Provisioning Profile). (一) 安全基础: 1.非对称加密: 2.Hash码 ...

  8. h5 placeholder 设置无效

    下面设置方式无效: ::-webkit-input-placeholder { /* WebKit browsers */ color: #999; } :-moz-placeholder { /* ...

  9. Protocol_BGP

    BGP协议 作者:Danbo 2015-7-8 BPG最重要的就是属性,下面我们针对路径属性分析一下.

  10. beego 导入一个普通的包都会执行init方法,如果是struct就不会执行

    default.go package controllers import ( "beego-test/models" "beego-test/service" ...