SSL/TLS再分析
SSL:安全套接字层,主要是保障数据传输的安全,当前的版本为3.0。它具体又分为两层:
- SSL记录协议:直接建立在传输协议层上,主要支持数据的封装、压缩、加密认证等功能的支持
- SSL握手协议:建立在记录协议之上,主要是在实际的数据传输开始前,进行握手、协商加密算法和密钥等
TLS:传输层安全协议,是SSL的升级版本,基于3.0
SSL/TLS的主要服务可总结如下:
- 通信双方的身份认证
- 通信数据的加密(防止窃听)
- 数据完整性校验(防止被修改)
握手过程——密钥协商过程【单向认证】
客户端发出请求
- 提供客户端支持的安全协议层的协议版本,如SSL 3.0
- 提供客户端支持的压缩、加密算法供服务端选择(因为每个客户端支持的算法不一样,所以需要提供)
- 生成一个随机数(A),发送给服务端
#服务端回应
- 确定安全协议层的协议版本是否一致,不一致则直接关闭加密通信
- 将证书发送给客户端(???)
- 【可选】要求客户端证明自己的身份,服务端可以向客户端发出Cerficate Request消息
- 生成一个随机数(B),发送给客户端
- 确认服务端的压缩加密算法
#客户端回应
- 【可选】如果服务端需要对客户端进行验证,首先需要向服务端发送客户端的证书,让服务端来验证客户端的合法性。
- 验证服务端证书
- 再次生成一个随机数(C)(该随机数用服务器公钥加密,防止被窃听),它是客户端使用一些加密算法(例如:RSA, Diffie-Hellman)产生一个48个字节的Key,这个Key叫 PreMaster Secret(PreMaster Key)
- 客户端握手结束通知,表示客户端的握手阶段已经结束
服务端回应
- 服务端会根据前面的3个随机数A、B、C生成后面对称通信的密钥,并发送给客户端
- 服务端握手结束通知,表示服务端的握手阶段已经结束
关于Key的一些总结
上面提到3个随机数
- A:客户端发起请求时传给服务端
- B:服务端回应客户端时
- C:客户端完成证书验证,通知完成握手结束
PreMaster Key
PreMaster Key就是随机数C,是客户端使用RSA或者DH加密算法生成的。
PreMaster Key的前两个字节是TLS/SSL的版本号。
Master secret
由于服务端和客户端都有一份相同的PreMaster secret和随机数,这个随机数将作为后面产生Master secret的种子,结合PreMaster secret,客户端和服务端将计算出同样的Master secret。
整个的关于Key的流程是: