TLS/SSL协议原理

By 水木神風 at 2016-11-09 • 0人收藏 • 3035人看过

在物联网开发中,我们常常可以看到,设备和APP与云端的通信都是通过HTTPS以及采用了TLS/SSL的MQTT进行的,这样可以提高信息的安全性。其中,它们都只是身披SSL外壳而已,SSL独立于HTTP和MQTT存在,并且能够和其他应用层的协议配合使用,这相当于TLS/SSL存在于应用层和传输层之间的,上层应用经过了TLS/SSL层加密后才进行TCP通信,本篇文章为大家介绍TLS/SSL协议的握手过程和协议的组成。

一、TLS/SSL协议握手过程

HTTPS通信建立的过程其实是这样子的:首先完成TCP三次握手,再进行TLS/SSL握手,以上两类握手完成后就建立了一个安全的通道,最后才进行HTTP通信。

下图是基于RSA加密算法的握手过程:

TLS/SSL协议原理1.TLS/SSL客户端会发送一个称为”Client Hello”的消息包,里面包含了一串随机字符串、TLS/SSL的版本和客户端支持的已经按优先次序排列的密码族;

2. TLS/SSL服务器这边也会响应一个”Server Hello”的消息包,里面包含了一串随机字符串、服务器选择的加密方式、服务器的数字证书以及session ID;(当然这里服务器也可以要求验证客户端,即发送客户端数字证书请求)

3. TLS/SSL客户端先是核实了服务器的数字证书后,使用服务器提供的公钥加密一串预主密钥(premaster secret)发送给服务器;(如果客户端前面被要求数字证书,客户端就会发送用客户端私钥加密的预主密钥和自己的数字证书给服务器,如果客户端没有数字证书,就会回复一个”no digital certificate alert”的警报)

4. TLS/SSL服务器使用自己的密钥解密获取预主密钥(premaster key);

5.最后双方根据前面的协商好的加密方式,结合两串随机字符串(Client random, Server random)和预主密钥(premaster key)生成后续应用层通信使用的会话密钥,至此完成了安全通道的建立,后续的消息通信可以使用这个会话密钥加密进行。

TLS/SSL除了上面所提到的基于RSA加密算法的握手过程,还有一种是基于Diffie-Hellman加密算法的握手过程,两种握手过程主要的区别是Diffie-Hellman中预主密钥的生成稍微复杂一点:服务器和客户端需要多进行两次交互,客户端发送客户端DH参数(Client DH paramter)和,服务器发送服务器DH参数(Server DH paramater),基于这两个参数来生成预主密钥,其他握手步骤都一样。

二、SSL/TLS协议的组成

TLS/SSL协议原理TLS/SSL协议可以分为两层,上层分为三个子协议:Handshake, Change CipherSpec, Alert,下层为Record,结合上面的握手过程理解这些子协议的作用:

1)Handshake:用来协商双方握手的过程,即进行密钥的交换、要使用的加密方式等等;

2)Change CipherSpec:用在告之对方切换加密使用的密钥,比如前面交换随机字符串的时候使用的是服务器的公/私钥,双方都生成会话密钥后,就需要进行切换,后续的信息都是通过会话密钥加密而不是服务器的公私钥;

3)Alert:用在一些警报,比如发生在前面服务器有可能要求得到客户端的数字证书,而这个时候客户端没有,客户端就会回复一个无数字证书的警报,再比如发生在握手过程中信息无法解密等一些;

4)Record:实实在在地进行数据的处理,比如根据协商好的加密方式对上层传下来的数据加密完成后传递到传输层,或者把传输层传来的数据进行解密然后送到上层。


登录后方可回帖