- 确认加密通道协议版本
- 服务端生成的随机数 server.random , 后续用于生成“对话密钥”
- 确认使用的加密算法(用于后续的握手消息进行签名防止篡改)
- 服务器证书(CA 机构颁发给服务端的证书)
- 验证证书是否是上级 CA 签发的, 在验证证书的时候 , 浏览器会调用系统的证书管理器接口对证书路径中的所有证书一级一级的进行验证 , 只有路径中所有的证书都是受信的 , 整个验证的结果才是受信
- 服务端返回的证书中会包含证书的有效期 , 可以通过失效日期来验证 证书是否过期
- 验证证书是否被吊销了
- 前面我们知道 CA 机构在签发证书的时候 , 都会使用自己的私钥对证书进行签名证书里的签名算法字段 sha256RSA 表示 CA 机构使用 sha256 对证书进行摘要 , 然后使用 RSA 算法对摘要进行私钥签名 , 而我们也知道 RSA 算法中 , 使用私钥签名之后 , 只有公钥才能进行验签 。
- 浏览器使用内置在操作系统上的 CA 机构的公钥对服务器的证书进行验签 。确定这个证书是不是由正规的机构颁发 。验签之后得知 CA 机构使用 sha256 进行证书摘要 , 然后客户端再使用 sha256 对证书内容进行一次摘要 , 如果得到的值和服务端返回的证书验签之后的摘要相同 , 表示证书没有被修改过
- 验证通过后 , 就会显示绿色的安全字样
- 客户端生成随机数 , 验证通过之后 , 客户端会生成一个随机数 pre-master secret , 客户端根据之前的:Client.random + sever.random + pre-master 生成对称密钥然后使用证书中的公钥进行加密 , 同时利用前面协商好的 HASH 算法,把握手消息取 HASH 值 , 然后用 随机数加密 “握手消息+握手消息 HASH 值(签名)” 并一起发送给服务端 ( 在这里之所以要取握手消息的 HASH 值 , 主要是把握手消息做一个签名 , 用于验证握手消息在传输过程中没有被篡改过 。)
- 服务端收到客户端的加密数据以后 , 用自己的私钥对密文进行解密 。然后得到client.random/server.random/pre-master secret, HASH 值 , 并与传过来的 HASH 值做对比确认是否一致 。
- 然后用随机密码加密一段握手消息(握手消息+握手消息的 HASH 值 )给客户端
- 客户端用随机数解密并计算握手消息的 HASH , 如果与服务端发来的 HASH 一致 , 此时握手过程结束 ,
- 之 后 所 有 的 通 信 数 据 将 由 之 前 交 互 过 程 中 生 成 的 pre master secret /client.random/server.random 通过算法得出 session Key , 作为后续交互过程中的对称密钥

文章插图
推荐阅读
- CSS Border 使用分享
- 如何设计实现一个通用的分布式事务框架?
- 苹果手机不支持通话录音!!跟着我实现苹果手机通话录音功能
- 前端实现 SVG 转 PNG
- ddos攻击的原理
- CDN原理 CDN技术是什么
- 网站渗透测试原理及详细过程
- 知道马桶安装原理,今后出现马桶堵了的情况可以轻松解决
- 从底层彻底搞懂String,StringBuilder,StringBuffer的实现
- 如何设计实现一个轻量的开放API网关
