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)
blank

相关推荐

  • shiro框架的使用_ug星空安装步骤

    shiro框架的使用_ug星空安装步骤1.Shiro框架详解一、Shiro能干什么 ApacheShiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能: 认证-用户身份识别,常被称为用户“登录”;授权-访问控制;密码加密-保护或隐藏数据防止被偷窥;会话管理-每用户相关的时间敏感的状态。对于…

  • WPA2 KRACK Attacks 原文转载翻译[通俗易懂]

    WPA2 KRACK Attacks 原文转载翻译[通俗易懂]写在前面:博主水平有限,翻译中如果出现错误,还希望大家能够指正。原文链接:https://www.krackattacks.com/KeyReinstallationAttacks(krack)key重装攻击简介我们发现了关于WPA2的重大漏洞,WPA2是一个确保所有现代无线网络被保护的协议。当攻击者在受害者的一定范围内就可以利用这些漏洞来使用KRACK攻击。具体地说,攻

  • c语言list的使用方法,c语言list操作

    c语言list的使用方法,c语言list操作#includetypedefstructLnode{intdata;structLnode*next;}LND,*lnd;lndmalloclist(lndl){l=(lnd)malloc(sizeof(LND));returnl;}intinitlist(lndl,intn){l->data=n;l->next=NULL;lndp;for(…

  • vue封装组件以及调用「建议收藏」

    vue封装组件以及调用「建议收藏」1.index.jsexport{defaultasaddDialog}from’./addDialog’export{defaultasEditDialog}from’./EditDialog’editDialog.vue<template><div><el-dialogtitle=”编辑”:visible.sync=”dialogVisible”width=”40%”

  • Java核心技术(基础知识一)

    Java核心技术(基础知识一)Java程序设计概述1.1Java“白皮书”的关键术语简单性我们希望构建一个无须深奥的专业训练就可以进行编程的系统,并且要符合当今的标准惯例。因此,尽管我们发现C++不太适用,但在设计Java的时候韩式尽可能地接近C++,以便系统更易于理解。Java剔除了C++中许多很少使用、难以理解、容易混淆地特性。在我们看来,这些特性带来地麻烦远远多于它们地好处。的确,Java地语法是C++的一个“纯净”版本。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等。然而,设计者并

  • 百度分享代码–一键分享Baidu Share BEGIN

    百度分享代码–一键分享Baidu Share BEGINhttp://share.baidu.com/code/advance一、概述百度分享代码已升级到2.0,本页将介绍新版百度分享的安装配置方法,请点击左侧列表查看相关章节。二、代码结构分享代码可以分为三个部分:HTML、设置和js加载,示例如下:代码结构如下: 展示按钮–> window._bd_share_config={

发表回复

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

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