前言

遇到这个问题得说一下笔者的开发环境,笔者所在公司,平时开发用的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. Zoj2421 广搜

    <span style="color:#330099;">/* M - 广搜 加强 Time Limit:2000MS Memory Limit:65536KB 64b ...

  2. shell-判断循环

    shell条件测试 test 每个完整的合理的编程语言都具有条件判断的功能. bash可以使用test命令,[]和()操作,还有if/then结构 字符串判断 -n string 判断字符串长度非零 ...

  3. 基于websocket实现的web聊天室

    # -*- coding:utf-8 -*- import socket import base64 import hashlib def get_headers(data): "" ...

  4. 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用

    http://www.tuicool.com/articles/2MramqI 时间 2014-07-29 09:28:36  点滴之间 聚沙成金 原文  http://www.path8.net/t ...

  5. 横向卷轴(side-scrolling)地图的canvas实现

    标题有点小题大作了,实际上是实现一张看起来连续的运动背景图片. 效果如下:   // 实现原理: 图片1与图片2是两张首尾衔接的图片,图片1以一定速度移出canvas,图片2慢慢移进canvas,当图 ...

  6. IOS UIWebView 随记

    UIWebView中加载的网页尺寸太大,如何让网页适应屏幕大小 webview.scalesPageToFit = YES;

  7. OpenWrt:路由器上的Linux

    官网:https://openwrt.org/ 适于嵌入式设备的一个Linux发行版,可刷无线路由器. 相对原厂固件而言,OpenWrt不是一个单一.静态的固件,而是提供了一个可添加软件包的可写的文件 ...

  8. 【BZOJ3566】[SHOI2014]概率充电器 期望+树形DP

    [BZOJ3566][SHOI2014]概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线 ...

  9. 分布式流媒体直播服务器系统 For Linux

    在之前的一篇<基于Darwin实现的分布式流媒体直播服务器系统>中,我们配置了在Win32下面的流媒体直播系统,今天我们分享一下在Linux下面EasyDSS分布式直播服务器系统的配置. ...

  10. mysql学习之基础知识

    一.什么是数据库 一般而言,数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,使用关系型数据库管理系统(RDB ...