面试高频:HTTPS 通信流程

更多大厂面试内容可见 -> http://11come.cn

面试高频:HTTPS 通信流程

HTTPS 的加密流程

接下来说一下 HTTPS 协议是如何进行通信的:

HTTPS 通信使用的 对称加密 + 非对称加密 两者结合的算法

HTTPS 通信时,会先使用 非对称加密 让通信双方都拿到一个 对称密钥 ,之后双方通过这个 对称密钥 进行加密通信,通信过程使用的就是 对称加密

为什么要使用两种加密算法的结合呢?

  • 对称加密:加密解密过程中使用相同的密钥,速度很快,但是如何让双方都安全的拿到这个密钥比较困难(因此和非对称加密结合,来安全的传输这个对称密钥)
  • 非对称加密:加密解密过程中使用一对密钥,即公钥和私钥。公钥是公开的,用于加密;私钥只能自己拿到,用于解密,整个过程相对复杂,比较耗时,一般用于密钥的交换

通过了解这两种算法的区别,也就知道了为什么要使用这两种算法的结合了,HTTPS 既想要对称加密的性能,又想要非对称加密的安全性!

HTTPS 建立连接的流程

HTTPS 是基于 HTTP 协议,添加了 SSL 层来保证了数据传输的可靠性

HTTPS 的通信流程用大白话说的话,总共有 3 个步骤,如下:

1、客户端向服务器请求获取 公钥

2、双方协商产生 对称密钥

3、双方采用 对称密钥 进行加密通信

前两个步骤是建立 SSL/TLS 的过程,HTTPS 是基于 SSL 或 TLS 进行加密的,不过 SSL 已经退出历史舞台了,现在说的 HTTPS 其实就是 HTTP+TLS

使用 HTTPS 通信的话,通信双方先建立 HTTP 通信,也就是通过 TCP 三次握手建立 TCP 连接,之后再进行 TLS 握手 进行 HTTPS 加密通信

那么 TLS 握手的过程总共包含了 4 次通信 ,在 4 次通信之后,TLS 协议也就建立成功了,可以进行 HTTPS 通信了,TLS 握手过程中的 4 次通信如下:

1、第一次通信 ClientHello :客户端向服务端发送加密请求,主要是协商 TLS 版本、随机数(生成后续的对称密钥)

2、第二次通信 ServerHello :服务端向客户端回复,主要协商 TLS 版本、随机数(生成后续的对称密钥)、数字证书(包含公钥)

3、第三次通信 客户端回应 :取出数字证书的公钥,将用于通信的 对称密钥 通过公钥加密发送给服务端

4、第四次通信 服务端最后回应 :使用自己本地的密钥进行解密,得到用于通信的 对称密钥

通过 TLS 握手阶段,双方就可以拿到对称密钥,之后双方就可以使用这个 对称密钥 进行加密通信了

数字证书

这里再补充一下关于数字证书相关的内容

数字证书是由一个双方都信任的第三方机构签发,这个机构就是 CA (Certificate Authority,证书认证机构)

在 TLS 握手的时候,客户端第一次向服务端发起加密请求,此时服务端就会向 CA 申请数字证书,再把数字证书发送给客户端

客户端收到服务端发来的 数字证书 之后,此时客户端并不知道这个数字证书是否合法,万一在传输过程中被篡改了呢?

因此客户端会将 根证书 提前预装在系统内部,当客户端收到数字证书之后,根据本地的根证书去校验这个数字证书是否合法,如果合法的话,客户端拿到证书内部的公钥,就可以使用这个公钥加密信息发送给服务端了,双方在这个过程中通过非对称加密来协商一个对称密钥,之后使用对称密钥进行加密传输即可

数字证书中包含的内容:持有者的公钥、用途、颁发者、有效时间等信息

签发证书的流程如下:

相关推荐
HeiSenBerg10 小时前
Android 网络协议全解析:从 TCP 三次握手到 HTTPS 加密,一篇就够了
面试
Hi李耶11 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
我命由我1234511 小时前
棘轮效应极简理解
经验分享·学习·职场和发展·产品运营·求职招聘·职场发展·学习方法
天才测试猿11 小时前
实例介绍:Unittest框架及自动化测试实现流程
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
乐思智能科技有限公司13 小时前
PLECS软件学习使用(二)直流电机基本系统模型
人工智能·算法·机器学习·面试·职场和发展
GitLqr14 小时前
深度拆解 Dart 事件循环:从面试题看清 Microtask 与 Event Queue 的执行顺序
flutter·面试·dart
haerapi14 小时前
用 System V 共享内存实现本机高速 IPC:从原理到可运行环形队列
面试
Hi李耶15 小时前
【LeetCode】6-Z字形变换
算法·leetcode·职场和发展
菜小麒17 小时前
面试问题-01
面试·职场和发展
朱容zr33313317 小时前
为什么推荐使用自增主键?使用UUID作为主键的优缺点是什么?
java·运维·数据库·后端·mysql·面试·性能优化