TLS协议与JDK版本之间微妙的关系

首先想知道TLS协议与JDK版本之间微妙的关系,就必须知道什么是TLS协议?
维基百科是这样说的:

传输层安全性协定(英语:Transport Layer Security,缩写作TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为网际网路通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器,网景领航员时,推出HTTPS协定,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布第一版TLS标准文件。随后又公布RFC 5246 (2008年8月)与RFC 6176(2011年3月)。在浏览器、电子邮件、即时通讯、VoIP、网路传真等应用程式中,广泛支持这个协定。主要的网站,如Google、Facebook等也以这个协定来建立安全连线,传送资料。目前已成为互联网上保密通信的工业标准。

SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通讯方做身份认证,之后交换对称金钥作为会谈金钥(Session key)。这个会谈金钥是用来将通讯两方交换的资料做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

TLS协定采用主从式架构模型,用于在两个应用程式间透过网路建立起安全的连线,防止在交换资料时受到窃听及篡改。

TLS协议是可选的,必须配置客户端和服务器才能使用。主要有两种方式实现这一目标:一个是使用统一的TLS协议通讯埠(例如:用于HTTPS的端口443);另一个是客户端请求服务器连接到TLS时使用特定的协议机制(例如:邮件、新闻协议和STARTTLS)。一旦客户端和服务器都同意使用TLS协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据。通过握手,客户端和服务器协商各种参数用于建立安全连接。

TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行建立加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。

根据我个人的理解就是TLS协议保证了我们客户端和服务端传输数据时的安全性,并且对传输的数据进行了一定的加密,同时通过了非对称加密算法对通讯双方的身份进行了验证,防止数据在传输过程被第三者进行监控和篡改相关数据,应用层协议可以运行在TLS协议之上(比如我们熟知的http协议等等),在一定程度上保证了双方通信的隐私。
    那么话说回来,JDK版本与TLS版本到底存在什么微妙的关系呢?
    从前几周对公司旧系统中一个提供给商户使用的demo进行整改的过程中,算是真正了解了它们两者之间神奇的关系。废话少说,先上图,大家可以看下如下的图片:

    从上图中不难分析出JDK8几乎对所有的TLS协议和SSLv3协议都是支持的,并且默认(default)支持TLS1.2版本;然而JDK6只支持TLSv1.1,TLSv1和SSLv3这三个版本,JDK7版本同理可得。那么问题来了,我的上级叫我将demo(使用JDK6编译的)整改成支持所有的TLS协议和SSLv3协议,我当时就想这不就是件轻轻松松的事情吗?直接将该demo改成JDK8编译的demo不就行了吗,而且高版本的JDK是可以向下兼容低版本的JDK的,商户用上这个高版本的demo也不至于出问题吧?
    于是我高兴地把我的想法告诉我的上级时,我上级先是认可了我的做法,但是经过一番分析后认为我的想法会对商户那边的改动比较大,同时升级JDK版本风险也大,不利于商户方便使用,所以最后还是建议我用原来JDK6编译的demo整改成支持所有的TLS协议和SSLv3协议的demo,当时我整个人懵了,想着这怎么可能做到呢?于是我百度了一番,发现果然还是有方法解决的,方法就是先通过引入一个jar包或者一个maven依赖,接着创建协议工厂类和创建工具类来使得这个效果可行,也就是让JDK6增加对tls1.2的支持,具体解决方案我就不详细说了,大家可以参考以下这个链接:https://www.cnblogs.com/supertonny/p/8378910.html ,我觉得写得确实挺好的。x
    通过以上链接按正常来说就可以就请轻松松松解决版本不兼容的问题了,但由于自己对协议工厂类的底层原理不是很熟悉,所以在使用相关工具类进行相关url请求时总是报协议使用受到攻击的bug,针对这个问题,个人分析了一段时间,最后通过将url中的ip地址改成域名(比如随便举个例子,将“https://175.5.3.2/”改成“https://mp.csdn.net/”)
这种类似的方式进而可以让JDK6编译的程序同样可以访问支持TLSV1.2协议的服务器。

综上所述,相信大家已经对TLS协议与JDK版本之间微妙的关系有了深刻的理解。整篇文章都是基于本人的理解,有什么不足的地方请指正,谢谢!

TLS协议与JDK版本之间微妙的关系相关推荐

  1. 偏导数、方向导数、梯度之间微妙的关系

    偏导数.方向导数.梯度之间微妙的关系 偏导数:函数某点沿一个某一个维度的变化率,是一个数值 方向导数:函数某点沿一个某一个方向的变化率,是一个数值 梯度:函数某点变化率最大的方向,是一个向量 可以看出 ...

  2. 〖Linux〗多个JDK版本之间快速切换

    由于工作的需要,经常要切换JDK版本比如我HOME目录下有三个JDK版本: ~/apt/jdk1.6.0_34 # JDK6 ~/apt/jdk1.7.0_67 # JDK7 ~/apt/jdk1.8 ...

  3. windows下JDK版本之间的切换

    安装JDK的时候个人比较推荐使用压缩包的方式安装. 如果你的电脑存在多个JDK版本的时候,如果使用的是压缩包解压的方式安装的话,你可能仅仅需要更改一下JAVA_HOME环境变量 你敲java -ver ...

  4. Mac 系统如何在多个jdk版本之间切换

    关注我 「Java之康庄大道」精彩文章第一时间推送给你 JDK更新的速度实在是太快了,我们一个项目还没完成,JDK已经更新好几代了,有时候我们既想要跟上JDK更新的步伐,又需要依赖以前的JDK版本,这 ...

  5. ubuntu中 不同JDK版本之间的切换

    Ubuntu中JDK 的切换前提是同时安装了多个版本,如jdk7和jdk8,若要切换,在终端输入: sudo update-alternatives --config javasudo update- ...

  6. windows10怎么配置二个或多个JDK版本_详细图解

    本示例,一台windows10电脑安装JDK1.7和JDK1.8二个版本 基础条件:安装好JDK1.7和JDK1.8 windows10怎么配置二个或多个JDK不同版本的步骤,如下: 第一步:配置ja ...

  7. idea看java版本设置_详解IntelliJ IDEA 中如何配置多个jdk版本即(1.7和1.8两个jdk都可用)...

    详解IntelliJ IDEA 中如何配置多个jdk版本即(1.7和1.8两个jdk都可用) 有时候需要看Java源码,但是 Java 1.7 和 Java 1.8的差别的关系,有时候你想查看不同jd ...

  8. macOSLinux设置JDK版本

    MacOS 下安装多个版本的 JDK 并统一管理 现在的 MacOS 都不自带 JDK 了,如果你在未安装 JDK 的 MacOS 中执行 Java 命令会出现如下提示: AigeStudio@aig ...

  9. NVIDIA,显卡驱动,CUDA版本之间兼容关系及安装

    NVIDIA显卡,显卡驱动版本及CUDA版本兼容关系及如何选择 NVIDIA显卡,显卡驱动版本及CUDA版本兼容关系及如何选择 要配置NVIDIA显卡的CUDA,各种版本之间的依赖关系以及与其他使用G ...

最新文章

  1. 【iOS】自定义控件入门:可拖动的环形进度
  2. [转]应届毕业生生存法则--工作篇
  3. ?线程池为什么可以复用,我是蒙圈了。。。
  4. 【星球知识卡片】模型压缩重要方向-动态模型,如何对其长期深入学习
  5. Oracle 10g数据库基础之基本查询语句-中-函数
  6. 这些年书读太少,没有读进去
  7. CSS position绝对定位absolute relative
  8. 液位系统c语言程序,超声波自动测量物体液位系统的设计
  9. P4721 【模板】分治 FFT
  10. 接口测试(二)--APP抓包
  11. 使用Eclipse开发Android应用程序
  12. ENVI FLAASH大气校正常见错误及解决方法
  13. 电工知识:常用电子元件名称及其对应图片实用大全
  14. 南京大学计算机学硕博士,2019年南京大学计算机软件研究所招收研究生说明
  15. edgewin10无法安装_win10系统安装Microsoft Edge时错误出现问题怎么办
  16. linux 下串口编程,uclinux下串口编程
  17. 解决因多网卡导致dubbo注册到ZK的IP错误问题,dubbox(当当,2.8.4)升级至dubbo(Apache,2.7.15)并集成
  18. mac mysql 5.7.12修改密码_Mac下 Mysql5.7忘记root密码及mysql5.7修改root密码的方法
  19. 可视化指标计算公式_技巧|1个小思路,解决不同量级间指标的可视化问题
  20. 免费把你的 GoogleDrive 和 OneDrive 变成 CDN

热门文章

  1. 中国互联网向收费模式转型 依靠虚拟商品营利
  2. 小米手机8 SE启用Root权限的方法
  3. 美狐人脸识别SDK技术,人脸检测SDK技术达到实时美颜滤镜的效果
  4. 七大康养模式全面落地,五福集团董事局主席徐紫芸的养老蓝图不断完善
  5. JVM宋红康(二): JVM与Java体系结构
  6. 毕业答辩PPT高分诀窍分享
  7. 嵌入式Linux开发环境搭建-(4)安装交叉编译工具链
  8. python模型预测足球_采用 Python 机器学习预测足球比赛结果!买谁赢就谁赢!
  9. Modulated Variational auto-Encoders for many-to-many musical timbre transfer论文阅读
  10. Python:ElGamal