TLS四次握手相关总结
一、为什么要使用TLS/SSL
明文传播的通信信息存在三大风险:
- 窃听风险
- 篡改风险
- 冒充风险
SSL/TLS协议是为了解决这三大风险而设计的:
- 所有信息加密传播,第三方无法窃听
- 具有校验机制,一旦被篡改,通信双方会立即发现
- 配备身份证书,防止被冒充
二、AES256-ECB运行机制
三、TLS/SSL的运行机制
1、客户端请求(Client Hello)
客户端向服务端发出加密通信请求消息:Client Hello,提供以下内容:
(1) Version:支持的协议版本,比如TLS 1.2版。
(2) Random:客户端生成的随机数,生成"会话密钥"的第一个参数。
(3) Cipher Suites:支持的加密方法,比如RSA公钥加密或DIffie-Hellman算法。
(4) Compression Methods:支持的压缩方法。
2、服务端请求(Server Hello)
服务器收到客户端请求后,向客户端发出回应,服务器的回应包含以下内容:
SeverHello
(1) Version:确认使用的加密通信协议版本,比如TLS 1.2版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) Random:一个服务器生成的随机数,生成"会话密钥"的第二个参数。
(3) **CiperSuite:确认使用的加密方法,比如RSA公钥加密或DIffie-Hellman算法。
(4) Compression Methods:使用的压缩方法。
Other
(1) Certificate:服务器证书。存放CA加密后的服务器公钥和服务器身份信息。
(2) Server Key Exchange(DIffie-Hellman):发送加密的服务端DH参数给客户端,后续客户端与服务端之间通过幂运算(DHE)或点乘运算(ECDHE)算出相同的值,做为生成"会话密钥"的第三个参数。
(3) Certificate Request:请求客户端证书。
(4) Server Hello Done:消息发送完毕,等待客户端消息。
3、客户端响应
客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。
(1) Certificate:客户端证书。存放CA加密后的服务器客户端公钥和服务器客户端身份信息。
(2) Client Key Exchange(DIffie-Hellman):发送加密的客户端DH参数服务端,后续客户端与服务端之间通过幂运算(DHE)或点乘运算(ECDHE)算出相同的值,做为生成"会话密钥"的第三个参数。
(3) Certificate Verify:私钥签名之前所有的握手数据发给服务器验证,证明这个客户端证书是自己发的。
(4) Change Cipher Spec:编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(5) Finished:客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
4、服务器响应
此时客户端和服务端都收到了对端发送的DH参数,经过数学运算,两端会算数相同的pre-master key。根据:
- client random(明文)
- server random(明文)
- pre-master key(未经信道传输,而是计算而出的密文)
服务器和客户端会根据以上三个参数计算生成本次会话所用的"会话密钥"。
服务端向客户端最后发送下面信息:
(1)Change Cipher Spec:编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(2)Finished:服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。
上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用会话密钥加密内容。
FAQ
TLS加密套件
ADD TTTLSPOLICY
ECDHE-RSA-AES256-GCM-SHA384-1
ECDHE-ECDSA-AES256-GCM-SHA384-1
DHE-RSA-AES256-GCM-SHA384-1
ECDHE-RSA-AES128-GCM-SHA256-1
ECDHE-ECDSA-AES128-GCM-SHA256-1
DHE-RSA-AES128-GCM-SHA256-1
| 幂运算 | 点乘运算 | 非对称算法 | 分组算法 | 对称算法 | 散列算法 |
|---|---|---|---|---|---|
| DHE | ECDHE | RSA;ECDSA | DES;AES | ECB;CBC;GCM | MD5;SHA |
| 密钥交换算法 | 签名算法 | 加密算法 | 摘要算法 |
|---|---|---|---|
| DHE;ECDHE;RSA | RSA;ECDSA | RSA;ECB;CBC;GCM | MD5; SHA |
DHE 算法
使用一个质数p的整数模n乘法群以及其原根g
服务端与客户端协定使用 p=23以及base g=5。
服务端选择一个加密后的整数a=6,计算A = ga mod p并发送给客户端。
Server Key Exchange:A = 56 mod 23 = 8
客户端选择一个加密后的整数b=15,计算B = gb mod p并发送给服务端。
Client Key Exchange:B = 515 mod 23 = 19
服务端计算S1 = Ba mod p
196 mod 23 = 2
客户端计算S2 = Ab mod p
815 mod 23 = 2
得 S1 == S2 = 2, 即为生成"会话密钥"的第三个参数

浙公网安备 33010602011771号