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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Spring Batch 之 Hello World教程

    Spring Batch 之 Hello World教程SpringBatch之HelloWorld教程本文我们基于springboot和springbatch实现一个简单helloworld入门批处理程序。如果你刚刚接触springbatch,这篇教程会让你花最短时间理解springbatch框架。SpringBatch框架介绍开始代码之前,我们先了解框架中的核心组件,见下图:批处理过程有Job组成,job是封装整…

    2022年5月27日
    27
  • 免杀思路总结_标准专杀任务法

    免杀思路总结_标准专杀任务法免杀思路总结1.免杀技术简介1.免杀的重要性2.免杀的难度3.杀毒软件的排行国外国内1、Bitdefender1、3602、Norton3602、智量安全(没测过,据说很厉害)3、Kaspersky 3、火绒安全4、Webroot 4、金山独霸5、TrendMicro 5

    2022年8月20日
    11
  • c语言 无锁编程,无锁编程与有锁编程的效率总结、无锁队列的实现(c语言)「建议收藏」

    c语言 无锁编程,无锁编程与有锁编程的效率总结、无锁队列的实现(c语言)「建议收藏」1.无锁编程与有锁编程的效率无锁编程,即通过CAS原子操作去控制线程的同步。如果你还不知道什么使CAS原子操作,建议先去查看相关资料,这一方面的资料网络上有很多。CAS实现的是硬件级的互斥,在线程低并发的情况下,其性能比普通互斥锁高效,但是当线程高并发的时候,硬件级互斥引入的代价与应用层的锁竞争产生的代价同样都是很大的。这时普通锁编程其实是优于无锁编程的。硬件级原子操作使应用层的操作变慢,而且无法…

    2022年5月2日
    40
  • pytest的使用_实例方法只能用实例来调用

    pytest的使用_实例方法只能用实例来调用Pytest执行用例规则Pytest在命令行中支持多种方式来运行和选择测试用例1.对某个目录下所有的用例pytest2.对模块中进行测试pytesttest_mod.py3.对文件夹进行

    2022年8月6日
    3
  • poj 1845(等比数列前n项和及高速幂)

    poj 1845(等比数列前n项和及高速幂)

    2022年2月5日
    45
  • Java中级面试题及答案整理「建议收藏」

    Java中级面试题及答案整理「建议收藏」1、webservice是什么?webservice是一种跨编程语言和跨操作系统的远程调用技术,遵循SOPA/WSDL规范。2、springCloud是什么?springcloud是一个微服务框架,并提供全套分布式系统解决方案。支持配置管理,熔断机制,leader选举,服务治理,分布式session,微代理,控制总线,智能路由,一次性token。3、Java中堆和栈有什么不同?…

    2022年6月28日
    32

发表回复

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

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