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

article/2025/9/29 10:03:03

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版本之间微妙的关系有了深刻的理解。整篇文章都是基于本人的理解,有什么不足的地方请指正,谢谢!


http://chatgpt.dhexx.cn/article/mMa0o5pL.shtml

相关文章

linux jdk免安装配置,生产环境免安装jdk的使用方法

以下为《生产环境免安装jdk的使用方法》的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。 使用流程 一、概述 医院的生产环境可能已经安装过jdk,如果jdk的版本不是1…

jdk1.8的安装教程

1、下载java1.8 URL: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载eclipse URL: http://www.onlinedown.net/soft/558304.htm 下载并安装maven地址: http://maven.apache.org/download.html 先选择Accept&…

在linux上安装jdk

1. 概述 此篇主要向你介绍如何一步一步的在linux环境上面安装jdk,包括jdk的下载、安装、和环境变量的配置。 2. 概念 2.1.JDK(Java Development Kit) 它是 Java 语言的软件开发工具包(SDK)。 JDK包含的基本组件包括: javac – 编译器,…

JDK下载安装配置环境变量

下载并安装JDK8 JDK的全称是JavaSE Development Kit,即java开发工具包,是sun公司提供 的一套用于开 发java应用程序的开发包,它提供了编译、运行java程 所需的各种工具和资源,包括java编译器、java运行时环境,以及常…

下载并安装JDK7 教程

下载并安装JDK7 JDK的全称是JavaSE Development Kit,即java开发工具包,是sun公司提供的一套用于开发java应用程序的开发包,它提供了编译、运行java程序所需的各种工具和资源,包括java编译器、java运行时环境,以及常用…

jdk8下载、安装和环境配置

一、jdk、jre和Java的关系 什么是java编程:即使用IDEA、eclipse等可以使用java语言进行编程的软件,配置好jdk(java运行环境)进行编程, ’ jdk:包括了Java运行环境jre(Java Runtime Envirnment)、一堆Java…

JDK11的下载安装以及环境配置

JDK11的下载安装及环境配置 JDK的下载JDK的安装环境变量的搭建测试安装成果 JDK的下载 下载链接: https://www.oracle.com/java/technologies/javase-downloads.html 选择你自己需要的版本,本人下载的 JDK11 进入下载页面,直接拉到底部 (使…

【教程】JDK的下载、安装与设置环境变量(win10图文详细版)

目录 (一)JDK的下载(二)JDK的安装(三)JDK的环境变量1.win10【此电脑】如何在桌面显示2.找到环境变量3.设置环境变量4.最后一步!测试(四) 小结(一)JDK的下载 1.下载首选当然是官网,2020年的官网都长成这个样子了= = JDK下载官网 简单粗暴地选择Java SE 14 的JDK Download就可…

JDK下载安装文档

下载并安装JDK7 JDK的全称是JavaSE Development Kit,即java开发工具包,是sun公司提供的一套用于开发java应用程序的开发包,它提供了编译、运行java程序所需的各种工具和资源,包括java编译器、java运行时环境,以及常用的…

Jmeter 及 JDK 下载 安装教程

jmeter的安装首选需要按下载 jdk和 jmeter jdk:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html Jmeter下载地址:https://jmeter.apache.org/ jmeter下载 1、打开Jmeter官网地址:https://jmeter.apache.org/ …

JDK安装和环境变量配置(Win10图文详解)

JDK的安装和环境变量配置(Win10,图文详解) 操作系统JDK的安装JDK下载 系统环境变量配置验证JDK和环境变量配置Eclipse安装Java小白入门项目代码参考结语 操作系统 Win10,64位操作系统JDK的安装 如何下载和安装JDK,配置…

macbook pro安装JDK

目录 一、通过oracle官网下载原生JDK二、使用封装的openjdk三、演示1、打开网址:https://www.azul.com/,进入网站首页,点击 【Download Now】按钮2、向下翻,找到如图页面,并根据需要下载相应版本的JDK 。 3、下载完成后…

简单服务器搭建三、安装jdk

第一篇就提到过,我想要在服务器上部署一个java项目,JDk是java运行的必须环境,服务器搭建之后,首先配置好JDK环境。 工具:jdk 版本:jdk1.8 系统:CentOS7.5 64位 1 下载安装包 在官网下载jdk…

JDK、eclipse安装

一.JDK的安装 1.下载JDK 进入官网(https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html),选择Java archive,选择要下载(根据电脑操作系统选择)的JDK版本(在此为win10对应版本&…

分享一个好玩的gif动图生成网站

分享一个好玩的gif动图生成网站,可以自由配字幕,快去尝试吧 https://www.gifhome.com/dt/

GIF动图获得第一帧图片

本地图片 服务器图片:(说明:这是原始的方法获取,项目中可能会有封装的工具类使用。FileInputStream 的 read 方法有bug,实际项目使用工具类获取。) 图片裁剪: 图片缩放:

汉字动图动态图gif格式,无水印 4500个汉字

** 汉字动图动态图gif格式,无水印 4500个汉字 ** 吐血整理了一套汉字动图gif格式图片,不是flash的,4500个左右,基本够用了,适合教辅资料、老师使用,无水印,废话少说,直接上图&…

GIF出处是哪,如何快速截取GIF表情包

前一段时间整个网上都是王校长吃热狗的表情包,确实是够笑一段时间的了,像这样的表情包还有很多,比如韬韬的各种表情包,那GIF出处是哪,如何快速截取GIF表情包呢? 1、GIF出处可以是来自动画,也可以…

如何在CSDN中插入动图gif

如何在CSDN中插入动图gif (1)方法一:在线制作多图合成gif动画 在线制作gif动画链接 ①选择需要制作gif动画的图片将其添加 ②调整时间间隔,图片宽高等设置 ③一键生成gif将其下载到本地就可以了~ 2、GIF录制软件 ①选用GifCa…

分享一张'动态图'...

据说如果你看到的“动态图”转得越快,你的压力就越高!