[ 网络 ] 应用层协议——HTTPS协议原理
目录
1.HTTPS是什么
2.加密技术
2.1什么是加密
2.2为什么要加密
2.3加密处理防止被窃听
3.常见的加密方式
对称加密
非对称加密
4.数据摘要&&数据指纹
5.数字签名
6.HTTPS的工作过程探究
方案1——只是用对称加密
方案2——只进行非对称加密
方案3——双方都是用非对称加密
方案4——非对称加密+对称加密
方案3方案4的问题所在
中间人攻击——针对上面的场景
7.引入证书
CA认证
理解数据签名
方案5——非对称加密+对称加密+证书认证
查看浏览器的受信任证书发布机构
中间人有没有可能篡改该证书呢?
中间人整个掉包证书?
完整流程
总结
1.HTTPS是什么
HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层。是为了解决HTTP的缺点的。我们再来回顾以下HTTP的缺点:
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭遇篡改
因此HTTPS = HTTP + 加密 + 认证 + 完整性保护
2.加密技术
2.1什么是加密
加密就是把明文(要传输的信息)进行一系列变换,生成密文。相对应的解密就是把密文再进行一系列转换还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间的数据辅助这个过程这样的数据成为密钥。
2.2为什么要加密
因为通信直接使用明文可能会被窃听。由于HTTP本身不具备加密的功能,所以也无法做到对通信整体进行加密。即HTTP使用明文方式发送。
那么为什么通信时不加密会被窃听?
这是因为,按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。因此在通信线路的互联网设备,光缆,计算机都不是个人物品,因此就有可能被窃听和窥视。
2.3加密处理防止被窃听
HTTP协议没有加密机制,但是可以通过和SSL(Secure Socket Layer,安全套阶层)或TLS(Transport Layer Security,安全传输层协议) 的组合使用,加密HTTP的通信内容。因此HTTP和TCP进行通信时,当使用SSL时,先演变成HTTP先和SSL通信,再由SSL和TCP通信了。因此所谓HTTPS,其实就是HTTP协议身披了一层SSL协议。
SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。
3.常见的加密方式
对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方式称为对称加密,也称单密钥加密。特征:加密和解密所用的密钥是想用的
特点:算法公开,计算量小,加密速度快,加密效率高
对称加密其实就是通过同一个"密钥",把明文加密成密文,并且也能把密文解密成明文
非对称加密
需要两个密钥来进行加密和解密,这两个密钥是公开密钥和私有密钥
特点:算法强度复杂,安全性依赖于算法与密钥但是由于其算法复杂,而使用加密解密速度没有对称加密解密的速度快。
非对称加密要用到两个密钥,一个叫做公钥,一个叫做私钥。公钥和私钥是配对的,最大的缺点是运算速度非常慢,比对称加密要慢很多。
- 通过公钥对明文加密,变成密文;通过私钥对密文解密,变成明文
- 也可以通过私钥对明文加密,变成密文;通过公钥对密文解密。变成明文
4.数据摘要&&数据指纹
数字指纹(数字摘要):其基本原理是利用单项散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。
摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推出原信息。通常用来进行数据对比。
5.数字签名
摘要经过加密就得到了数字签名
6.HTTPS的工作过程探究
既然要保证数据安全,就需要进行"加密"。网络传输中不再直接传输明文了,而是加密之后的"密文"。加密的方式有很多,但是整体上可以分为两个大类:对称加密和非对称加密
方案1——只是用对称加密
如果通信双方各自持有同一个密钥X,且没有别人知道,这两方的通信安全当然可以被保证
引入对称加密之后,即使数据被中间人截获,但是他没有密钥,因此就无法进行解密,也就不知道请求的真是内容是什么了.
可是,事情并没有这么简单,服务器同一时刻其实是给很多客户端提供服务的,这么多客户端,每个人用的密钥都必须是不同的(如果相同那密钥就太容易扩散,中间人也就能拿到了)。因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这也很麻烦。
比较理想的做法是客户端在服务器建立连接的时候,双方协商确定这次用的密钥是什么?
但是如果直接把密钥明文传输,那么中间人也可以获得密钥了,此时后续的加密操作就形同虚设了,因此密钥的传输也需要加密。那么对密钥进行加密,如果也进行对称加密,那么也需要协商确定一个密钥的密钥。那么问题将会进入死循环了。因此密钥的传输如果使用对称加密是行不通的
方案2——只进行非对称加密
鉴于非对称加密的机制,如果服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据之前都先用这个公钥加密好再传,从客户端到服务器信道似乎是安全的,因为只有服务器有相应的私钥能解开公钥加密的数据。但是服务器到浏览器的这条路怎么保障安全呢?如果服务器用他的私钥加密数据传给浏览器,那么浏览器用公钥可以解开它,而这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持了,那让也能用该公钥解密服务器传来的信息。因此只进行非对称加密也是不安全的
方案3——双方都是用非对称加密
- 服务端拥有公钥S和对应的私钥S‘,客户端拥有公钥C和私钥C’
- 客户端和服务端交换公钥
- 客户端给服务端发信息:先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S‘
- 服务器端给客户端发信息:先用C对数据加密再发送,只能由客户端解密,因为只有客户端有私钥C‘
- 但是我们说过使用非对称加密算法强度复杂,效率太慢了,无法被接受
- 依然有安全问题
方案4——非对称加密+对称加密
我们知道使用非对称加密效率太差,因此我们将非对称加密和对称加密配合使用来解决效率问题
- 服务端具有非对称公钥S和私钥S‘
- 客户端发起HTTPS请求,获取服务端公钥S
- 客户端在本地生成对应密钥C,通过公钥S加密,发送给服务器
- 由于中间人没有私钥,即使截获了数据,也无法还原内部的原文,也就无法获取对应密钥(really?)
- 服务器通过私钥S'解密,还原出客户端发送的对称密钥C,并且使用这个对称密钥加密给客户端返回的响应数据
- 服务器通过私钥S’解密,还原出客户端发送的对称密钥C,并且使用这个对称密钥加密给客户端返回的响应数据
- 后续客户端和服务器的通信都只用对称加密.由于该密钥只有客户端和服务器两个主机知道,其它主机/设备不知道密钥即使截获数据也没有意义
由于对称加密的效率⽐⾮对称加密⾼很多, 因此只是在开始阶段协商密钥的时候使⽤⾮对称加密, 后续的传输仍然使⽤对称加密.
方案3方案4的问题所在
方案2方案3方案4都存在一个问题,如果最开始,中间人就开始攻击了呢?
中间人攻击——针对上面的场景
- 服务器具有非对称加密算法的公钥S,私钥S‘
- 中间人具有非堆成加密算法的公钥M,私钥M’
- 客户端向服务器发送请求,服务器明文传输公钥S给客户端
- 中间人挟持数据报文,提取公钥S并保存好,然后将被劫持报文中的公钥S替换成自己的公钥M,并将伪造报文发给客户端
- 客户端收到报文,提取公钥M(自己以为是服务器端发过来的),自己形成了对称密钥X,用公钥M加密X,形成报文发送给服务器
- 中间人劫持后,直接用自己的私钥M'进行解密,得到通信密钥X,再用曾经保存的服务端公钥S加密后再发送给服务器
- 服务器拿到报文,用自己的私钥S’解密,得到通信密钥X
- 双方开始采用X进行对称加密,进行通信。但是一切都在中间人的掌握之中
以上问题发生的本质是客户端无法确定收到的含有公钥的数据报文就是目标服务器发送过来的
7.引入证书
CA认证
服务器端在使用HTTPS前,需要向CA机构申请一份数字证书,数字证书里含有证书申请着的信息,公钥信息等等。服务器把证书传输给浏览器,浏览器从证书里面获取公钥就行了。证书就如同身份证,证明服务端公钥的权威性。
需要注意的是:申请证书的时候,需要在特定的平台生成查,会同时生成一对儿密钥对,即公钥和私钥。这对密钥对就是用来在网络通信中进行明文加密以及数字签名的
其中公钥会随着CSR文件,一起发给CA进行权威认证,私钥服务端自己保留,用来后续进行通信(其实主要就是用来交换对称密钥)
形成CSR之后就是想CA进行申请认证,不过一般认证过程很繁琐,网络各种提供证书申请的服务商一般真的需要,直接找平台解决就行
理解数据签名

- CA机构拥有⾮对称加密的私钥A和公钥A'
- CA机构对服务端申请的证书明⽂数据进⾏hash,形成数据摘要
- 然后对数据摘要⽤CA私钥A'加密,得到数字签名S
服务端申请的证书明⽂和数字签名S 共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了
方案5——非对称加密+对称加密+证书认证
在客户端和服务器刚一建立连接的时候,服务器给客户端返回一个证书,证书包含了之前服务器的公钥和网站的身份信息
客户端进行认证
当客户端获取这个证书之后,会对证书进行校验(防止证书是伪造的)
- 判定证书的有效期是否过期
- 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
- 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到⼀个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对⽐ hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的
查看浏览器的受信任证书发布机构
以Microsoft的默认浏览器为例
我们可以在微软的浏览器下查看安全浏览Web的各种情况
中间人有没有可能篡改该证书呢?
- 中间人篡改了证书的明文
- 由于他没有CA机构的私钥,所以无法Hash之后用私钥加密形成签名,那么也就没法对篡改后的证书形成匹配的签名
- 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,也就种植向服务器传输信息
中间人整个掉包证书?
- 因为中间⼈没有CA私钥,所以⽆法制作假的证书(为什么?)
- 所以中间⼈只能向CA申请真证书,然后⽤⾃⼰申请的证书进⾏掉包
- 这个确实能做到证书的整体掉包,但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客⼾端依旧能够识别出来。
- 永远记住:中间⼈没有CA私钥,所以对任何证书都⽆法进⾏合法修改,包括⾃⼰的
但是还有个问题, 如果⿊客把 hello 篡改了, 同时也把哈希值重新计算下, 客⼾端就分辨不出来了呀.
所以被传输的哈希值不能传输明⽂, 需要传输密⽂.
完整流程
总结
HTTPS ⼯作过程中涉及到的密钥有三组.
- 第⼀组(⾮对称加密): ⽤于校验证书是否被篡改. 服务器持有私钥(私钥在形成CSR⽂件与申请证书时获得), 客⼾端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器在客⼾端请求是,返回携带签名的证书. 客⼾端通过这个公钥进⾏证书验证, 保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。
- 第⼆组(⾮对称加密): ⽤于协商⽣成对称加密的密钥. 客⼾端⽤收到的CA证书中的公钥(是可被信任的)给随机⽣成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.
- 第三组(对称加密): 客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密.
第⼆组⾮对称加密的密钥是为了让客⼾端把这个对称密钥传给服务器.第⼀组⾮对称加密的密钥是为了让客⼾端拿到第⼆组⾮对称加密的公钥.
相关文章:

[ 网络 ] 应用层协议——HTTPS协议原理
目录 1.HTTPS是什么 2.加密技术 2.1什么是加密 2.2为什么要加密 2.3加密处理防止被窃听 3.常见的加密方式 对称加密 非对称加密 4.数据摘要&&数据指纹 5.数字签名 6.HTTPS的工作过程探究 方案1——只是用对称加密 方案2——只进行非对称加密 方案3——双方…...
http协议如何操作
、HTTP协议(超文本传输协议) 1.1、http协议是一个基于“请求与响应”模式的、无状态的应用层协议。 http协议采用URL作为定位网络资源的标识。 1.2、URL格式 http://host[:port][path] host:合法的Internet主机域名或IP地址 port:端口号…...
ESP Insights 系列文章
ESP Insights 系列 #1 | 远程查看设备信息,快速解决固件问题 ESP Insights 是一个可远程查看设备固件运行状态和日志的平台,能够帮助开发人员快速定位并解决固件问题。 ESP Insights 系列 #2 | 新增功能 最新版本优化了用户界面、修复了系统稳定性&am…...

如何提高爬虫工作效率
单进程单线程爬取目标网站太过缓慢,这个只是针对新手来说非常友好,只适合爬取小规模项目,如果遇到大型项目就不得不考虑多线程、线程池、进程池以及协程等问题。那么我们该如何提升工作效率降低成本? 学习之前首先要对线程&#…...
React结合Drag API实现拖拽示例详解
Drag API React中的Drag API是用于实现拖放功能的API。该API由React DnD库提供,可用于实现拖放操作,例如将元素从一个位置拖动到另一个位置。 React DnD库提供了两种Drag API:基于HTML5的拖放API和自定义实现的拖放API。 基于HTML5的拖放AP…...
【华为OD机试java、python、c++、jsNode】新学校选址(100%通过+复盘思路)
代码请进行一定修改后使用,本代码保证100%通过率。本文章提供java、python、c++、jsNode四种代码。复盘思路在文章的最后 题目描述 为了解新学期学生暴涨的问题,小乐村要建立所新学校, 考虑到学生上学安全问题,需要所有学生家到学校的距离最短。 假设学校和所有学生家都走在…...

Nacos配置中心,分组配置参考,以及python、go、bash客户端连接获取
Nacos使用说明 nacos官方网站 https://nacos.io/zh-cn/docs/v2/what-is-nacos.html 1、基本配置说明 nacosIP地址:http://xxxxx:8848/nacos/ 服务管理端登录账号:nacos XXX Java最小配置,其他客户端可参考,配置可对应到第三章…...
node-red中有关用户登录,鉴权,权限控制的流程解析
前言 默认地,node-red编辑器可以被任何访问的用户操作,包括修改节点,流数据,重新部署流。 这种默认的部署方式只适用于运行在可靠的网络中。下面我就给大家介绍一下,在公网上部署node-red后,如何对其进行安全加固和权限验证。 主要分为三部分 开启https权限保护编辑器和…...

MQTT协议-使用CONNECT报文连接阿里云
使用网络调试助手发送CONNECT报文连接阿里云 参考:https://blog.csdn.net/daniaoxp/article/details/103039296 在前面文章介绍了如何组装CONNECT报文,以及如何计算剩余长度 CONNECT报文:https://blog.csdn.net/weixin_46251230/article/d…...

每日学术速递3.8
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Unleashing Text-to-Image Diffusion Models for Visual Perception 标题:释放用于视觉感知的文本到图像扩散模型 作者:Wenliang Zhao, Yongming Rao, Zuya…...
测牛学堂:软件测试之接口测试理论基础总结
接口概念 接口:系统之间数据交互的通道。 这个系统,可以是外部和内部,也可以是两个内部系统之间的通道。 比如我们前端的登录信息,主要是用户名和密码,它通过接口传递给后端,后端校验以后,把结…...

基于土壤数据与机器学习算法的农作物推荐算法代码实现
1.摘要 近年来,机器学习方法在农业领域的应用取得巨大成功,广泛应用于科 学施肥、产量预测和经济效益预估等领域。根据土壤信息进行数据挖掘,并在此基础上提出区域性作物的种植建议,不仅可以促进农作物生长从而带来经济效益&#…...
python中html必备基础知识
<!DOCTYPE html>此标签表示这是一个html文件<heml lang"en">向搜索引擎表示该页面是html语言,并且语言为英文网站,其"lang"的意思就是“language”,语言的意思,而“en”即表示English<head>…...

【专项训练】前言:刻意练习,不断的过遍数才是王道
如何精通一个领域? 拆分知识点刻意练习:每个区域的基础动作分解训练和反复刻意练习反馈(主动反馈、被动反馈、及时反馈)任何知识体系都是一颗树,一定要梳理成思维导图,明确知识与知识之间的关系! 通过7-8周密集训练,练好基本功,彻底攻克LeetCode! 严格执行五毒神掌!…...

【Leetcode】反转链表 合并链表 相交链表 链表的回文结构
目录 一.【Leetcode206】反转链表 1.链接 2.题目再现 3.解法A:三指针法 二.【Leetcode21】合并两个有序链表 1.链接 2.题目再现 3.三指针尾插法 三.【Leetcode160】相交链表 1.链接 2.题目再现 3.解法 四.链表的回文结构 1.链接 2.题目再现 3.解法 一.…...

M1、M2芯片Mac安装虚拟机
目录前言一、安装二、网络设置三、连接SSH客户端前言 一直想着给M1 Mac上安装虚拟机,奈何PD收费,找的破解也不稳定,安装上镜像就起不来。 注:挂长久的分享莫名其妙被封,需要安装包请私信我。 一、安装 虚拟机选择&a…...

算法刷题-只出现一次的数字、输出每天是应该学习还是休息还是锻炼、将有序数组转换为二叉搜索树
只出现一次的数字(位运算、数组) 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗&…...
详解专利对学生、老师和企业员工、创业者、积分落户、地方补助的好处
大家好,我是英子老师。作为一名知识产权专家,深耕于专利行业十余年,具有丰富的专利工作经验:曾在大型专利代理机构从事专利代理工作、专利质检工作(抽查代理机构的专利代理人的撰写质量并评分);之后在知名上市企业、行业龙头企业担任高级专利工程师的职位,主要工作内容…...

Python图像处理:频域滤波降噪和图像增强
图像处理已经成为我们日常生活中不可或缺的一部分,涉及到社交媒体和医学成像等各个领域。通过数码相机或卫星照片和医学扫描等其他来源获得的图像可能需要预处理以消除或增强噪声。频域滤波是一种可行的解决方案,它可以在增强图像锐化的同时消除噪声。 …...
智能手机高端“酣战”,转机在何方?
经过多年发展,如今全世界有七成手机由中国制造,但在利润最丰厚的高端市场,国产厂商在很长一段时间之内都是形单影只,曾经一度跻身高端的“华为”因为封禁成了“绝唱”。 华为“失声”高端之后,其他一众国产厂商或主动…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...