前文说到了6 组key material, 12个hash 值,非常迷惑, 今天才搞明白, 原来所有这些内容就是 对称密钥的内容。

HTTPS 基本流程3_.net

上面的图 虽然不是很清晰,但是, 其实也已经写明白了, 就是 右边的 CBC 模式的部分。对于 CBC模式的DES加密算法, 是需要这些内容的。

 

 

HTTPS 基本流程3_随机数_02

 

关于 身份认证, 其实不是 防止 篡改, 说的另外的一回事。 一般就是说,防止 middler man, 就是验证 服务端就是 我想要的那个。 通过 证书 验证, 可以完成 身份的认证。

当然, 其实我们也可以 对客户端 进行认证, 这也是 身份认证的一部分。

  1. 身份认证:第三方无法伪造服务端(客户端)身份

 

HTTPS 基本流程3_身份认证_03

 

DH 算法的通信建立过程是这样的:

HTTPS 基本流程3_随机数_04

 

 

HTTPS 基本流程3_服务端_05

 

 总之,如果协商过程使用 RSA 的话, 建立tls / ssl通道(正式传输 tls 上层数据之前)有7个 交互过程:

1 C->S:Client Hello
2 S->C:Server Hello
3 S->C:Certificate, Server Key Exchange, Server Hello Done
4 C->S:Client Key Change
5 C->S:Change Cipher Spec
6 C->S:Encryted Handshake Messagex`
7 S->C:Change Cipher Spec, Encryted Handshake Message
8 C->S/S->C:Application Data

 

简单的SSL握手连接过程(Server端交换证书给client)

1.C->S:client发送ClientHello,指定版本,随机数(RN),所有支持的密码套件(CipherSuites)

2.S->C:server回应ServerHello,指定版本,RN,选择CipherSuites,会话ID(Session ID)

3.S->C:server发送Certificate

4.S->C:Server发送ServerHelloDone

5.C->S:Client发送ClientKeyExchange,用于与server交换session key

6.C->S:Client发送ChangeCipherSpec,指示Server从现在开始发送的消息都是加密过的

7.C->S:Client发送Finishd,包含了前面所有握手消息的hash,可以让server验证握手过程是否被第三方篡改

8.S->C:Server发送ChangeCipherSpec,指示Client从现在开始发送的消息都是加密过的

9.S->C:Server发送Finishd,包含了前面所有握手消息的hash,可以让client验证握手过程是否被第三方篡改,并且证明自己是Certificate密钥的拥有者,即证明自己的身份

已经SSL握手完成,已经 建立tls / ssl通道了。

10 C->S/S->C:Application Data  开始正式数据交互

 

实际上呢, 2/3/4 几个步骤是可以合并的, 5/6/7 也是,8/9 也是。 所以抓包的时候可以看到 4次通信。