HTTPS通讯全过程

news2024/9/22 15:39:36

HTTPS通讯全过程

不得不说,https比http通讯更加复杂惹。在第一次接触https代码的时候,不知道为什么要用用证书,公钥是什么?私钥是什么?他们作用是什么?非对称加密和对称加密是啥?天,这些似懂非懂的概念,大大增加了我写代码的困难(本人就是不理解原理就浑身难受那种人惹,代码写着写着就想为什么要这样写,牛角尖一枚罢噜)。如果你也有这样的疑问,那么就让我们一起来看看这篇文章吧~~啾咪
在这里插入图片描述


文章目录

  • HTTPS通讯全过程
    • 一、https握手阶段
      • 1、按双方的操作步骤分
        • (1)客户端开始握手
        • (2)服务器响应
        • (3)客户端验证证书
        • (4)客户端生成 premaster-secret
        • (5)客户端将发送预主密钥
        • (6)服务端获取premaster-secret
        • (7)双方生成对称加密用的密钥key
        • (8)客户端finish
        • (9)服务端finish
        • (10)握手结束
      • 2、按消息发送分
        • (1)客户端ClientHello
        • (2)服务器ServerHello
        • (3)客户端将发送预主密钥
          • 【1】验证证书
          • 【2】生成permaster-secret
          • 【3】对permaster-secret加密
        • (4)客户端finish
          • 【1】服务器对预主密钥进行解密
          • 【2】双方生成对称加密密钥KEY
          • 【3】发送finish信息
        • (5)服务器finish
    • 二、通讯阶段
    • 三、其他概念
      • 1、信任链
      • 信任锚点:
      • 信任链断裂:
      • 2、证书链
        • (1)中间证书:
        • (2)根证书:
        • (3)信任模型:
        • (4)验证过程:
        • (5)证书吊销检查:
        • (6)证书属性:
        • (7)证书路径长度:
        • (8)交叉认证证书:
        • (9)信任决策:
      • 3、CA、根CA证书、中间CA证书
        • (1)CA:
        • (2)根CA证书:
        • (3)中间CA证书
        • (4)在证书中理解信任链
        • (5)使用类似派生的方法形成一级一级的证书的优势
      • 4、数字签名
        • 1、签发机构(CA)的私钥:
        • 2、证书内容的哈希值:
        • 3、加密哈希值:
        • 4、附加到证书:
        • 5、验证过程:
        • 6、信任链:
      • 5、数字证书
        • 1、身份验证:
        • 2、公钥和私钥:
        • 3、证书内容:
        • 4、数字签名:
        • 5、信任链:
        • 6、证书吊销:
        • 7、证书类型:
        • 8、用途:
        • 9、有效期:


一、https握手阶段

1、按双方的操作步骤分


(1)客户端开始握手

客户端通过发送一个 “ClientHello” 消息开始 TLS 握手。此消息包含客户端支持的 TLS 版本、一个客户端生成的随机数(client_random)、加密套件列表(cipher suites)、压缩算法列表,以及其他 TLS 扩展。

(2)服务器响应

服务器接收 “ClientHello” 消息后,回复一个 “ServerHello” 消息。此消息包含选定的 TLS 版本、一个服务器生成的随机数(server_random)、加密套件和压缩算法以及数字证书、证书链,证书链包括服务器的公钥证书和任何中间 CA 证书(但不含根 CA 证书)。服务器还可能发送一个 “ServerKeyExchange” 消息(如果需要),包含服务器的公钥或 Diffie-Hellman 参数。

(3)客户端验证证书

客户端验证服务器证书的有效性,包括证书链的完整性、证书是否过期、是否被受信任的 CA 签发、证书的域名是否与服务器域名匹配等

(4)客户端生成 premaster-secret

客户端使用算法生成premaster-secret,premaster-secret的生成有几种算法,具体使用那种算法,由前面的加密套件确定。

(5)客户端将发送预主密钥

客户端将premaster-secret使用ServerHello的证书中的公钥对premaster-secret进行加密得到的密文就是预主密钥。客户端将预主密钥发送给服务端。

(6)服务端获取premaster-secret

服务器使用私钥将预主密钥解密,得到premaster-secret。

(7)双方生成对称加密用的密钥key

双方根据ClientHello和ServerHello以及premaster-secret作为参数,使用相同的算法生成相同的密钥KEY,这样生成的KEY就是安全的。具体使用什么算法,也是由前面的加密套件协商选择的。

(8)客户端finish

客户端使用刚刚得到的KEY将握手结束信息加密,发送给服务端。

(9)服务端finish

服务端收到客户端的信息后使用KEY解密,并将客户端的握手结束信息使用KEY加密,发送给客户端。

(10)握手结束

客户端收到服务端发来的信息,使用KEY解密得到服务端的结束信息,随即结束握手阶段。


2、按消息发送分


(1)客户端ClientHello

客户端通过发送一个 “ClientHello” 消息开始 TLS 握手。此消息包含客户端支持的 TLS 版本、一个客户端生成的随机数(client_random)、加密套件列表(cipher suites)、压缩算法列表,以及其他 TLS 扩展。

(2)服务器ServerHello

服务器接收 “ClientHello” 消息后,回复一个 “ServerHello” 消息。此消息包含选定的 TLS 版本、一个服务器生成的随机数(server_random)、加密套件和压缩算法以及数字证书、证书链,证书链包括服务器的公钥证书和任何中间 CA 证书(但不含根 CA 证书)。服务器还可能发送一个 “ServerKeyExchange” 消息(如果需要),包含服务器的公钥或 Diffie-Hellman 参数。

(3)客户端将发送预主密钥

客户端收到ServerHello后。

【1】验证证书

客户端先验证服务器证书的有效性,包括证书链的完整性、证书是否过期、是否被受信任的 CA 签发、证书的域名是否与服务器域名匹配等

【2】生成permaster-secret

客户端使用算法生成premaster-secret,premaster-secret的生成有几种算法,具体使用那种算法,由前面的加密套件确定。

【3】对permaster-secret加密

客户端将premaster-secret使用ServerHello的证书中的公钥对premaster-secret进行加密得到的密文就是预主密钥。客户端将预主密钥发送给服务端

(4)客户端finish
【1】服务器对预主密钥进行解密

服务器使用私钥将预主密钥解密,得到premaster-secret。

【2】双方生成对称加密密钥KEY

双方根据ClientHello和ServerHello以及premaster-secret作为参数,使用相同的算法生成相同的密钥KEY,这样生成的KEY就是安全的。具体使用什么算法,也是由前面的加密套件协商选择的。

【3】发送finish信息

客户端使用刚刚得到的KEY将握手结束信息加密,发送给服务端。

(5)服务器finish

服务端收到客户端的信息后使用KEY解密,并将客户端的握手结束信息使用KEY加密,发送给客户端。握手结束。
在这里插入图片描述
给宝贝们偷来一张流程图惹(除了我还有谁把你们当小孩)
在这里插入图片描述
这位作者写的很不错,推荐大家看一下:
https://segmentfault.com/a/1190000021559557

二、通讯阶段

通讯阶段过程与Http通讯差别不大,唯一的差别是双方发送的数据包都会使用共享密钥KEY进行加密后再发给对方。

三、其他概念

1、信任链

信任链是网络安全和公钥基础设施(PKI)中的一个核心概念,它代表了一种验证和信任传递的机制。信任链确保了数字证书的可信度,允许用户确定一个实体(如网站、个人或组织)的身份是否真实,以及它是否有权执行特定的安全操作。

信任锚点:

信任链始于一个信任锚点,通常是根CA证书。这个证书被认为是可信的,因为它被预先安装在用户的设备或软件中,或者由操作系统或应用程序明确信任。

信任链断裂:

如果证书链中的任何环节出现问题,如证书未被正确签名、证书已过期或证书被吊销,信任链就会断裂,客户端将不信任该证书。

2、证书链

证书链是一系列数字证书的集合,它们彼此相连,形成一个信任路径,从某个特定的证书(通常是终端实体证书)一直追溯到一个根证书。起点:证书链的起点通常是终端实体证书,即直接颁发给个人、组织或服务器的证书。

(1)中间证书:

如果终端实体证书不是由根CA直接签发的,那么证书链中会包含一个或多个中间CA证书。这些中间证书由更高级别的CA签发。

(2)根证书:

证书链的终点是根CA证书,这是一个自签名的证书,作为信任锚点。

(3)信任模型:

证书链基于信任模型,即如果客户端信任根CA证书,那么它也会信任由该根CA或其下属CA签发的所有证书。

(4)验证过程:

在验证证书链时,客户端会逐个验证每个证书的签名,确保每个证书都是由前一个证书有效签发的。

(5)证书吊销检查:

在验证证书链的过程中,客户端可能还会检查证书是否被吊销,通过CRL或OCSP等机制。

(6)证书属性:

证书链中的每个证书都有自己的属性,如有效期、证书持有者信息、签发者信息等。客户端会检查这些属性以确保证书链的有效性。

(7)证书路径长度:

证书链的长度可能会受到某些客户端或应用程序的限制。例如,某些系统可能只允许最多有两到三个证书的链。

(8)交叉认证证书:

在某些情况下,证书链中可能包含交叉认证证书,即由不同CA签发的证书,这些CA之间相互认可对方的证书。

(9)信任决策:

客户端根据证书链中的证书和内置的受信任根证书列表来做出信任决策.

3、CA、根CA证书、中间CA证书

(1)CA:

是颁发证书的机构。

(2)根CA证书:

根CA证书是证书层次结构的顶层证书,它由CA机构自签名。这意味着根CA证书的签发者和主体是同一个实体。
根CA证书是信任锚点,用户或系统的受信任证书存储区中包含根CA证书,表示对该CA的信任。

(3)中间CA证书

中间CA证书是由根CA证书签发的证书,用于进一步扩展证书层次结构。
中间CA证书可以签发更多的中间CA证书或终端实体证书(如服务器证书或客户端证书)。类似于子子孙孙无穷尽也,后面会解释为什么要这样,这样的优点在哪里。

(4)在证书中理解信任链

通过使用中间CA证书,可以形成一个信任链,从终端实体证书开始,通过中间CA证书逐级向上追溯到根CA证书。
信任链确保了终端实体证书的信任可以追溯到一个受信任的根CA。

(5)使用类似派生的方法形成一级一级的证书的优势
    1、区分根证书和中间证书的一个主要原因是为了管理方便。根CA证书的私钥需要非常严格的保护,因为如果根CA私钥泄露,整个信任体系会受到威胁。
    2、使用中间CA可以分担根CA的证书签发工作,减少对根CA私钥的使用频率,从而降低风险
    3、中间CA可以针对特定的用途或地区进行配置,提供更灵活的证书管理策略。
    4、如果一个中间CA的私钥泄露或证书被滥用,影响范围限于该中间CA签发的证书,而不会影响到整个信任体系。
    5、中间CA可以更灵活地管理证书的撤销,例如,中间CA可以维护自己的CRL或OCSP响应,而不必由根CA来处理。
    6、不同的中间CA可能遵循不同的法律和政策,这使得它们能够更好地适应不同国家或地区的合规要求。
    7、某些情况下,中间CA的使用可以解决技术限制,例如,某些系统或应用程序可能对证书链的长度有限制。

4、数字签名

数字签名是数字证书中一种加密机制,用于验证证书的真实性和完整性,并确保证书在传输过程中未被篡改。以下是数字签名在证书中的几个关键点:

1、签发机构(CA)的私钥:

数字签名是由证书的签发机构(CA)使用其私钥创建的。

2、证书内容的哈希值:

首先,证书的内容(如公钥、证书持有者信息、有效期、签发者信息等)会被转换成一个哈希值。这个哈希值是对证书内容的摘要,任何对证书内容的微小改变都会导致哈希值发生显著变化。

3、加密哈希值:

CA使用其私钥对证书内容的哈希值进行加密,生成数字签名。

4、附加到证书:

生成的数字签名会被附加到证书中,通常位于证书的尾部。

5、验证过程:

当需要验证证书的有效性时,接收方会使用CA的公钥来解密数字签名,得到原始的哈希值。同时,接收方也会对证书内容重新计算哈希值。如果两个哈希值相同,说明证书未被篡改,且数字签名验证成功。

6、信任链:

数字签名还确保了信任链的建立。如果证书链中的每个证书都由上一级的CA正确签名,那么整个证书链都是可信的。

5、数字证书

数字证书就是我们上面握手过程中介绍到的服务器发送给客户端的证书实体。
数字证书是一种电子文档,用于在互联网或其他网络通信中验证个人、组织或服务器的身份。它通过使用公钥基础设施(Public Key Infrastructure, PKI)来实现安全的身份验证和数据加密。以下是数字证书的一些关键特点:

1、身份验证:

数字证书用于验证证书持有者的身份,确保网络上的通信双方是他们所声称的实体。

2、公钥和私钥:

数字证书包含了证书持有者的公钥,而私钥则由持有者保密。公钥可以安全地分发给任何人,用于加密数据,而只有对应的私钥才能解密。

3、证书内容:

证书包含了证书持有者的基本信息(如姓名、组织、地理位置等)、公钥、有效期、序列号、签发者信息以及数字签名等。

4、数字签名:

CA使用其私钥对证书内容进行数字签名,以确保证书的真实性和完整性。

5、信任链:

数字证书的验证通常涉及一个信任链,即从证书持有者的证书开始,通过一系列中间CA证书,最终追溯到一个根CA证书。

6、证书吊销:

CA维护一个证书吊销列表(Certificate Revocation List, CRL)或使用在线证书状态协议(Online Certificate Status Protocol, OCSP),以跟踪和吊销不再有效或被泄露的证书。

7、证书类型:

有多种类型的数字证书,包括服务器证书(用于HTTPS网站)、客户端证书(用于用户身份验证)、电子邮件证书(用于安全电子邮件)等。

8、用途:

数字证书广泛应用于SSL/TLS安全通信、电子邮件加密、代码签名、安全访问控制等多种场景。

9、有效期:

数字证书有明确的有效期,有效期结束后需要更新或重新签发。

大家看完这一篇文章如果已经对https有80%理解的宝子,强烈建议大家看我下一篇文章《https握手过程详解》。为什么呢?因为在握手过程,为了大家第一次理解,我对握手过程进行了省略,实际上有的操作并不是在一步内完成的。《https握手过程详解》进一步讲解了https握手的全过程,让大家更进一步理解https全过程,这样在写代码或者进行输出的时候就不会有问题啦,冲冲冲。(如果还没有《https握手过程详解》就证明我还没有写完f发布惹)
在这里插入图片描述
点个赞赞么么哒~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 单线程为何还能处理速度那么快?

Redis 单线程为何还能处理速度那么快? 💖The Begin💖点点关注,收藏不迷路💖 Redis,作为一款单进程单线程的内存型数据库,其卓越的处理速度令人印象深刻。那么,它是如何实现这一点的呢…

用Python实现9大回归算法详解——05. 梯度提升回归(Gradient Boosting Regression)

1. 梯度提升回归的基本概念 1.1 什么是梯度提升? 梯度提升是一种集成学习方法,通过组合多个弱学习器来构建一个强大的预测模型。在梯度提升框架中,每个弱学习器都试图修正前一个模型的错误。与简单的加法模型不同,梯度提升通过逐…

基于YOLOv8的缺陷检测任务模型训练

文章目录 一、引言二、环境说明三、缺陷检测任务模型训练详解3.1 PCB数据集3.1.1 数据集简介3.1.2 数据集下载3.1.3 构建yolo格式的数据集 3.2 基于ultralytics训练YOLOv83.2.1 安装依赖包3.2.2 ultralytics的训练规范说明3.2.3 创建训练配置文件3.2.4 下载预训练模型3.2.5 训练…

Android逆向题解攻防世界-easy-apk

Jeb反编译apk 题目比较简单,就是一个改了码表的base64编码。 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(0x7F04001B); // layout:activity_main((Button)this.findViewById(0x7F0B0076)).set…

在已经装过Tomcat机子运行war包

1 检查防火墙,验证是否装有jdk,是否配置有JAVA_HOME: ls /usr/apache-tomcat-9.0.52/webapps/ROOT rm -rf /usr/apache-tomcat-9.0.52/webapps/ROOT* ls /usr/apache-tomcat-9.0.52/webapps/ROOT cd /usr/apache-tomcat-9.0.52/webapps/ROOT ls 把war包拉到ROOT…

Python | Leetcode Python题解之第342题整数拆分

题目&#xff1a; 题解&#xff1a; class Solution:def integerBreak(self, n: int) -> int:if n < 3:return n - 1quotient, remainder n // 3, n % 3if remainder 0:return 3 ** quotientelif remainder 1:return 3 ** (quotient - 1) * 4else:return 3 ** quotie…

革新测试管理:集远程、协同、自动化于一身的统一测试管理平台

一、研发背景 当下汽车电子测试领域随着不断发展&#xff0c;自动化、智能化的软硬件一体测试解决方案已经成为趋势。能够整合各种测试资源、自动化测试流程&#xff0c;并提供数据分析和可视化报告&#xff0c;从而提高测试效率、降低成本&#xff0c;并确保汽车电子系统的可…

金价多次尝试刷新最高纪录,美国零售销售数据是绊马索

金价一直在试探新高&#xff0c;该纪录为每盎司2,485美元。而且&#xff0c;强劲的美国零售销售报告正在阻止金价的上涨。 由于强大的阻力&#xff0c;金价无法继续上涨。一周的净空头头寸大增。 发布了强于预期的美国零售销售报告后&#xff0c;金价承受了压力。期望的50个基…

springboot schedule配置多任务并行,任务本身串行

场景&#xff1a; 每日凌晨要执行两个定时任务&#xff0c;分别属于两个业务。有一个业务的定时任务执行时间较长&#xff0c;该任务没执行完之前不能重复执行&#xff08;事务&#xff09;。即业务与业务之间并行&#xff0c;任务本身串行。 技术栈&#xff1a; 采用spring…

机器学习 第11章-特征选择与稀疏学习

机器学习 第11章-特征选择与稀疏学习 11.1 子集搜索与评价 我们将属性称为“特征”(feature)&#xff0c;对当前学习任务有用的属性称为“相关特征”(relevant feature)、没什么用的属性称为“无关特征”(irrelevant feature)。从给定的特征集合中选择出相关特征子集的过程&a…

STL—list—模拟实现【迭代器的实现(重要)】【基本接口的实现】

STL—list—模拟实现 1.list源代码 要想模拟实现list&#xff0c;还是要看一下STL库中的源代码。 _list_node里面装着指向上一个节点的指针prev&#xff0c;和指向下一个节点的指针next&#xff0c;还有数据data 并且它给的是void*&#xff0c;导致后面进行节点指针的返回时…

【大模型部署及其应用 】使用 Llama 3 开源和 Elastic 构建 RAG

使用 Llama 3 开源和 Elastic 构建 RAG 本博客将介绍使用两种方法实现 RAG。 Elastic、Llamaindex、Llama 3(8B)版本使用 Ollama 在本地运行。 Elastic、Langchain、ELSER v2、Llama 3(8B)版本使用 Ollama 在本地运行。 笔记本可从此GitHub位置获取。 在开始之前,让我…

objdump常用命令

语法: objdump <option(s)> <file(s)>用法: 1.打印出与文件头相关的所有信息: 2.打印二进制文件 khushi 中可执行部分的汇编代码内容: objdump -d bomb 3.打印文件的符号表: objdump -t bomb 4.打印文件的动态符号表: objdump -T bomb 5.显示…

watch 和 watchEffect 的隐藏点 --- 非常细致

之前有一篇文章讲述了 watch 和 watchEffect 的使用&#xff0c;但在实际使用中&#xff0c;仍然存在一些“隐藏点”&#xff0c;可能会影响开发&#xff0c;在这补充一下。 1. watch 的隐藏点 1.1 性能陷阱&#xff1a;深度监听的影响 当在 watch 中使用 deep: true 来监听…

多模态大模型中的幻觉问题及其解决方案

人工智能咨询培训老师叶梓 转载标明出处 多模态大模型在实际应用中面临着一个普遍的挑战——幻觉问题&#xff08;hallucination&#xff09;&#xff0c;主要表现为模型在接收到用户提供的图像和提示时&#xff0c;可能会产生与图像内容不符的描述&#xff0c;例如错误地识别颜…

Windows下pip install mysqlclient安装失败

有时候安装mysqlclient插件报如下错误 提示先安装mysqlclient的依赖wheel文件 下载链接(必须对应版本&#xff0c;python3.6版本对1.4.4版本) 如下选择历史版本 mysqlclient官网 https://pypi.org/project/mysqlclient/python3.6对应版本 https://pypi.org/project/mysqlcl…

网络安全实训第一天(dami靶场搭建,XSS、CSRF、模板、任意文件删除添加、框架、密码爆破漏洞)

1.环境准备&#xff1a;搭建漏洞测试的基础环境 安装完phpstudy之后&#xff0c;开启MySQL和Nginx&#xff0c;将dami文件夹复制到网站的根目录下&#xff0c;最后访问安装phptudy机器的IP地址 第一次登录删除dami根目录下install.lck文件 如果检测环境不正确可以下载php5.3.2…

ubuntu20 lightdm无法自动登录进入桌面

现象&#xff1a;在rk3568的板子上自己做了一个Ubuntu 20.04的桌面系统。配置lightdm自动登录桌面&#xff0c;配置方法如下&#xff1a; $ vim /etc/lightdm/lightdm.conf [Seat:*] user-sessionxubuntu autologin-userusername #修改成自动登录的用户名 greeter-show-m…

如何做萤石开放平台的物联网卡定向?

除了用萤石自带的4G卡外&#xff0c;我们也可以自己去电信、移动和联通办物联网卡连接萤石云平台。 1、说在前面 注意&#xff1a;以下流程必须全部走完&#xff0c;卡放在设备上才能连接到萤石云平台。 2、大致流程 登录官网→下载协议→盖章&#xff08;包括骑缝章&#…

Hyperf 安装,使用,

安装&#xff0c; 一般开发都是windows,所以用虚拟机或docker 使用 启动 php bin/hyperf.php start如果出现端口被占用&#xff0c;下面的处理方法 查看9501端口那个进程在占用 netstat -anp|grep 95012. kill掉 kill 18然后再启动即可 热更新 Watcher 组件除了解决上述…