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. SVN状态图标不显示
  2. 【Python基础】惊叹,Pyecharts绘制饼图原来可以如此漂亮!
  3. scala for循环
  4. 最佳字符串对齐的Java实现
  5. 腾讯天衍实验室新算法入选国际万维网大会 新冠疫苗AI问答上线
  6. Kafka 慌了!这个中间件,要火了?
  7. java 池化_溯本求源: JAVA线程池工作原理
  8. Ajax Loader 图标
  9. Linux文件的三种特殊权限SUID、SGID、STICKY
  10. 开源的魔兽世界参考架构——mangos--网络游戏引擎BigWorld 服务器介绍
  11. 基于无人售货机商品售卖情况推荐商品
  12. 课程计划、课程标准、教材三者关系
  13. MapReduce之InputFormat、OutputFormat(三)
  14. Python基础07
  15. office2019怎么在同一个窗口显示多个文件
  16. MindManager 思维导图全面介绍
  17. tar 命令压缩时报错 tar: Removing leading `/' from member names
  18. 【计算机毕业设计】java线上教学平台 springboot智慧教学系统
  19. 数据分析-爬虫学习笔记(1)
  20. 游承超:手机防爆膜可以降低手机的压力(15P)

热门文章

  1. 正厚知识 | 什么是操作系统
  2. 厦门安达仕酒店正式启幕,位于城区核心“湖滨南”商务区
  3. 【原创】关于西门子S120 的电气图纸设计
  4. 新闻众筹:理想丰满,现实骨感
  5. 计算机视觉(三):基于Scipy图像处理技术,图像模糊(灰色、彩色图像高斯模糊)、图像导数(sobel算子滤波)
  6. php tiny rss,CentOS7 安装 Tiny Tiny RSS
  7. 孪生网络---学习笔记
  8. 程序员眼中的又一个“葬爱家族”
  9. 计算机组成原理——单周期CPU
  10. 淮阴中学2021高考成绩查询,最新!淮中、清中、滨河等高中高考成绩公布!全线飘红.......