首先,它是什么?我的理解是一开始进行SSL握手,商量好将要使用哪些加密算法来通讯,或者加密方法后使用非对称的加密方法,交互一下随机数,加上一个pre-master-secrect的,然后服务端利用私钥解密获取加了密的pre-master-secrect,这个过程实际上产生三个随机数:client random, server random, pre-master secret. 双方都有了三个随机数,双方同时使用随机数生成一个session key。后续就使用对称加密的方法进行通讯。http://www.linuxidc.com/Linux/2016-05/131147.htm 这篇文章讲得比较详细。

 

1. 至于PreMaster Secret(Key)的计算,主要是通过RSA或者Diffie-Hellman算法生成。我们可以看出,由于在Say Hello阶段,随机数都是明文传送的,如果PreMaster Secret泄漏的话,会导致整个SSL/TLS失效。

2. SL可以允许多种密钥交换算法,而有些算法,如DH,没有证书的概念,这样A便无法验证B的公钥和身份的真实性,从而C可以轻易的冒充,用自己的密钥与双方通信,从而窃听到别人谈话的内容。
而为了防止middle in the middle攻击,应该采用有证书的密钥交换算法。

3. 定要保护好自己环境(浏览器/操作系统)中根CA信任列表,信任了根CA就表示信任所有根CA下所有子级CA所签发的证书,不要随便添加根CA证书。(iOS需要做一些处理,相关的Api在Security Framework中)

4. 防止中间人攻击,就是基于第一条的原理,冒充服务器与客户端。