TLS加密协议完整流程

文档
https://tools.ietf.org/html/rfc5246

TLS加密可以简单的分为两个步骤

  1. 密钥交换过程 (也可以称握手过程, 但握手这个词太泛太抽象)
    TLS的安全性主要是由这个阶段决定的. 通过非对称加密或其它的密钥交换手段, 如DH, ECDH , 来交换对称加密密钥.
    这些算法都非常耗CPU, 肯定不能全程用这些算法来加密所有的数据.
  2. 数据加密过程
    双方拿到密钥之后, 使用对称加密算法进行加解密, 因为对称加密运算快.

TLS加密算法通常使用类似这样的名字
ECDHE_RSA_WITH_AES_128_CBC_SHA256
ECDH_RSA_WITH_AES_128_CBC_SHA256
DHE_RSA_WITH_AES_128_CBC_SHA256
RSA_WITH_AES_128_CBC_SHA
通常的命名规则如下(代码是不会这么做的)
WITH之后的
AES_128_CBC, 或者AES_256_CBC等等, 表示所使用的对称加密 AES算法
最末尾的
SHA256, 或者SHA512之类的, 表示算法过程中所使用的hash算法
WITH之前的第1个单词表示证书所使用的算法, 通常是RSA
如果证书前面已经没有词缀了, 表示密钥交换过程, 就使用证书所使用的算法
如果证书前面还有词缀, 表示密钥交换使用指定的这个算法.
如果密钥交换算法以E结尾, 表示服务端每次都会生成一个临时公钥, 即单词Ephemeral

举例
ECDHE_RSA_WITH_AES_128_CBC_SHA256
证书为RSA证书, 密钥交换算法为ECDH, 服务端每次握手都生成一个随机ECDH公钥
ECDH_RSA_WITH_AES_128_CBC_SHA256
证书为RSA证书, 密钥交换算法为ECDH, 服务端的ECDH公钥是固定的, 就在证书中.
RSA_WITH_AES_128_CBC_SHA
证书为RSA证书, 密钥交换算法也是RSA. RSA的公钥本来就是固定的

客户端与服务端的完整交互流程

客户端 服务器 Client Hello( Random) 客户端将自己支持的cipher suit和一个随机值random传给服务器. 这个值将用于生成密钥 Server Hello( Random ) 服务器将选定的cipher suit和一个随机值random 传给客户端, 这个值将用于生成密钥 Certificate证书 把证书传给客户端, 证书中包括RSA私钥和签名 Server Key Exchange 服务端的密钥交换参数, 根据算法的不同, 参数也不同. (也可能没有这一步) Hello Done 服务器的参数传完了. 轮到客户端传了 Certificate证书 客户端将自己的证书传给服务器. (通常情况下没这一步. 除非要双向认证), Client Key Exchange 客户端将自己 的密钥交换参 数传给服务器. 计算密钥. 计算密钥 (6) Change Cipher Spec 这个消息表明之后 客户端消息都是加 密的(对称加密) (7) Encrypted Handshake Message 加密的Handshake Finished消息. 服务端需要解密才能处理 (8) Change Cipher Spec 这个消息表示之 后的服务器消息 都是经过加密处 理的(对称加密) (9) Encrypted Handshake Message 加密的Finished消息. 客户端需要解密, 才能处理 (7) Encrypted Application Message 加密的应用层数据, 比如Http Request (9) Encrypted Application Message 加密的应用层数据, 比如Http Response 客户端 服务器

使用Session Cache后的流程

如果客户端和服务器都允许缓存ssl session, 那么相同的客户端再次连接时, 可以使用缓存过的密钥参数, 不再需要交换密钥. 如下图

客户端 服务器 Client Hello( Random) 客户端将自己支持的cipher suit和一个随机值random传给服务器. 这个值将用于生成密钥 Server Hello( Random ) 服务器将选定的cipher suit和一个随机值random 传给客户端, 这个值将用于生成密钥 使用缓存的 参数计算密钥 使用缓存的 参数计算密钥 (6) Change Cipher Spec 这个消息表明之后 客户端消息都是加 密的(对称加密) (7) Encrypted Handshake Message 加密的Handshake Finished消息. 服务端需要解密才能处理 (8) Change Cipher Spec 这个消息表示之 后的服务器消息 都是经过加密处 理的(对称加密) (9) Encrypted Handshake Message 加密的Finished消息. 客户端需要解密, 才能处理 (7) Encrypted Application Message 加密的应用层数据, 比如Http Request (9) Encrypted Application Message 加密的应用层数据, 比如Http Response 客户端 服务器

猜你喜欢

转载自blog.csdn.net/wzj_whut/article/details/86231762