HTTPS详解:加密机制、工作流程、CA证书与中间人攻击防护

文章目录

  • 1. 前言
    • 1.1. 什么是HTTPS
    • 1.2. 什么是加密
    • 1.3. 常见的加密方式
      • ① 对称加密
      • ② 非对称加密
    • 1.4. 数据摘要(数据指纹)
      • ① 实例:软件分发中的数据摘要
    • 1.5.1 一个小问题
  • 2. HTTPS 工作流程探究
    • 2.1. 方案1 - 只使用对称加密
    • 2.2. 方案2 - 只使用非对称加密
    • 2.3. 方案3 - 双方都使用非对称加密
    • 2.4. 方案4 - 非对称加密 + 对称加密
  • 3. 中间人攻击
  • 4. 证书引入
    • 4.1. CA认证
    • 4.2. 数据签名 与 数据验证
    • 4.3. 方案5 - 非对称加密 + 对称加密 + 证书认证
  • 5. 部分问题
  • 6. 总结
    • 6.1. HTTPS 总体流程
    • 6.2. HTTPS 涉及的三组密钥


1. 前言

1.1. 什么是HTTPS

同HTTP协议,HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层

HTTP 协议内容都是按照文本的方式明文传输的,就导致在传输过程中可能会出现被篡改的情况;

1.2. 什么是加密

  • 加密 就是把 明文(要传输的信息)进行一系列变换,生成 密文

  • 解密 就是把 密文 再进行一系列变换, 还原出 明文;

    在这个加密和解密的过程中, 通常需要一个/多个 中间数据,辅助进行该过程,这个数据被称为 密钥

在这里插入图片描述


由于 HTTP 的内容是明文传输的,明文数据会经过多个物理节点,包括:

  • 路由器、Wi-Fi 热点、通信服务运营商、代理服务器

在传输过程中,如果信息被劫持,传输的内容就会完全暴露。劫持者不仅可以窃取这些信息,还可能篡改传输的内容,而双方在不知情的情况下仍然继续交流。这种情况被称为 中间人攻击

因此,我们需要对信息进行加密,以保护数据的安全性和完整性。

比如多数人都遇到过的情况:

当 我 想在浏览器下载一个软件A时,但是获取下载链接的请求被窃取了,中间人就篡改了服务器的响应内容,从而变成了,下载软件A结果却下载了软件B(运营商想让用户从软件B下载)

在这里插入图片描述

如果上述这种情况发生到了实际情况,其危险性是很大的。


1.3. 常见的加密方式

以下是经过格式化的关于对称加密的文本:


① 对称加密

  • 定义

    • 对称加密是一种采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密。这种加密方法也称为单密钥加密,其特征是加密和解密所用的密钥是相同的。
  • 常见对称加密算法(了解)

    • DES、3DES、AES、TDEA、Blowfish、RC2
  • 特点

    • 算法公开、计算量小、加密速度快、加密效率高

对称加密其实就是通过同一个 “密钥” 将明文加密成密文,并且也能将密文解密回明文。

下面举一个简单的加密算法的例子:

对于明文 HELLO,密钥为 3,加密的过程为把每一位向后移3位,则:

HELLO ——> KHOOR

解密的过程同理,反过来向左移动即可;


② 非对称加密

  • 定义

    • 非对称加密需要两个密钥:公开密钥(Public Key,简称公钥)和 私有密钥(Private Key,简称私钥)。
    • 公钥和私钥是成对存在的。
  • 常见非对称加密算法(了解)

    • RSA、DSA、 ECDSA
  • 特点

    • 算法强度复杂,安全性依赖于算法与密钥。
    • 由于算法复杂,加密和解密的速度通常比对称加密要慢得多。
  • 加密与解密过程

    1. 通过公钥对明文加密,得到密文。
    2. 通过私钥对密文解密,得到明文。
  • 或者反向使用:

    1. 通过私钥对明文加密,得到密文。
    2. 通过公钥对密文解密,得到明文。

非对称加密的实现逻辑一般较为复杂,涉及数学思想,这里了解其是怎样工作的:

小明想给朋友小红发送一封私密邮件。

  1. 生成密钥对:小红首先生成一对密钥——一个公钥和一个私钥。公钥可以分享给任何人,而私钥则要保密。

  2. 发送公钥:小红把公钥发送给小明。小明可以将这个公钥视作一个锁。

  3. 加密邮件:小明写好邮件后,用小红的公钥(锁)对邮件内容进行加密。只有拥有相应私钥的人才能打开这个锁。

  4. 发送邮件:小明把加密后的邮件发送给小红。

  5. 解密邮件:小红收到邮件后,用自己的私钥(钥匙)解锁邮件,读取内容。

即使其他人截获了加密的邮件,因为没有小红的私钥,他们也无法解读邮件内容。


1.4. 数据摘要(数据指纹)

数字指纹,也称为数据摘要,其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可用其判断数据是否被篡改。

  • 常见的摘要算法
    • MD5SHA1SHA256SHA512

这些算法将无限的输入映射到有限的输出,因此可能会发生碰撞(即两个不同的信息可能产生相同的摘要,尽管这种情况的概率非常低)。

  • 摘要特征
  • 与加密算法的区别在于,摘要严格意义上不是加密,因为没有解密的过程。
  • 从摘要反推原始信息非常困难,通常用于数据对比。

下面举一个数据摘要的使用场景实例:

① 实例:软件分发中的数据摘要

场景描述:
在软件分发过程中,开发者通常需要确保用户下载的软件包没有被篡改或损坏。为了确保软件包的完整性和安全性,开发者会生成该软件包的摘要(哈希值),并将其与软件包一起提供给用户。

数据摘要的过程

  1. 生成软件包

    • 开发者打包软件并生成一个安装文件,例如 example_1.0.zip
  2. 计算哈希值

    • 使用哈希算法(如 SHA-256)计算软件包的摘要:

      sha256sum example_1.0.zip > example_1.0.zip.sha256
      
    • 这将生成一个文件 example_1.0.zip.sha256,其中包含软件包的 SHA-256 摘要,例如:

      3f4d3c1a8ebdbe9ee30e4b4be2b840df0ed5c91c75c6b8792bc4c36e76fdd16a  example_1.0.zip
      
  3. 发布软件和摘要

    • example_1.0.zipexample_1.0.zip.sha256 一同发布到网站上。
  4. 用户下载软件

    • 用户从网站上下载 example_1.0.zipexample_1.0.zip.sha256
  5. 验证下载的完整性

    • 用户下载后,使用相同的哈希算法计算自己下载的 example_1.0.zip 文件的 SHA-256 摘要,并与 example_1.0.zip.sha256 文件中的摘要进行比较:
      sha256sum -c example_1.0.zip.sha256
      
  6. 检查结果

    • 如果计算的哈希值与存储在 example_1.0.zip.sha256 文件中的值匹配,则说明下载的文件没有被篡改,用户可以安全地安装软件。

作用

根据这个例子,我们可以分析出数据摘要的作用:

  • 数据完整性:确保用户下载的软件文件没有被损坏或篡改。任何修改都会导致摘要不匹配,用户能够及时发现问题。

  • 安全性:在分发软件时,通过提供摘要可以防止恶意软件的插入。如果攻击者试图修改软件包,哈希值的变化将使用户注意到潜在的安全风险。

  • 用户信任:通过提供数据摘要,开发者可以增强用户对软件的信任,因为用户可以验证所下载的软件确实是官方发布的版本。

总结

在软件分发过程中使用数据摘要是一种有效的方式来保证数据的完整性和安全性。通过计算和验证哈希值,用户可以放心地下载和使用软件,降低了受到恶意篡改的风险。


1.5.1 一个小问题

根据上面对加密的了解,不妨思考下面的问题:

  1. 对 http 进行对称加密, 是否能解决数据通信安全的问题? 问题是什么?

对 HTTP 进行对称加密可以提高数据的保密性和完整性,但仅靠对称加密无法解决所有的数据通信安全问题,比如:密钥管理、没有内置的认证机制、不支持非否认性、易受重放攻击;

所以为了安全性,依然需要依靠https,其结合了对称加密、非对称加密和认证机制,最大限度的确保了网络安全。


2. HTTPS 工作流程探究

根据上面的内容,我们知道在网络传输的过程中,要依靠加密将明文转为密文,加密方式具体采用什么?


2.1. 方案1 - 只使用对称加密

我们知道,如果通信双方都各自持有同一个密钥 X, 且没有第三方知道密钥内容, 通信双方的通信安全是可以保证的(除非密钥被破解)

但对于一个服务器来说,一般会同时服务很多客户端,且每个客户端的密钥不能相同(更加安全),此时服务器就需要维护更多的关联信息;(费时费力!)

在这里插入图片描述

此时如果在客户端和服务器建立连接时,双方就协商确定密钥内容呢?显然为了安全考虑,就需要对密钥的传输再次进行加密,这就成为了一个不可解问题;


2.2. 方案2 - 只使用非对称加密

只是用非对称加密的加密过程如下图:

如果服务器先把公钥以明文方式传给客户端,之后客户端向服务器传数据前,都先用这个公钥加密好再传。由于必须有私钥才能解密这个数据,且只有服务器有私钥,这条路基本可以保证安全(客户端->到服务器),(其实依旧存在安全问题, 后文讲到)

在这里插入图片描述

但根据上图,很明显可以看出,服务器到客户端的路线无法保证安全;

当服务器私钥加密数据传给客户端,这个数据不但能被客户端解密,同时中间人也可以解密并篡改该。(公钥是公开的)


2.3. 方案3 - 双方都使用非对称加密

  1. 服务端拥有公钥 S 与对应的私钥 S’, 客户端拥有公钥 C 与对应的私钥 C’
  2. 客户和服务端交换公钥
  3. 客户端给服务端发信息
    • 先用 S 对数据加密, 再发送, 只能由服务器解密, 因为只有服务器有私钥 S’
  4. 服务端给客户端发信息
    • 先用 C 对数据加密, 再发送, 只能由客户端解密, 因为只有客户端有私钥 C’

在这里插入图片描述

但这种方法依然有安全风险,与方案二(客户端->服务器)一样,在方案五中会介绍


2.4. 方案4 - 非对称加密 + 对称加密

  1. 服务器采用非对称加密,客户端采用对称加密;
  2. 通信前,服务器先将公钥S发送给客户端,客户端再利用S将自己的密钥C进行加密
  3. 服务器通过私钥S’将密文解密,获取密钥C,此时除了通信双方,没有人知道密钥的内容
  4. 随后可以进行正常通信,且对称加密效率高,速度快
    在这里插入图片描述

这个方案看似安全了,但存在与方案2、方案3 同样的问题


3. 中间人攻击

Man-in-the-MiddleAttack, 简称“MITM 攻击”

  1. 首先我们尝试对方案四的方法进行攻击,我们选择在通信时获取公钥阶段就进行攻击
  2. 中间人获取了服务器发送的公钥S,并给客户端返回自己的公钥M
  3. 此时客户端加密 密钥C,中间人截取密文,由于客户端使用的是公钥M进行加密,中间人可以通过自己的私钥M‘进行解密,此时就获取了密钥C
  4. 随后中间人将正常通信时的密文发送给服务器,通信双方此时都认为通信安全,但实际上密钥C已经泄露了
  5. 中间人就可以对整个通信过程进行监听、泄露、篡改;

在这里插入图片描述

很显然,这种方法对上述的方案二三均适用、即在最开始交换公钥的时候就进行篡改;

造成这种问题的原因是什么?本质上因为客户端无法确定收到的含有公钥的数据报文, 属于目标服务器;

此时就需要依靠证书。


4. 证书引入

4.1. CA认证

为什么依靠证书(与数字签名)就可以解决之前的问题,首先看定义:

服务端在使用 HTTPS 前, 需要向 CA 机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。 服务器把证书传输给客户端,客户端再从证书里获取公钥,证书用于证明服务端公钥的权威性;

在这里插入图片描述

可以把证书理解为结构化的串,包含了一些必要信息:

  • 证书发布机构、证书有效期、公钥、证书所有者、签名

4.2. 数据签名 与 数据验证

上图展示了 证书的使用过程,具体的加密需要用上数据签名:

在这里插入图片描述

通过上图,可以看出来,数字签名的过程即:

  • 先将数据通过散列函数转为散列值
  • 再通过签名者(CA机构)的私钥将散列值进行加密
  • 将加密后的散列值与认证加到数据上,形成最终数据

当对方接收到数据后,最重要的点就是判断这个数据是否是目标服务器发来的数据,即需要进行验证:

在这里插入图片描述

通过上图,验证的过程即:

  • 将获取的数据拆成两份,数据以及加密的签名
  • 分别通过散列函数与解密,获取两份散列值
  • 如果两份散列值相同,则接收到的数字签名有效,也即数据是安全的

总结上面数据签名 与 验证的过程,作为签名者的CA机构形成数字签名的过程有:

  1. CA 机构拥有非对称加密的私钥 A 和公钥 A’
  2. CA 机构对服务端申请的证书明文数据进行 hash(散列函数), 形成数据摘要(散列值)
  3. 对数据摘要用 CA 私钥 A’加密, 得到数字签名 S

服务端申请的证书明文和数字签名 S 共同组成了数字证书, 这样一份数字证书才可以发送给给服务端;


4.3. 方案5 - 非对称加密 + 对称加密 + 证书认证

通过上面的内容,最后总结出一个安全的方案:

在这里插入图片描述

上图的过程也是我们分析证书认证以及签名与验证的过程;

对于客户端,当客户端获取到证书后, 会对证书进行校验(防止证书是伪造的):

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)
  • 验证证书是否被篡改(数据验证的过程)

中间人能不能将整个证书掉包?

不可以:只有被信任的 CA(证书颁发机构) 能够颁发有效的证书,有效的私钥是必要的,伪造的私钥形成的证书通不过验证,即以下三点:

  1. 信任链:只有被信任的 CA 能够颁发有效的证书。客户端会验证证书的签名,以确保它来自一个可信的 CA。

  2. 私钥的必要性:有效的证书依赖于 CA 的私钥进行签名。中间人无法获取 CA 的私钥,无法生成有效的伪造证书。

  3. 验证过程:当客户端接收到证书时,它会使用 CA 的公钥来验证签名。如果中间人尝试掉包证书,签名将不匹配,客户端会拒绝该证书。


5. 部分问题

  1. 为什么签名不直接加密, 而是要先 hash 形成摘要?

缩短签名密文的⻓度,加快数字签名验证时的运算速度。

  1. 中间人是怎么操作的?
  • ARP 欺骗
    在局域网中,黑客通过收到 ARP Request 广播包,能够偷听到其他节点的 (IP, MAC) 地址。例如,黑客收到两个主机 A 和 B 的地址,并告诉 B(受害者)自己是 A,使得 B 发送给 A 的数据包都被黑客截取。

  • ICMP 攻击
    由于 ICMP 协议中有重定向的报文类型,我们可以伪造一个 ICMP 信息,然后发送给局域网中的客户端,伪装成一个更好的路由通路。这样,目标所有的上网流量都会发送到我们指定的接口上,达到与 ARP 欺骗相同的效果。

  • 假 Wi-Fi & 假网站等


6. 总结

6.1. HTTPS 总体流程

通过上面的所有分析,最后可以总结出HTTPS的总体工作流程:
在这里插入图片描述


6.2. HTTPS 涉及的三组密钥

  1. 第一组(非对称加密)

用于校验证书是否被篡改:

  • 公钥:由服务器生成,并公开给所有用户。用户在建立 HTTPS 连接时,使用这个公钥来加密数据
  • 私钥:服务器私有,保存在服务器上。只有服务器能够解密用其公钥加密的数据。
  1. 第二组(非对称加密)

用于协商生成 “对称加密的密钥”,客户端用收到的公钥 给 “随机生成的对称加密的密钥” 加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.

  1. 第三组(对称加密)

该对称密钥 负责 客户端和服务器后续数据的传输

第一组是连接层面的,用于校验证书安全,为了让客户端拿到第⼆组非对称加密的公钥
第二组是面向密钥的(加密对称加密的密钥),为了让客户端把这个对称密钥传给服务器
第三组是最后双端通信时使用的密钥

通过这些流程,既可以保证通信安全,也可以保证效率;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习基础04

目录 1.朴素贝叶斯-分类 1.1贝叶斯分类理论 1.2条件概率 1.3全概率公式 1.4贝叶斯推断 1.5朴素贝叶斯推断 1.6拉普拉斯平滑系数 1.7API 2.决策树-分类 2.1决策树 2.2基于信息增益的决策树建立 2.2.1信息熵 2.2.2信息增益 2.2.3信息增益决策树建立步骤 2.3基于基…

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN(基础概念) 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

ospf排错学习

排错步骤是 1、查看ospf的router-id是否相同 2、错误配置ospf发布路由 //典型错误 3、错误的ospf区域号 4、错误的被动接口设置 //接口设置为被动接口,不学习了 排错思路(思科命令&#xff09…

AR眼镜方案_AR智能眼镜阵列/衍射光波导显示方案

在当今AR智能眼镜的发展中,显示和光学组件成为了技术攻坚的主要领域。由于这些组件的高制造难度和成本,其光学显示模块在整个设备的成本中约占40%。 采用光波导技术的AR眼镜显示方案,核心结构通常由光机、波导和耦合器组成。光机内的微型显示…

【Linux】多线程(中)

目录 一、线程互斥 1.1 互斥概念 1.2 互斥量mutex 1.3 互斥量相关API (1)初始化互斥量 (2)销毁互斥量 (3)互斥量加锁和解锁 1.4 互斥量原理 1.5 重入和线程安全 二、死锁 2.1 概念 2.2 造成死锁…

【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词

水果成篮 水果成篮 题目描述 因为只有两个篮子,每个篮子装的水果种类相同,如果从 0 开始摘,则只能摘 0 和 1 两个种类 ; 因为当我们在两个果篮都装有水果的情况下,如果再走到下一颗果树,果树的水果种类…

Ubuntu 的 ROS 操作系统 turtlebot3 gazebo仿真

引言 TurtleBot3 Gazebo仿真环境是一个非常强大的工具,能够帮助开发者在虚拟环境中测试和验证机器人算法。 Gazebo是一个开源的3D机器人仿真平台,它能支持物理引擎,允许机器人在虚拟环境中模拟和测试。结合ROS,它能提供一个完整的…

供应链管理、一件代发系统功能及源码分享 PHP+Mysql

随着电商行业的不断发展,传统的库存管理模式已经逐渐无法满足市场需求。越来越多的企业选择“一件代发”模式,即商家不需要自己储备商品库存,而是将订单直接转给供应商,由供应商直接进行发货。这种方式极大地降低了企业的运营成本…

5G CPE:为什么活动会场与商铺的网络成为最新选择

在快节奏的现代社会中,无论是举办一场盛大的活动还是经营一家繁忙的商铺,稳定的网络连接都是不可或缺的基石。然而,面对复杂的布线难题或高昂的商业宽带费用,许多场所往往陷入两难境地。幸运的是,5G CPE(Cu…

python怎么安装numpy

1、在python官网https://pypi.python.org/pypi/numpy中找到安装的python版本对应的numpy版本。 例如: python版本是: 下载的对应numpy版本是: 2、将numpy下载到python的安装目录下的scripts文件夹中; 3、然后在cmd中执行以下命…

Qt主线程把数据发给子线程,主线程会阻塞吗

演示&#xff1a; #include <QCoreApplication> #include <QThread> #include <QObject> #include <QDebug>// 子线程类 class Worker : public QObject {Q_OBJECT public slots:void processData(int data) {qDebug() << "Processing dat…

OSG开发笔记(三十一):OSG中LOD层次细节模型介绍和使用

​若该文为原创文章&#xff0c;未经允许不得转载 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/143697554 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 长沙红胖子Qt…

在Linux上部署(MySQL Redis Elasticsearch等)各类软件

实战章节&#xff1a;在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c…

thinkphp6 --数据库操作 增删改查

一、数据库连接配置 如果是本地测试&#xff0c;它会优先读取 .env 配置&#xff0c;然后再读取 database.php 的配置&#xff1b; 如果禁用了 .env 配置&#xff0c;则会读取数据库连接的默认配置&#xff1a; # .env文件&#xff0c;部署服务器&#xff0c;请禁用我 我们可以…

探索 HTML 和 CSS 实现的 3D旋转相册

效果演示 这段HTML与CSS代码创建了一个包含10张卡片的3D旋转效果&#xff0c;每张卡片都有自己的边框颜色和图片。通过CSS的3D变换和动画&#xff0c;实现了一个动态的旋转展示效果 HTML <div class"wrapper"><div class"inner" style"-…

什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性

什么是 OpenGL ES OpenGL ES 是一种为嵌入式系统和移动设备设计的3D图形API(应用程序编程接口)。它是标准 OpenGL 3D 图形库的一个子集,专门为资源受限的环境(如手机、平板电脑、游戏机和其他便携式设备)进行了优化。 由于其在移动设备上的广泛适用性,OpenGL ES是学习移…

【GPTs】Get Simpsonized:一键变身趣味辛普森角色

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Get Simpsonized主要功能适用场景优点缺点使用方式 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 指令保护和安全规则&…

JS 实现游戏流畅移动与按键立即响应

AWSD 按键移动 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box1 {width: 400px;height: 400px;background: yellowgreen;margin: 0 auto;position: relative;}.box2 {width: 50px;height:…

安全见闻-泷羽sec课程笔记

编程语言 C语言&#xff1a;一种通用的、面向过程的编程语言&#xff0c;广泛应用于系统软件和嵌入式开发。 C:在C语言基础上发展而来&#xff0c;支持面向对象编程&#xff0c;常用于尊戏开发、高性能计算等领域。 Java:一种广泛使用的面问对象编程语言&#xff0c;具有跨平台…

vue跳转传参

path 跳转只能使用 query 传参 ,name 跳转都可以 params &#xff1a;获取来自动态路由的参数 query &#xff1a;获取来自 search 部分的参数