SSL协议概述和握手过程

SSL协议概述和握手过程SSL协议主要是为了保证WEB通信的安全性,是基于TCP协议的SSL协议有三个特性:1.机密性SSL协议的机密性主要依靠的是对称加密体质,在通信过程中,使用对称密码进行加密解密保证信息的安全性。2.完整性SSL协议的完整性主要依靠的是散列技术,对分组数据进行压缩之后,利用散列函数获得哈希值,加在分组信息的尾部,并且利用对称密码进行加密之后再传输(在传输到TCP层之前还有一个动作

大家好,又见面了,我是你们的朋友全栈君。

SSL协议主要是为了保证WEB通信的安全性,是基于TCP协议的

SSL协议有三个特性:

1.机密性

SSL协议的机密性主要依靠的是对称加密体质,在通信过程中,使用对称密码进行加密解密保证信息的安全性。

2.完整性

SSL协议的完整性主要依靠的是散列技术,对分组数据进行压缩之后,利用散列函数获得哈希值,加在分组信息的尾部,并且利用对称密码进行加密之后再传输(在传输到TCP层之前还有一个动作是增加记录头,SSL记录协议,之后会讲到)。然后接收方在接收到信息并且到达SSL层的时候先去除SSL记录协议头部,然后利用对称密码解密,之后去除压缩数据进行散列,比对尾部的散列值是否一样,若一样则证明数据没有改变。

3.认证性

SSL协议在握手的时候会用公钥证书来鉴别对方的身份。利用的是非对称加密体质中的公钥加密算法,这个时候是利用私钥来对身份信息进行加密,然后接收方再用公钥来进行解密,若是可以进行解密就证明对方是该证书的合法支持者,公钥证书是通过PKI(公钥基础设施,Public Key Infrastructure)来进行分发管理的。

SSL协议握手过程:

SSL协议握手过程分为两类:单向握手和双向握手,通信双方分别为Client和Server,这里的Client和Server不同于HTTP协议,区别在于发起SSL握手的定义为Client,以下暂且把它们称为客户和服务器。

1.SSL协议单向握手过程:

(1)首先客户像服务器先发送一个ClientHello的消息,开始了SSL握手的协商过程,这个消息主要包含了客户端的SSL的版本,随机数,回话ID,密码算法列表和压缩算法列表。

(2)此时服务端接收到消息,并且返回给客户端一个ServerHello的消息,和ClientHello的区别在于,此消息包含的是服务端选择的对称加密算法和压缩算法,而ClientHello的消息中包含的是算法列表。

(3)接着,服务端再发送给客户端一个Certificate的消息,该消息中就包含了公钥证书。服务端对公钥证书用私钥进行加密,然后发给客户端,客户端接收到消息,然后用公钥进行解密,如果解密得出来,则鉴别了身份,解密出来的公钥证书就包含了服务端的身份信息,这样客户端就能对服务端的身份进行鉴别了。

(4)之后,服务端再发给客户端一个ServerHelloDone的消息,结束握手协商的第一步,当服务端接收到该消息时服务端就知道不会再接收到之前的消息。

第一阶段的身份验证和加密算法的协商完成之后,接着开始第二阶段:回话密钥的协商:

(5)此时,客户端会发给服务端一个ClientKeyExchange的消息,其中包含了会话密钥的相关信息。

(6)然后,客户端再发给服务端一个ChangeCipherSpec的消息,告诉服务端,之后的消息都会用之前协商好的会话密钥进行加密。

(7)接着,客户端发给服务端一个Finished的消息,此时的消息是通过会话密钥进行了加密的,服务端利用该消息来验证SSL握手协商是否正确。

(8)之后,服务端发给客户端一个ChangeCipherSpec的消息,告诉客户端之后的消息会用刚才协商好的会话密钥进行加密。

(9)最后,服务端同样会发给客户端一个Finisher的消息,让客户端来验证SSL握手协商是否正确。

握手过程完成之后,就开始传递信息了。

2.SSL协议双向握手过程:

双向握手和单向后手的区别就在于多了服务端对客户端进行身份认证的过程,具体的过程如下,红色为改变的地方:

(1)首先客户像服务器先发送一个ClientHello的消息,开始了SSL握手的协商过程,这个消息主要包含了客户端的SSL的版本,随机数,回话ID,密码算法列表和压缩算法列表。

(2)此时服务端接收到消息,并且返回给客户端一个ServerHello的消息,和ClientHello的区别在于,此消息包含的是服务端选择的对称加密算法和压缩算法,而ClientHello的消息中包含的是算法列表。

(3)接着,服务端再发送给客户端一个Certificate的消息,该消息中就包含了公钥证书。服务端对公钥证书用私钥进行加密,然后发给客户端,客户端接收到消息,然后用公钥进行解密,如果解密得出来,则鉴别了身份,解密出来的公钥证书就包含了服务端的身份信息,这样客户端就能对服务端的身份进行鉴别了。

(4)然后,服务端会发给客户端一个CertificateRequest的消息,请求对客户端进行身份验证。

(5)之后,服务端再发给客户端一个ServerHelloDone的消息,结束握手协商的第一步,当服务端接收到该消息时服务端就知道不会再接收到之前的消息。

第一阶段的身份验证和加密算法的协商完成之后,接着开始第二阶段:回话密钥的协商:

(6)接着,客户端会发给服务端一个Certieficate的消息,这个消息包含了一张或多张符合X.509标准的公钥证书和公钥证书链,用于服务端对客户端的身份鉴别。

(7)此时,客户端会发给服务端一个ClientKeyExchange的消息,其中包含了会话密钥的相关信息。

(8)之后,客户端发给服务端一个CertificateVerify的消息,该消息包含了一个用客户端私钥签名的会话信息,服务端使用客户端的公钥验证该会话信息是否正确

(9)然后,客户端再发给服务端一个ChangeCipherSpec的消息,告诉服务端,之后的消息都会用之前协商好的会话密钥进行加密。

(10)接着,客户端发给服务端一个Finished的消息,此时的消息是通过会话密钥进行了加密的,服务端利用该消息来验证SSL握手协商是否正确。

(11)之后,服务端发给客户端一个ChangeCipherSpec的消息,告诉客户端之后的消息会用刚才协商好的会话密钥进行加密。

(12)最后,服务端同样会发给客户端一个Finisher的消息,让客户端来验证SSL握手协商是否正确。

(第一次写博客,还请大家多多指教,微笑

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141654.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 文本挖掘(part1)–文本挖掘概述

    文本挖掘(part1)–文本挖掘概述学习笔记,仅供参考,有错必纠文章目录文本挖掘概述什么是文本挖掘文本挖掘的意义文本挖掘的基本流程和任务基本流程常见的分析任务各个应用方向的举例文本挖掘的基本思路文本中所包含信息的层次NLP的基本思路原始语料数据化时需要考虑的工作文本挖掘概述什么是文本挖掘所谓文本挖掘就是想办法对文本这种数据加以利用.从大量文本数据中抽取隐含的,未知的,可能有用的信息,这也被称为自然语言处理(NLP).文本挖掘的意义人类文明的历史信息,90%以上都是以文本形式存在;电子版的文本数量在不断增长,需要自动化

  • 通过SaveFileDialog实现保存文件[通俗易懂]

    通过SaveFileDialog实现保存文件[通俗易懂]示例中通过点击按钮实现打开另存为对话框,进行相关的文件保存。在按钮单击触发下代码如下:    SaveFileDialogsaveExcel=newSaveFileDialog();//实例化SaveFileDialog    saveExcel.Filter=”工作表(*.xls)|*.xls|所有文件(*.*)|*.*”;//可用文件类型    if(save

  • visual studio创建数据库_读取硬件安装信息

    visual studio创建数据库_读取硬件安装信息管理类是WMI类,如Win32_LogicalDisk,,该类型可表示一个磁盘驱动器,并Win32_Process,,它表示的进程Notepad.exe等。在.NET的项目中,有时候需要获取计算机的硬件的相关信息,在C#语言中需要利用ManagementClass这个类来进行相关操作。以上是对ManagementClass类的部分谁明,此类型的所有公共静态成员都是线程安全的。以上的获取硬件信息的方法可以直接封装在一个类中,可以在项目中直接引用,这样可以加快项目的开发速度。…

  • ajax的实现_JavaScript高级教程

    ajax的实现_JavaScript高级教程点击这里下载PDF文件。  点击这里下载示例文件。  点击这里下载视频文件。  相关内容:AJAX培训第二讲:使用AJAX框架(下)  首先向大家说声抱歉,离上次隔的时间实在太长。由于一度工作比较忙,所以录制就耽搁了。而且后来在录制过程中也麻烦不断,主要原因是我的笔记本比较差,而录制的内容一多,几乎就会处于“僵死”状态,然后Captivate非常容易崩溃,最后连录制内容都弄坏了。录制结束后怎么发布

  • oracle number对应java数据类型BigDecimal

    oracle number对应java数据类型BigDecimal数据库中为number类型的字段,在java类型中对应的有Integer和BigDecimal都会出现;  经测试发现当数据库为sqlserver和DB2时,用getObject()取出来时Integer类型,但是oracle中取出来就会是Integer或者BigDecimal类型。原因是oracle与java类型对应于number长度有关。 遇到该类型问题,若要判断每

  • win10系统无法识别usb大容量移动硬盘_电脑没有usb大容量存储设备选项

    win10系统无法识别usb大容量移动硬盘_电脑没有usb大容量存储设备选项WIN10突然不能使用USB大容量存储设备(移动硬盘)的解决方法昨天开始使用usb硬盘,发现一块无法识别,一块识别好了以后不能打开。可能是之前一次系统更新有bug,但是一直也没有用移动硬盘,所以没有发现。 开始尝试各种方案,已经尝试过并且无效的有以下几个:1,卸载usb驱动,重启后系统自动安装,没有用;2,驱动精灵,没有用;3,驱动人生,没有用;4,驱动禁用启用

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号