Bootstrap

国密SSL通信协议详细介绍与抓包分析

最近研究有关SSL协议的物联网安全协议,看了很多资料并且结合TASSL在ubuntu上跑了一个简单的demo,因此有了一些自己的理解,那么就详细讲解一下我所知道的SSL,相信这一篇文章就可以让你全面了解SSL。
在这里插入图片描述

什么是SSL?

SSL:Secure Sockets Layer 安全套接字协议,位于 TCP/IP 协议与各种应用层协议之间,基于HTTP之下,TCP之上的一个可选协议层,为数据通讯提供安全支持。

最开始HTTP在传输数据时使用的是明文,是不安全的。为了解决这个隐患,网景(Netscap)公司推出了SSL。HTTPS之所以安全就是因为加持了SSL这个外挂来对传输的数据进行加密。(HTTP+SSL)。

HTTPS = HTTP(超文本传输协议) + SSL(安全套件字层)/TLS(传输层安全协议)
在这里插入图片描述
那么一定会有人有疑惑,SSL和TLS到底是什么关系,为什么他俩总是一起出现,那是因为HTTPS的推出受到了很多人的喜爱,所以SSL就要不断的更新换代,当SSL更新到3.0时, 互联网工程任务组(IETF)对SSL3.0进行了标准化,并添加了少数机制,并将其更名为TLS1.0 安全传输层协议(Transport Layer Security),目前最新的是TLS1.3。

在这里插入图片描述

SSL的体系结构

SSL 协议可分为两层:记录协议和握手协议

握手协议:它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

记录协议:它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。

国密SSL

中国的最新相关安全标准,就是要把其中的安全实现更换成国密算法。简而言之,国密SSL就是SSL/TLS协议的国密版本
国密SSL通信依据的协议是中华人民共和国密码行业标准《SSL VPN技术规范GM/T 0024–2014》协议。这可是个好东西,有条件的可以自己下载看一下。

国密SSL协议包括:握手协议密码规格变更协议报警协议、网关到网关协议,记录层协议

握手协议:用于身份鉴别和安全参数协商

密码规格变更协议:用于通知安全参数的变更,这个很重要,解释一下,例如当双方协商好加密密钥,接下来要更换密钥或者使用协商好的密钥进行通信时就需要密码变更协议,更通俗来讲就是你说四川话,我说上海话,我们之间交流需要规定一种双方听得懂的语言才行。

报警协议:用于关闭通知和对错误进行报警

网关到网关协议:用于建立网关到网关的传输层隧道

记录层协议:用于传输数据的分段、压缩及解压缩、加密及解密、完整性校验等

SSL加密方式

SSL加密主要使用非对称加密方式

非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。

数字证书

数字证书:互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印。

数字证书包括:签发证书的机构,加密算法,Hash算法,公钥,证书到期的时间等。

SSL通信过程

在这里插入图片描述

第一步:客户端提供:
1.支持 SSL 协议版本号
2.一个客户端随机数(这是第一个随机数)
3.客户端支持的加密方法等信息;

第二步:服务端收到信息后,确认双方使用的加密方法,并返回:
1.数字证书
2.一个服务器生成的随机数(这是第二个随机数)等信息;

第三步:客户端确认数字证书的有效性,然后生成一个新的随机数,然后使用数字证书中的公钥,加密这个随机数,发给服务端;

第四步:服务端使用自己的私钥,获取客户端发来的随机数;

第五步:客户端和服务端通过约定的加密方法(通常是AES算法),使用前面三个随机数,生成对话密钥,用来加密接下来的通信内容;

SSL通信demo示例

在这里插入图片描述

在这里插入图片描述

1.Client_Hello

在这里插入图片描述

该消息是客户端Hello消息,作为握手协议的第一条消息。
Handshake type 1个字节
length 3个字节
version 2个字节,客户端在这个会话中使用的协议版本,在本协议中是1.1
random 32个字节,客户端产生的随机信息
session_id_length 1个字节,这是一个可变长字段,其值由服务端决定。如果没有可重用的会话标识或希望协商安全参数,该字段为空,否则表示希望客户端希望重用该会话。
Cipher suit length 2个字节,密码套件的长度
Cipher suit 10个字节,客户端所支持的密码套件列表,每个密码套件包括一个密钥交换算法,一个加密算法,和一个校验算法,服务端会在密码套件列表中选择一个与之匹配的密码套件。
Compression_methods_length 1个字节
Compression_methods 1个字节 客户端所支持的压缩算法列表

2.Server_Hello

在这里插入图片描述

Server Hello 该消息为服务端Hello消息,如果能够从client_hello中找到匹配的密码套件,服务端就会发送这个消息。
session_id_length 1个字节
session_id 32个字节,服务端使用的会话标识,如果客户端hello消息中的会话标识不为空,且服务端存在匹配的会话标识,则服务端重用与该标识对应的会话建立连接,并回应一样的会话标识,否则服务端产生一个新的会话标识,建立一个新的会话。

在这里插入图片描述

Server Certificate 服务端证书消息

服务端必须发送证书给客户端,紧跟着hello消息之后。本消息的内容为服务端的签名证书和加密证书。
服务器证书:签名证书在前,加密证书在后。
签名: 防伪造,防抵赖
加密:防偷窥

在这里插入图片描述

version 版本号 1个字节 ,后面多出2个字节
serialNumber 序列号, 20个字节 ,由发行者给予每一个证书的分配编号
signature 签名算法标识(基于SM3的SM2签名算法)
Algorithm Id : 算法id: 1.2.156.10197.501

在这里插入图片描述

3.Client_Certificate

在这里插入图片描述

Certificate: 客户端证书消息
有三个证书: 签名证书,CA根证书,加密证书

4.1 Change Cipher Spec

4.2 Encrypted handshake Message

在这里插入图片描述

Change Cipher Spec: 在后续的连续发送过程中,服务端都可以采用该报文通知客户端,后续将采用新秘钥进行数据加密通信。
Encrypted handshake Message: 该报文的目的就是,服务端告诉客户端,自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。该数据采用刚才协商好的秘钥进行加密,顺带验证秘钥。

一些额外的小知识

消息摘要

消息摘要也称为散列,是通过单向散列函数对消息的指印或汇总,用于验证数据完整性(即保证消息在发送之后和接收之前没有被篡改)

在这里插入图片描述

消息摘要一般有两个基本要求:首先,给定一个消息,应很容易求出消息摘要,而且给定某个消息,消息摘要应该相同。对一个消息(M1)及其消息摘要(MD),不太可能找到另一个消息(M2),使其产生完全相同的消息摘要。散列函数(又称杂凑函数)是对不定长的输入产生定长输出的一种特殊函数。

消息认证码(MAC)

消息认证码 MAC(Message Authentication Code)是一种实现消息认证的方法,也叫数据鉴别码 DAC,它是带有密钥的单向散列函数。MAC 是由消息和密钥的一个函数值 MAC=Ck(M)产生。其中 M 是变长的消息,K 是仅由收发双方共享的密钥,MAC 是定长的认证码。通信双方 A 和 B 共享密钥,当 A 要向 B 发消息时,计算 MAC 并将它附加在消息的后面,发往预定的接收者 B,B 使用共享密钥,对收到的消息计算得出新的 MAC’,判断 MAC 是否与 MAC’相等,若相等说明消息完整。

;