前文说到了6 组key material, 12个hash 值,非常迷惑, 今天才搞明白, 原来所有这些内容就是 对称密钥的内容。
上面的图 虽然不是很清晰,但是, 其实也已经写明白了, 就是 右边的 CBC 模式的部分。对于 CBC模式的DES加密算法, 是需要这些内容的。
关于 身份认证, 其实不是 防止 篡改, 说的另外的一回事。 一般就是说,防止 middler man, 就是验证 服务端就是 我想要的那个。 通过 证书 验证, 可以完成 身份的认证。
当然, 其实我们也可以 对客户端 进行认证, 这也是 身份认证的一部分。
- 身份认证:第三方无法伪造服务端(客户端)身份
DH 算法的通信建立过程是这样的:
总之,如果协商过程使用 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次通信。