- TLS是基于SSL开发的协议,一般来说HTTP上面加一层SSL就是我们常说的HTTPS,SSL初始化有12个步骤,其中前4次为握手
- HTTPS主要是在HTTP基础上保证了:认证、加密、完整性校验
当客户端(浏览器)用HTTPS向服务器发请求时
注意区分key1和key2,key1密钥对是本身就有的,key2密钥对于不同的客户端请求是临时生成的、特异性的、每个客户端都生成一次
1.服务器向CA申请SSL证书
- CA本身有非对称密钥对,浏览器中保存了大部分可靠的CA机构公钥
- 服务器将其
公钥(pubKey1) 交给CA,CA用其私钥 添加签名(当客户端请求的时候用CA公钥验证签名)
2.客户端主动建立SSL的4次握手+8次初始化
- 客户端发送自己支持的SSL版本 和 非对称密钥生成算法(
pubKey2和priKey2 )等 - 服务器返回自己的公钥证书
3.SSL握手:客户端判断服务器是否有效
此时客户端拿到了服务器的公钥(pubKey1 )和签名
- 浏览器用CA的公钥,对
pubKey1 验签 - 如果可靠,客户端先和服务器进行SSL的初始化
4.SSL初始化:生成本次的非对称密钥对
此时客户端知道该服务器可靠了,但是我们针对不同的客户端访问同一个服务器,需要有不同的非对称密钥对来保证特异性
- 客户端用服务器的pubKey1加密生成的一个随机数
- 客户端和服务器都用这个随机数生成非对称密钥对(keys2)(对于这次连接是唯一的)
5.解决非对称加密速度慢的问题
此时我们利用服务器原有的keys1,对每一个访问的客户端都生成了其对应的keys2;但是非对称加密速度比对称加密慢2~100倍
- 对于每一个客户端,生成一个对称密钥,用
pubKey2 加密发给服务器 - 服务器用
priKey2 解密,获取这个对称密钥 - 因为keys2的特异性,其他客户端是不会知道这个对称密钥的,此后的建立在SSL上的HTTP请求都可以用这个对称密钥加密解密了,几乎不存在泄密风险
|