看了好几遍,感觉算是明白 https 非对称加密通信的过程了,总结一下,大家看看是不是这样的:
首先,服务端需要向证书颁发机构申请一个自己的证书,这个证书里面会包含此该站点的基本信息,个人啊,公司啊,组织什么呢,我记得CA证书好像分三类的,然后还有该证书的 签名 以及 hash 值用于在通信中客户端鉴别此证书是否合法。
https 通信分为四个步骤:
1. c->s,客户端发起加密通信请求,这个请求通常叫做 ClientHello请求,告知自己支持的协议版本号,加密算法,压缩算法,以及一个用于生成后续通信密钥的随机数;
2. s->c,服务端响应,也叫作 ServerHello,确认加密通信协议,加密算法,以及一个用于生成后续通信密钥的随机数,还有网站证书;
3. c->s,客户端在收到上一步服务端的响应之后,首先会检查证书的颁发者是否可信任,是否过期,域名是否一致,并且从操作系统的证书链中找出该证书的上一级证书,并拿出服务端证书的公钥,然后验证签名和hash,如果验证失败,就会显示警告,我们经常在Chrome里面看到,“此网站有风险,是否继续什么的”。如果验证通过,客户端会向服务端发送一个称作 “pre-master-key” 的随机数,该随机数使用证书的公钥加密,以及编码改变通知(以后咋们就用协商的密钥堆成加密通信了),客户端完成握手。
4. 服务端在收到上一步客户端请求之后,也会确认我以后发给你的信息可就加密了哦,并且完成握手。
此时,客户端有第一步自己生成的随机数,第二步收到服务端的随机数,第三步的 pre-master-key,服务端也是如此,他们就可以用这三个随机数使用约定的算法生成同一个密钥来加密以后的通信数据了。
展开