这是一篇我写在“我就是程序员”的微信订阅号的里文章,原文的地址是:https://mp.weixin.qq.com/s/qgeFgO83uGoeuo__vkef9w
为建立以安全为目的的HTTP通道,HTTPS应运而生。HTTPS在HTTP通信建立连接的握手过程中多加了一次TLS握手,用于产生会话秘钥,用对称加密算法对会话的内容进行加密。
图解TLS握手过程
图中的女士Alise作为客户端向作为服务端的Bob发送请求,协商建立起HTTPS通话的过程:
HTTPS的握手过程
在TCP三次握手成功之后,开始建立TLS握手。这里我们主要分析HTTPS特别的一步,即TLS握手,主要分为三个阶段:参数协商、身份验证、密钥交换。具体过程如下:
关于TLS握手过程,每一步骤的主要含义是:
ClientHello: 一次新的握手中的第一条消息,将客户端的功能和首选项传送给服务器。
ServerHello: 将服务器选择的连接参数传送给客户端。
Certificate: 典型用于携带服务器X.509证书链。服务器必须保证它发送的证书与选择的算法套件一致。Certificate消息可选,因为并非所有的套件都使用身份验证,并非所有的身份验证都需要证书。
ServerKeyExchange: 携带秘钥交换的额外数据。
ServerHelloDone:表明服务器已经将所有预计的握手消息发送完毕,等待客户端发消息。
ClientKeyExchange: 携带客户端为秘钥交换提供的所有信息。
ChangeCipherSpec: 表明发送端已取得用以生成连接参数的足够信息,已生成加密密钥,并且将切换到加密模式。客户端和服务器都会在条件成熟时发送这个消息。
Finished: 意味着握手已经完成,消息内容将加密,以便双方可以安全的交换验证整个握手完整性所需的数据。
TLS握手的结果
握手过程中协商了本次请求使用的加密套件,以及使用套件中的算法进行证书校验、身份验证、秘钥交换,再利用秘钥交换产生的预主秘钥,使用对称加密算法计算出会话秘钥。
下图是密码套件的具体构成,包含了上述的四个算法。
常用的密码套件有:
为了深入的了解TLS握手过程,需要搞清楚算法在这里起到了什么样的作用,下面选每一类算法里基础的算法进行分析,加密强度可能会比现在使用的算法强度低,但从原理的角度并不影响理解。
信息摘要算法
信息摘要算法和数字签名算法配合使用,用于证书加密和认真,首先理解一下这两个算法使用场景:
左半部分是服务端生成数字证书的过程:使用协商好的安全散列算法计算明文生成摘要,使用数字签名算法的私钥对证摘要加密,生成数字证书编号,和明文放在一起组成数字证书。
右半部分是客户端对数字证书认证的过程ÿ