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握手协商是否正确。

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • datagrip2020 mac 激活码_通用破解码

    datagrip2020 mac 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    56
  • 注意 ExecuteNonQuery() 返回值 问题「建议收藏」

    注意 ExecuteNonQuery() 返回值 问题「建议收藏」前些日子作一些数据项目的时候在ADO.NET 中处理ExecuteNonQuery()方法时,总是通过判断其返回值是否大于0来判断操作时候成功。但是实际上并不是这样的,好在处理的数据操作多时修改,插入,删除,否则的话问题就有点打了,都是些基础的知识,但是很重要个人觉得有必要记下来。    ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,In

    2025年10月30日
    2
  • 正态qq图怎么判断分布_怎么判断是不是QQ小号

    正态qq图怎么判断分布_怎么判断是不是QQ小号一、正态QQ图的原理QQ图通过把测试样本数据的分位数与已知分布相比较,从而来检验数据的分布情况。[1]分位数:亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点。常用的有一个分位数叫,百分位数,它是指如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。QQ图是一种散点图,对应于正态分布的QQ图,就是由标准正态分布的分位

    2022年8月10日
    7
  • 定时器的使用_西门子定时器指令

    定时器的使用_西门子定时器指令中使用SCL语言编程的技巧前言:两年半前我就在工控网上发表了有关SCL编程的知识<<在S7300400型PLC中使用高级语言编程>>,但发表完后,即使我自己都从没有把任何使用SCL编写的程序用到实际控制中,当时的感觉是使用SCL编程到处受限,没有STL语言灵活和强大。直到最近使用施耐德的Unity软件编程,并使用这种已经国际标准化的文本语言(等同于西门子的SCL语言),才体…

    2022年10月6日
    4
  • mysql查看表的数据结构_mysql查找表结构

    mysql查看表的数据结构_mysql查找表结构MySQL查看表结构mysql查看表结构命令,如下:desc表名;showcolumnsfrom表名;describe表名;showcreatetable表名;useinformation_s…mysql查看表结构命令mysql查看表结构命令mysql查看表结构命令,如下:desc表名;showcolumnsfrom表名;describe表名;sh…

    2025年8月29日
    7
  • 有效沟通技巧

    有效沟通技巧【管理名言】面对面的沟通是最好的沟通方式沟通的三个行为:说、听、问要形成一个双向的沟通,必须包含三个行为,即:有说的行为、听的行为和问的行为。一个有效的沟通技巧就是由这三种行为组成的。换句话说,考核一个人是否具备沟通技巧的时候,看他这三种行为是否都出现。【案例分析】一家著名的公司在面试员工的过程中,经常会让10个应聘者在一个空荡的会议室里一起做一个小游戏,很…

    2022年6月16日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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