关于HTTPS的加密流程详解

 更新时间:2023年07月17日 08:31:45   作者:Mᴇᴇᴛ ꦿ᭄.  
这篇文章主要介绍了关于HTTPS的加密流程详解,http是为了解决http存在的问题而在http基础上加入了SSL/TSL,在HTTP/2中TCP三次握手后会进入SSL/TSL握手,当SSL/TSL建立链接后,才会进行报文的传输,需要的朋友可以参考下

HTTPS加密

HTTPS的混合加密

我们知道加密方式有三种

  • 对称加密
  • 非对称加密
  • 混合加密

HTTPS采用的就是对称加密和非对称加密的混合加密方法。

  • 混合加密解决了信息的机密性,防止数据被窃听
  • 摘要算法实现了数据的完成性,防止了数据被篡改
  • 数字证书提供了身份验证,防止了被冒充风险

在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。

在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。

采用「混合加密」的方式的原因:

  • 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
  • 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。

HTTPS  是如何建立连接的?

SSL/TLS 协议基本流程:

  • 客户端向服务器索要并验证服务器的公钥。
  • 双方协商生产「会话秘钥」。
  • 双方采用「会话秘钥」进行加密通信。

前两步也就是 SSL/TLS 的建立过程,也就是握手阶段。

SSL/TLS 的「握手阶段」涉及四次通信,可见下图:

SSL/TLS 协议建立的详细流程:

1. ClientHello

首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。

在这一步,客户端主要向服务器发送以下信息:

(1)客户端支持的 SSL/TLS 协议版本,如 TLS 1.2 版本。

(2)客户端生产的随机数(Client Random),后面用于生产「会话秘钥」。

(3)客户端支持的密码套件列表,如 RSA 加密算法。

2. SeverHello

服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。服务器回应的内容有如下内容:

(1)确认 SSL/ TLS 协议版本,如果浏览器不支持,则关闭加密通信。

(2)服务器生产的随机数(Server Random),后面用于生产「会话秘钥」。

(3)确认的密码套件列表,如 RSA 加密算法。

(4)服务器的数字证书。

3.客户端回应

客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。

如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:

(1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。

(2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

(3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。

上面第一项的随机数是整个握手阶段的第三个随机数,这样服务器和客户端就同时有三个随机数,接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」。

4. 服务器的最后回应

服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。然后,向客户端发生最后的信息:

(1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。

至此,整个 SSL/TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容。

到此这篇关于关于HTTPS的加密流程详解的文章就介绍到这了,更多相关HTTPS的加密流程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • windows下Idea使用git clone failed. Could not read from remote repository.

    windows下Idea使用git clone failed. Could not read from remote r

    这篇文章主要介绍了windows下Idea使用git clone failed. Could not read from remote repository.,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Sublime Text 4怎么安装使用

    Sublime Text 4怎么安装使用

    这篇文章主要介绍了Sublime Text 4怎么安装使用,下载对应的安装包,将该exe文件复制到对应的sublime text的安装目录下(与sublime_text.exe同级),右键管理员运行即可,需要的朋友跟随小编一起看看吧
    2022-01-01
  • VScode敲代码时自动导入包的解决方案

    VScode敲代码时自动导入包的解决方案

    这篇文章主要介绍了VScode敲代码时自动导入包的解决方案,文中通过图文介绍的非常详细,对大家学习或者使用vscode具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 网站被等恶意镜像的解决、反制措施详细教程

    网站被等恶意镜像的解决、反制措施详细教程

    这篇文章主要介绍了网站被等恶意镜像的解决、反制措施详细教程,需要的朋友可以参考下
    2016-10-10
  • Scratch3.0初始化加载七牛云上的sbs文件的方法

    Scratch3.0初始化加载七牛云上的sbs文件的方法

    今天通过本文给大家介绍Scratch3.0初始化加载七牛云上的sbs文件的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • 老生常谈Session和Cookie之间区别与联系(必看篇)

    老生常谈Session和Cookie之间区别与联系(必看篇)

    下面小编就为大家分享一篇老生常谈Session和Cookie之间区别与联系,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • vs2019生成dll并调用的实现示例

    vs2019生成dll并调用的实现示例

    这篇文章主要介绍了vs2019生成dll并调用的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 在Visual Studio中使用GIT进行源码管理

    在Visual Studio中使用GIT进行源码管理

    这篇文章介绍了在Visual Studio中使用GIT进行源码管理的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • HTTP协议入门_动力节点Java学院整理

    HTTP协议入门_动力节点Java学院整理

    这篇文章主要为大家详细介绍了HTTP协议入门的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 使用git config --global设置用户名和邮件问题

    使用git config --global设置用户名和邮件问题

    这篇文章主要介绍了使用git config --global设置用户名和邮件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论