10年 Java程序员,硬核人生!勇往直前,永不退缩!

欢迎围观我的git:https://github.com/R1310328554/spring_security_learn 寻找志同道合的有志于研究技术的朋友,关注本人微信公众号: 觉醒的码农,或Q群 165874185

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

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

 

 

 

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

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

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

 

 

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次通信。

 

 

 参考:

https://blog.csdn.net/tterminator/article/details/50675540 非常非常详细

https://blog.csdn.net/phunxm/article/details/72853376 非常非常详细

https://blog.csdn.net/a_tu_/article/details/77119532

 http://www.cnblogs.com/svan/p/5090201.html

posted on 2018-12-30 00:51  CanntBelieve  阅读(352)  评论(0编辑  收藏  举报