HTTPS安全机制:从加密到证书全解析

目录

1.HTTPS是什么

2.加密是什么

3.HTTPS的加密过程

3.1对称加密

3.2非对称加密

 4.引入证书

 4.1"中间人"攻击

4.2 引入证书机制

4.3 理解数据签名

4.4 非对称加密 + 对称加密 + 证书认证

5.常见问题

5.1 Fiddler等抓包工具,为啥能解析HTTPS的数据?

5.2 中间人有没有可能篡改该证书?

5.3 中间人整个掉包证书呢?

5.4 为什么摘要内容在网络传输的时候一定要加密形成签名? 

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


1.HTTPS是什么

HTTPS是一个应用层协议,是在HTTP协议的基础上引入了一个加密层的安全通信协议,核心是通过SSL/TLS 协议对传输数据进行加密,确保网络通信的保密性、完整性和身份真实性


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

原因:我们通过网络传输的所有数据包都会经由运营商的路由器、交换机等网络设备。这意味着运营商可以解析并篡改我们传输的数据内容。

当用户点击"下载按钮"时,实际上是在向服务器发送HTTP请求。正常情况下,服务器返回的HTTP响应会包含该APP的下载链接。但运营商一旦检测到这是"天天动听"的下载请求,就会自动将响应内容篡改为"QQ浏览器"的下载地址。

为什么运营商会进行流量劫持?归根结底是为了牟取利益。💴💴💴

HTTP明文传输本身就存在安全隐患,不仅运营商可以轻易劫持,黑客也同样能从中作梗。想象一下,如果您的个人隐私、支付密码等敏感信息被截获,后果将多么严重。正是出于这样的安全考虑,我们才需要HTTPS加密协议来保障用户信息安全。

2.加密是什么

  • 明文:要传输的原始数据
  • 密文:对明文进行加密后使他人不能理解
  • 加密:就是把明文(要传输的信息)进行一系列变换,生成密文
  • 解密:就是把密文再进行一系列变换,还原成明文
  • 密钥:在这个加密解密的过程中,往往需要一个或多个中间的数据,辅助进行这个过程,这样的数据称为密钥

加密解密到如今已经发展成一个独立的学科:密码学
而密码学的奠基人,也正是计算机科学的祖师爷之一,艾伦·麦席森·图灵

3.HTTPS的加密过程

为确保数据安全,需采用"加密"技术。在网络传输过程中,不再直接传送明文,而是传输经过加密处理的"密文"。加密方式主要分为两大类:对称加密和非对称加密。

3.1对称加密

对称加密(Symmetric Encryption)是一种加密和解密使用同一密钥的加密技术,也称为 “单密钥加密”。其核心特点是加密与解密过程共享一个密钥,操作高效且广泛应用于各类场景。

通过同一个"密钥",把明文加密成密文,并且也能把密文揭密成明文

核心原理:

  • 加密过程:明文 + 密钥 → 通过加密算法 → 密文
  • 解密过程:密文 + 同一密钥 → 通过解密算法 → 明文
  • 核心要求:加密和解密必须使用完全相同的密钥,否则无法还原明文。

举例一个简单的对称加密,按位异或

假设明文a = 1234,密钥key = 8888;加密a^key得到的密文b就是9834

对密文9834再次进行计算b^key,得到的就是原来的明文1234

如果直接把密钥进行明文传输,那么黑客也就能获取密钥啦,那么我们所进行的加密操作就形同虚设了,因此密钥的传输也必须加密传输,要想对密钥进行对称加密,就仍然需要先协商确定一个"密钥的密钥",可是对称加密又是明文传输,此时就陷入了死循环,

“要加密密钥 → 需新密钥 → 新密钥又要加密 → 需更上层密钥……”

此时我们就需要引入非对称加密

3.2非对称加密

非对称加密(Asymmetric Encryption)是一种加密和解密使用不同密钥的加密技术,也称为 “公钥加密”。其核心创新在于通过一对 “公钥” 和 “私钥” 实现加密与解密,解决了对称加密中密钥传输的安全难题。

公钥不怕泄露,私钥不能泄露

核心原理

  • 密钥对:由 “公钥”(Public Key)和 “私钥”(Private Key)组成,两者通过数学算法关联(如大数分解、离散对数),但从公钥无法推导出私钥。
  • 加密解密过程:明文 + 公钥 → 通过加密算法 → 密文(只有对应的私钥能解密)。
                             密文 + 私钥 → 通过解密算法 → 明文(只有对应的公钥能加密)。

                             明文 + 私钥 → 通过加密算法 → 密文(只有对应的公钥能解密)。
                             密文 + 公钥 → 通过解密算法 → 明文(只有对应的私钥能解密)。

                             公钥加密→私钥解密:保证 “消息只有对方能看懂”(保密通信);
                             私钥加密→公钥解密:保证 “消息确实是对方发的”(身份验证)。
  • 核心特性:公钥可公开传播,私钥必须严格保密;用公钥加密的数据只能用私钥解密,反之亦然(部分算法支持 “私钥加密、公钥解密”,用于签名)。

举例:

A需要向B传递一些重要文件,但B可能不在场。

为此,双方约定如下:

  1. B告诉A:"我桌上有个盒子,我会给你一把锁"
  2. A将文件放入盒子并用这把锁锁好
  3. B随后用对应的钥匙开锁取件

在这个类比中:

  • 锁相当于公钥(可以公开分发)
  • 钥匙相当于私钥(必须由B独自保管) 只有持有私钥的人才能解密获取文件内容。


非对称加密加密传输对称密钥

  • 客户端在本地生成对称密钥,通过公钥进行加密,发送给服务器
  • 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥
  • 服务器通过私钥解密,还原出客户端发送的对称密钥,并且使用这个对称密钥给客户端返回响应数据
  • 后续客户端和服务器的通信都只用对称加密即可,由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义

 4.引入证书

 4.1"中间人"攻击

  • 客户端如何获取到公钥?
  • 客户端如何确定这个公钥不是黑客伪造的?

黑客通过替换公钥,让客户端和服务器误以为在安全交换密钥,实际对称密钥被黑客截获。由于非对称加密的 “公钥公开” 特性,客户端无法验证公钥是否真实(这是单纯非对称加密的漏洞)

4.2 引入证书机制

问题的关键就是能够让客户端识别出,拿到的公钥是不是正确的,合理的而不是伪造的公钥

为确保通信安全,服务端在启用HTTPS前需向CA机构申请数字证书。该证书包含申请者信息和公钥等关键数据。当服务器将证书传输至浏览器时,浏览器可直接从中提取公钥。数字证书的作用类似于身份证,用于验证服务端公钥的真实性和权威性。

当你想搭建服务器时,使用HTTPS就需要在公证机构这里申请证书,申请时就需要提交一些资料,如,网站的域名,营业执照,备案号等
申请成功后,公证机构就生成一个"电子证书",证书内容包含

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名:保证证书合法性的关键要点
  • ...

(证书中的各个字段综合在一起,计算校验和,原始数据相同,计算得到的校验和就相同,校验和不同,说明原始数据就不同)

注:申请证书的时候,需要在特定平台生成,会同时生成一对密钥对,即公钥和私钥.这对密钥对就是用来在网络通信中进行明文加密及数字签名的
其中公钥会随着CSR文件一起发给CA进行权威认证,服务端自己保留私钥,用来后续进行通信(主要用来交换对称密钥)

4.3 理解数据签名

数据签名(通常称为 “数字签名”,Digital Signature)是一种基于密码学的安全技术,用于验证数据的完整性(数据未被篡改)和来源真实性(确认数据发送者身份),同时防止发送者事后抵赖。其核心逻辑基于非对称加密和哈希算法

当服务器申请CA证书的时候,CA机构会对该服务器端进行审核,并专门为该网站形成数字签名,过程如下

  • CA机构拥有非对称加密的私钥pri和公钥pub
  • CA机构对服务端申请的证书明文数据进行hash,形成数据摘要
  • 然后对数据摘要用CA私钥pri加密,得到数字签名S

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

如何让验证证书是正确的?

客户端拿到服务端的CA证书之后,会将数据和数据签名分开。将数据进行哈希散列形成一个哈希值。再将数据签名使用CA机构的公钥进行解密,也得到一个哈希值。将这两个哈希值进行比较,如果相同,则说明证书是正确的。

服务器申请到证书之后,后续客户端从服务器拿公钥就不只是拿公钥而是拿整个证书,此时客户端就可以凭借证书中的数字签名对证书的合法性进行验证

  • 客户端如何验证数字签名?
  1. 客户端把证书中的各个字段再算一遍校验和,得到checksum1
  2. 客户端使用公证机构的公钥,对数字签名进行解密,得到checksum2
  3. 对比checksum1 == checksum2 如果相等则视为当前证书的各个字段就是和服务器这边发出来的证书是一模一样的,此时就可以认为这是合法证书

    如果不相等则意味着证书上的内容被中间的黑客篡改过了,此时浏览器往往就会弹出警告页面,提示用户该网站不安全
  • 当前客户端所拿的公证机构的公钥,客户端是如何确定这个公钥是正确的而不是黑客伪造的?
    操作系统(如 Windows、Linux、macOS)和浏览器(如 Chrome、Firefox)在开发时,会将一些知名且权威的 CA 机构的根证书预先内置到系统或应用程序中。这些根证书包含了 CA 机构的公钥信息。 当客户端收到一个证书时,它会从根证书开始,按照证书链的顺序进行验证。例如,Windows 系统的证书存储区中就包含了众多受信任的 CA 根证书,浏览器在验证证书时会参考这些内置的根证书信息。

  • 黑客可不可以篡改数据后同时更新数字签名,让数字签名解密出来的checksum2和篡改过的checksum1一致呢?
    黑客篡改数据后,若想重新生成数字签名,必须使用公证机构的私钥进行加密——而这个私钥是黑客无法获取的。
    如果黑客试图使用自生成的私钥呢?客户端使用公证机构的公钥将无法解密。
    此时,解密失败会被系统识别为证书异常,从而触发明显的安全警告弹窗。

4.4 非对称加密 + 对称加密 + 证书认证

在客户端和服务器刚一建立连接的时候,服务器给客户端返回一个证书,这个证书包含了刚才的公钥,也包含了网站的身份信息

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

  • 判定证书的有效期是否过期
  • 判断证书的发布机构是否受信任(操作系统已内置的受信任的证书发布机构)
  • 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名进行解密,得到一个hash值(称为数据摘要),设为hash1,然后计算整个证书的hash值,设为hash2,对比hash1和hash2是否相等,如果相等,则说明证书没有被篡改过

5.常见问题

5.1 Fiddler等抓包工具,为啥能解析HTTPS的数据?

要解密数据必须获取对称密钥,而Fiddler就是通过中间人攻击来实现这一点的。当我们开启HTTPS选项时,系统会弹出对话框询问是否信任Fiddler提供的证书,一旦选择信任就允许了中间人攻击拿到了对称密钥

  • 生成自签名根证书,经用户安装后获客户端信任,替换服务器证书;
  • 拦截握手阶段的预主密钥和随机数,算出会话密钥(对称密钥);
  • 用会话密钥解密通信数据,实现解析。

5.2 中间人有没有可能篡改该证书?

  • 中间人篡改了证书的明文
  • 由于他没有CA机构的私钥,所以无法hash之后用私钥加密形成签名,那也就没办法对篡改后的证书形成匹配的签名
  • 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人

5.3 中间人整个掉包证书呢?

  •  因为中间人没有 CA 私钥,因此无法生成与CA签名相同的加密哈希值。所以无法制作假的证书。
  • 所以中间人只能向 CA 申请真证书,然后用自己申请的证书进行掉包。这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端 认证信息,如果整体掉包,客户端依旧能够识别出来。
  • 永远记住:中间人没有 CA 私钥,所以对任何证书都无法进行合法修改,包括自己的。

5.4 为什么摘要内容在网络传输的时候一定要加密形成签名? 

常见的摘要算法有:MD5和SHA系列
以MD5为例,我们不需要研究具体的计算签名的过程,只需要了解MD5的特点:

  • 定长:无论多长的字符串,计算出来的MD5值都是固定长度(16字节版本或者32字节版本)
  • 分散:源字符串只要改变一点点,最终得到的MD5值都会差别很大。
  • 不可逆:通过源字符串生成MD5很容易,但是通过MD5还原成原串理论上是不可能的.

正因为MD5有这样的特性,我们可以认为如果两个字符串的MD5值相同,则认为这两个字符串相同。 


理解判定证书篡改的过程:(这个过程就好比判定这个身份证是不是伪造的身份证)
假设我们的证书只是一个简单的字符串hello,对这个字符串计算hash值(比如md5),结果为
BC4B2A76B9719D91
如果hello中有任意的字符被篡改了,比如变成了hella,那么计算的md5值就会变化很大.
BDBD6F9CF51F2FD8
然后我们可以把这个字符串hello和哈希值BC4B2A76B9719D91从服务器返回给客户端,此时客户端
如何验证hello是否是被篡改过?
那么就只要计算hello的哈希值,看看是不是BC4B2A76B9719D91即可.

但是还有个问题,如果黑客把hello篡改了,同时也把哈希值重新计算下,客户端就分辨不出来了呀.

所以被传输的哈希值不能传输明文,需要传输密文。
所以,对证书明文(这里就是“hello”)hash形成散列摘要,然后CA使用自己的私钥加密形成签名,将hello和加密的签名合起来形成CA证书,颁发给服务端,当客户端请求的时候,就发送给客户端,中间人截获了,因为没有CA私钥,就无法更改或者整体掉包,就能安全的证明,证书的合法性。
最后,客户端通过操作系统里已经存的了的证书发布机构的公钥进行解密,还原出原始的哈希值,再进行校验.

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

 这是因为,可能有的签名是很长的,直接加密会造成不必要的损失。而先 hash 可以缩小签名密文的长度,加快数字签名的验证签名的运算速度。

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

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

相关文章

2024年深度学习技术主要发展分析

摘要:深度学习作为人工智能领域的战略级技术,在2024年持续取得突破性进展,持续重构现代战争规则,成为大国军事智能化竞争的核心角力点。对2024年深度学习技术热门领域的主要发展进行了综合评述。研究了深度学习技术的发展现状&…

Swift 枚举:深入理解与高效使用

Swift 枚举:深入理解与高效使用 引言 Swift 枚举(Enum)是 Swift 编程语言中的一种基本数据类型,它允许我们将一组相关的值组合在一起。枚举在 Swift 中有着广泛的应用,从简单的数据分类到复杂的业务逻辑处理,枚举都能发挥巨大的作用。本文将深入探讨 Swift 枚举的原理、…

从大模型到云游戏,国鑫SY8108G-G4如何化身“全能AI引擎”?

当大模型参数量突破万亿级,传统服务器在散热枷锁与扩展瓶颈前举步维艰。国鑫全新推出的 SY8108G-G4 8U8卡AI服务器 ,以颠覆性架构支持8张600W GPU全速并行,结合CPU-GPU直连、冗余电源和弹性扩展三大优势,为AI训练、生成式创作、数…

在多个DHCP服务器的网络环境中选择指定的DHCP服务

问题 学校有两个网络,我电脑网线插在同一个交换机的同一个接口上,有时候获取的是172.27开头的IP,有时候获取的是192.168开头的IP。 通常第一次开机获取的是172.27的IP,插拔网线或重启网络接口后会变为192.168的IP。 两个网络各有…

【Nginx】实测Nginx增加第三方主动式健康检查模块

一、环境说明系统版本:CentOS 7.9内核版本:3.10.0-1160.119.1Nginx版本:1.26.3第三方检测模块及版本:nginx_upstream_check_module(v0.4.0,兼容nginx 1.20)二、nginx安装部署2.1 下载检测模块目…

pytest中mark的使用

在pytest中,mark(标记)是用于对测试用例进行分类、筛选或附加元数据的重要功能。以下是其核心使用方法: 1. ‌基本标记定义与使用‌ ‌注册标记‌:在pytest.ini中预先定义标记(避免运行时警告)&…

STM32N6--NPU简单介绍

关键词:STM32N6、生物神经元、神经网络处理单元(NPU)、数据流处理 参考链接: RM0486 Reference manual STM32N647/657xx Arm-based 32-bit MCUsST_中文论坛【资料合集】STM32N6超全资料合集(定期更新)B站_…

一款开源免费、通用的 WPF 主题控件包

前言 今天大姚给大家分享一款开源免费(MIT License)、通用的 WPF 主题控件包:Rubyer WPF。 WPF介绍 WPF是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、数据绑定、样式和模板、动…

windows安装python环境以及对应编辑器的详细流程

windows安装python环境以及对应编辑器的详细流程 一、安装 Python 环境 步骤 1:下载 Python 安装包 访问 Python 官网:https://www.python.org/downloads/windows/选择最新稳定版本(如 Python 3.12.x),点击 Download W…

高保真组件库:下拉多选

制作一个高保真的下拉多选需要具备多种交互事件。 拖拽一个文本框并命名为“下拉文本输入框”和一个向下的箭头组合在一起,外观上看起来是下拉组件。为了美观调整一些边框颜色、圆角、文字左边距等。 拖拽一个矩形作为下拉选项的容器,启动阴影xy都为0 制作下拉选项:拖拽一个…

sqli-labs靶场通关笔记:第1-4关 联合注入

第1关:单引号闭合1.这是第1关的界面,让我们以id作为参数输入,方式为数值,这里输入?id1看一下。2.显示了id1的用户名和密码。分析:在sql注入漏洞中,第一步是要寻找注入点,即可以输入参数的地方&…

和服腰封改造:3种解构主义造型的东方美学新解

和服腰封改造:3种解构主义造型的东方美学新解在东京原宿的小巷里,一场关于和服腰封的"温柔革命"正在悄然发生。年轻设计师们将传统宽腰带拆解重构,创造出既保留东方神韵又充满当代气息的造型艺术。正如一位新锐设计师所说&#xff…

什么是强化学习(RL)--3

如果reward大多数情况下都是0,只有少数是很大的值。这种情况下就是稀疏reward的问题。比如你要教机械手臂拴螺丝,只有最后把螺丝栓进去才可以,其余机械手臂的位置都不可以。额外的reward帮agent学习。reward shaping射击游戏cs,这个游戏中&am…

彩虹云商城全解源码系统|人工客服系统

核心升级亮点 人工客服系统:新增智能工单在线IM双模式多端同步:PCH5小程序APP四端数据实时互通支付升级:支持数字人民币收款安全加固:内置Web应用防火墙(WAF) 部署教程 ▶ B站视频教程 包含: 宝塔环境配置&#xf…

川翔云电脑:突破硬件极限,重构设计生产力范式

一、硬核配置:显存与算力的双重革命川翔云电脑提供从 RTX 2080 Ti 到 RTX 4090 Plus 的全系列 GPU 机型,其中旗舰级 4090 Plus 单卡配备48GB 超大显存,较传统 4090 显存翻倍,可流畅加载 1200 万面数的超复杂模型(如《黑…

深入解析 TCP 连接状态与进程挂起、恢复与关闭

文章目录深入解析 TCP 连接状态与进程挂起、恢复与关闭一、TCP 连接的各种状态1. **LISTEN**(监听)2. **SYN_SENT**(SYN 已发送)3. **SYN_RECEIVED**(SYN 已接收)4. **ESTABLISHED**(已建立&…

在mac m1基于llama.cpp运行deepseek

lama.cpp是一个高效的机器学习推理库,目标是在各种硬件上实现LLM推断,保持最小设置和最先进性能。llama.cpp支持1.5位、2位、3位、4位、5位、6位和8位整数量化,通过ARM NEON、Accelerate和Metal支持Apple芯片,使得在MAC M1处理器上…

多模态大语言模型arxiv论文略读(154)

Visual-Oriented Fine-Grained Knowledge Editing for MultiModal Large Language Models ➡️ 论文标题:Visual-Oriented Fine-Grained Knowledge Editing for MultiModal Large Language Models ➡️ 论文作者:Zhen Zeng, Leijiang Gu, Xun Yang, Zhan…

Python PDF处理库深度对比:PyMuPDF、pypdfium2、pdfplumber、pdfminer的关系与区别

Python PDF处理库深度对比:PyMuPDF、pypdfium2、pdfplumber、pdfminer的关系与区别前言1. 库的基本介绍1.1 PyMuPDF (fitz)1.2 pypdfium21.3 pdfplumber1.4 pdfminer2. 关系图谱3. 核心区别对比3.1 性能对比3.2 功能对比4. 代码示例对比4.1 基本文本提取PyMuPDFpypd…

制作 ext4 文件系统

按以下步骤操作可以将一个文件夹制作成 Android 可用的 ext4 格式的 img 文件:方法 1:使用标准 Linux 工具(推荐) 步骤 1:安装必要工具 sudo apt update sudo apt install e2fsprogs android-sdk-libsparse-utils # 适…