当前位置: 首页 > news >正文

网络原理 - HTTP/HTTPS(5)

HTTPS

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

HTTP协议内容都是按照文本的方式明文传输的.

这就导致了在传输过程中出现了一些被篡改的情况.

臭名昭著的"运营商劫持"

下载一个天天动听.

未被劫持的效果,点击下载按钮,就会弹出天天动听的下载链接.

已被劫持的效果,点击下载按钮,就会弹出QQ浏览器的下载链接.

 

由于我们通过网络传输的任何数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的内容,并进行篡改.

点击"下载按钮",其实就是在给服务器发送了一个HTTP请求,获取到的HTTP响应就包含了该APP的下载链接.运营商劫持之后,就发现这个请求是要下载天天动听,那么就自动把交给用户的响应给篡改成"QQ浏览器"的下载地址了.

 

当然,他们这么做,是为了钱~

不止运营商可以劫持,其它的黑客也可以用类似的手段进行劫持,来窃取用户隐私信息,或者篡改内容

试想一下:如果黑客在用户登录支付宝的时候获取到用户余额,甚至是密码~ 

在互联网上,明文传输是比较危险的事情!!! 

HTTPS就是在HTTP的基础上进行了加密,进一步来保护用户的信息安全~

"加密"是什么

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

解密就是把密文再进行一系列变换,还原成密文.

在加密和解密的过程中,往往需要一个或者多个的中间数据,辅助进行这个过程,这样的数据称为密钥.

HTTPS的工作过程

既然要保证数据安全,就需要进行"加密".

网络传输中不再直接传输明文,而是加密以后的"密文".

加密的方式有很多,但可以整体分为两大类:对称加密和非对称加密.

引入对称加密

对称加密其实就是通过同一个"密钥",把明文加密成密文,

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

假设明文a=1234,密钥key=8888

则加密a^key得到的密文b为9834.

然后针对密文9834再次运算b^key,得到的就是原来的明文1234.

(当然对于字符串的对称加密也是同理,每一个字符都可以表示成一个服务器).

当然,按位异或只是最简单的对称加密,HTTPS中并不是使用按位异或.

 

引入对称加密之后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法解密,也就不知道真实的请求内容是啥了.

但是事情没有这么简单,服务器同一时刻肯定是给很多客户端提供服务的.这么多客户端,每个人用的密钥都必须是不同的(如果是相同那密钥就容易扩散了,黑客也就拿到了),因此每个服务器就需要维持每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情~ 

比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是啥~

 

但是如果直接把密钥明文传输,那么黑客也就能获取到密钥了~后续的加密操作也就形同虚设了.

因此密钥的传输也必须加密传输!

但是想要对密钥进行对称加密,就仍然需要先协商确定一个"密钥的密钥".这个也会被黑客截获,所以密钥的传输再用对称加密就行不通了.就需要引入非对称加密.

引入非对称加密

非对称加密要用到两个密钥,一个叫做"公钥",一个叫做"私钥".

公钥和私钥是配对的,最大的缺点就是运算速度非常慢(因此不会用来加密header和body的,只用来加密对称密钥),比对称加密要慢很多. 

通过公钥对明文加密,变成密文.

通过私钥对密文解密,变成明文.

也可以反着用

通过私钥对明文加密,变成密文.

通过公钥对密文解密,变成明文.

举个栗子:A要给B一些重要的文件,因此A和B提前做出约定:

B说:我桌子上有一个盒子,然后我给你一把锁,你把文件放盒子里用锁锁上,然后我回头拿着钥匙来开锁取文件.

在这个场景中,这把锁就相当于公钥,要是就是私钥.公钥给谁都行(不怕泄露),但是私钥只有B自己持有.持有私钥的人才能进行解密. 

 

客户端在本地生成对称密钥,通过公钥加密,发送给服务器.

由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥.

服务器通过私钥解密,还原出客户端发送的对称密钥.并且使用这个对称密钥加密给客户端返回的响应数据.

后续客户端和服务器通信都只用对称加密即可.由于该密钥只有客户端和服务器两个主机知道,其它设备/主机不知道密钥,即使截获了信息也没有意义. 

由于对称加密的效率比非对称加密高很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密. 

那么接下来问题又来了:

客户端如何获取到正确的公钥?

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

中间人攻击

黑客可以使用中间人攻击,获取到对称密钥.

服务器可以创建出公钥和私钥,那么黑客就可以冒充服务器,也创建出一个自己的公钥和私钥.

过程如下:

 

引入证书

 服务端在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息,公钥信息等.服务器把证书传递给浏览器,浏览器从证书中获取公钥就行了,证书就如同身份证,

证明服务端公钥的权威性.

分为六步:1.服务端申请认证(证书). 2.CA机构审核信息 3.CA机构为服务端签发证书

                4.服务端给客户端返回证书 5. 客户端验证证书 6.客户端向服务端发起密钥协商.

这个证书可以理解成是一个结构化的字符串,里面包含了以下信息:

证书发布机构

证书有效期

公钥

证书所有者

签名

...... 

需要注意的是:申请证书的时候,需要在特定的平台生成,会同时生成一对儿密钥对儿,即公钥和私钥.这对密钥对儿就是用来在网络通信中进行明文加密及数字签名的.

此时就有:

 

一个关键问题:返回证书的时候,证书数据也是经过了黑客的设备,此时黑客是否能修改证书中的公钥?替换成自己的公钥呢?

不行!!! 客户端拿到证书之后,会先针对证书校验真伪

证书的验证过程

关键就是证书的签名. 

颁布证书的公正机构,会在发布证书的时候,给这个证书计算出一个校验和.

然后公证机构使用自己的私钥(和服务器的私钥无关)针对校验和进行加密,此时就得到了证书的签名. (市面上的公证机构一共也没多少.这些公证机构持有自己的私钥,对应的公钥都包含在常见的系统中,windows里面就内置了大量的公钥,如果没有,也可以额外安装).

此处所谓的签名本质上就是经过加密的校验和!!

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

1.判定证书的有效期是否过期.

2.判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)

3.把证书中其它的字段通过一系列算法(CRC,MD5等),得到一个较短的字符串=>校验和

如果两份数据的内容一样,此时,校验和,就一定是相同的.

如果校验和不同,两份数据的内容则一定不同.(逆否命题)

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

中间人篡改了该证书的明文.

由于他没有CA机构的证明,所以无法hash之后用私钥加密形成签名,那么也就没法对篡改后的证书形成匹配的签名.

如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传递信息,防止把信息泄露给中间人. 

中间人整个掉包证书?

因为中间人没有CA私钥,所以无法制作假的证书.

所以中间人只能向CA机构申请真的证书,然后用自己申请的信息进行掉包.

这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来.

永远记住:中间人没有CA私钥,所以对任何证书都无法进行合法修改,包括自己的. 

相关文章:

网络原理 - HTTP/HTTPS(5)

HTTPS HTTPS也是一个应用层协议.在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输的. 这就导致了在传输过程中出现了一些被篡改的情况. 臭名昭著的"运营商劫持" 下载一个天天动听. 未被劫持的效果,点击下载按钮,就会弹出天天动听的…...

设计模式——抽象工厂模式

定义: 抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列或相互依赖对象的接口,而无须指定它们具体的类。 概述:一个工厂可以提供创建多种相关产品的接口,而无需像工厂方法一样,为每一个产品都提供一个具体…...

详解编译和链接!

目录 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理 2.2 编译 2.3 汇编 2.4 链接 3. 运行环境 4.完结散花 悟已往之不谏,知来者犹可追 创作不易,宝子们!如果这篇文章对你们…...

力扣226 翻转二叉树 Java版本

文章目录 题目描述解题思路代码 题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root…...

免费的数据恢复软件哪个好?这10个数据恢复软件可以试试

遇到电脑、硬盘或U盘等设备中数据丢失,不用着急,数据恢复软件来帮你。 在遇到数据丢失的问题时,很多朋友都会很着急也不知道该怎么办。作为数据恢复小白,我们可以选择使用数据恢复软件进行扫描恢复。现在市面上的数据恢复软件很多…...

力扣2476二叉搜索树最近节点查询

题目来源 力扣2476二叉搜索树最近节点查询 题目概述 给你一个 二叉搜索树 的根节点 root ,和一个由正整数组成、长度为 n 的数组 queries 。 请你找出一个长度为 n 的 二维 答案数组 answer ,其中 answer[i] [mini, maxi] : mini 是树中…...

板块一 Servlet编程:第六节 HttpSession对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程:第六节 HttpSession对象全解 一、什么是HttpSessionSession的本质 二、创建Seesion及常用方法三、Session域对象四、Session对象的销毁 在上一节中,我们学习了Servlet五大对象里的第三个Cookie对象,但Cookie是有大小限制和…...

后端设计PNR一点总结

条条大路通罗马 在追求极致PPA的过程中,时序问题总是可以解决 方法总比困难多 关键问题其实就是控制delay 不多不少,简单总结二十一条(欢迎大家评论区继续发挥): module padding的设置,可以有效解决congestion问题,factor自己try,命令:setPlaceMode -place_global…...

BI 数据分析,数据库,Office,可视化,数据仓库

AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作 PowerBI 商业智能 68集 Mysql 8.0 54集 Oracle 21C 142集 Office 2021实战应用 Python 数据分析实战, ETL Informatica 数据仓库案例实战 51集 Excel 2021实操 100集, Excel 2021函数大全 80集 Excel 2021…...

汽车信息安全--S32K3的HSE如何与App Core通信(1)?

目录 1.S32K3 网络安全架构 2. MU的通信流程 2.1 总体描述 2.2 Host 消息类型 2.3 寄存器概述...

arcgisPro制图输出

1、设置地图底图 2、导入数据 3、 设置图形颜色,如下:右键“浙江省”数据层,选择符号系统 4、在右侧可看到打开的符号系统栏,进行如下设置: 5、移除“其他所有值”项,如下: 6、设置图形轮廓,如下…...

产品化Chatgpt所面临的五大技术挑战

2022年11月,ChatGPT横扫全球,成为应用人工智能(AI)领域迄今为止最令人惊叹的“哇!”时刻,也是当前科技投资激增的催化剂。2023年11月,首席执行官Sam Altman宣布该产品周用户量达到1亿&#xff0…...

8.qt5使用opencv的库函数打开图片

1.配置opencv动态库的环境变量 2.在创建的qt工程中加入如下opencv代码,具体代码如下: 使用opencv库函数显示图片...

学习 python的第四天,顺便分享两首歌:we don‘ talk anymore,You ‘re Still The One

诸君晚上好,现在是🌃晚上,今天是学习python的第四个学习日,不知不觉学了四天了,还是那句话:不积跬步无以至千里、不积小流无以成江海! 暂时回顾下前面的学习日吧: 第一个学习日----…...

uniapp:APP端webview拦截H5页面跳转,华为市场发布需要限制webview的H5页面跳转

在使用uniapp开发APP项目时,华为市场上线APP会被打回来:您的应用内容存在点击跳转至第三方应用市场或游戏中心下载渠道的问题,不符合华为应用市场审核标准。 华为审核指南4.6 因此可以考虑下面的处理方式,通过拦截webview页面的…...

[HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…...

计算机网络实验六 OSPF

一、实验目的和要求 1、掌握 OSPF 的基本配置方法; 2、理解 OSPF 的工作原理。见实验指导书 二、实验环境 1、运行 Windows 2008 Server/XP/7 操作系统的 PC 一台。 2、PacketTracer。 三、实验内容与过程(实验题目和代码) 实验内容: 根据以下任务配置网络:某单位拥…...

亿道丨三防平板丨加固平板丨为零售业提供四大优势

随着全球经济的快速发展,作为传统行业的零售业也迎来了绝佳的发展机遇,在互联网智能化的大环境下,越来越多的零售企业选择三防平板电脑作为工作中的电子设备。作为一种耐用的移动选项,三防平板带来的不仅仅是坚固的外壳。坚固耐用…...

RK3568平台开发系列讲解(Linux系统篇)SPI 客户端通信

🚀返回专栏总目录 文章目录 一、spi_transfer二、spi_message三、初始化沉淀、分享、成长,让自己和他人都能有所收获!😄 SPI I/O模型由一组队列消息组成。我们提交一个或多个struct spi_message结构时,这些结构以同步或异步方式处理完成。单个消息由一个或多个struct sp…...

MySql-DQL-聚合函数

目录 聚合函数统计该企业员工数量count(字段)count(常量)count(*) 统计该企业最早入职的员工统计该企业最迟入职的员工统计该企业员工 ID 的平均值统计该企业员工的 ID 之和 聚合函数 之前我们做的查询都是…...

Java:获取PDF文件的总页数

引入依赖 <!--pdf--> <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version> </dependency>代码工具类 package com.example.util;import org.apache.pdfbox.p…...

Git介绍与使用

Git介绍与常用命令的使用 目录: 一、Git简介 二、Git简单命令行入门 三、Git常用命令 四、常见问题补充 一、Git简介 Git 是一个开源的分布式版本控制系统&#xff0c;是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。特点&…...

React18源码: React中的LanePriority和SchedulerPriority

优先级区别和联系 在源码中&#xff0c;3种优先级位于不同的js文件&#xff0c;是相互独立的注意&#xff1a; LanePriority 和 SchedulerPriority 从命名上看&#xff0c;它们代表的是优先级ReactPriorityLevel 从命名上看&#xff0c;它代表的是等级而不是优先级 它用于衡量…...

Android Studio基础(下载安装与简单使用)

1、搭建Android开发平台 1.1 Android Studio 下载地址及版本说明 Android 开发者官网&#xff1a; https://developer.android.com/index.html&#xff08;全球&#xff0c;需科学上网&#xff09; https://developer.android.google.cn/index.html&#xff08;国内&#xff…...

MyBatisPlus条件构造器和常用接口

前置配置文章 一、wapper介绍 wrapper的继承体系&#xff1a; Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装UpdateWrapper &#x…...

ABAP 导入Excel表示例程序

目录 ABAP 导入excel示例程序创建程序使用的结构上传下载模板 ABAP 导入excel示例程序 批量导入程序&#xff0c;需要使用到导入模板&#xff0c;首先需要创建程序&#xff0c;之后是需要创建excel导入模板&#xff0c;并且需要将excel导入模板上传到SAP系统里面&#xff0c;之…...

Spring之AOP源码解析(中)

前言 在上一篇文章中,我们讲解了Spring中那些注解可能会产生AOP动态代理,我们通过源码发现,完成AOP相关操作都和ProxyFactory这个类有密切关系,这一篇我们将围绕这个类继续解析 演示 作用 ProxyFactory采用策略模式生成动态代理对象,具体生成cglib动态代理还是jdk动态代理,…...

《Docker极简教程》--Docker卷和数据持久化--Docker卷的使用

一、基本操作 1.1 创建Docker卷 创建 Docker 卷是在 Docker 中管理持久化数据的重要步骤之一。通过 Docker 卷&#xff0c;可以将数据与容器解耦&#xff0c;实现数据的持久化存储&#xff0c;并且可以在容器之间共享数据。以下是创建 Docker 卷使用 docker volume create 命…...

【Logback】如何在项目中快速引入Logback日志?

目录 1、引入相关依赖或者 jar 包 2、使用logback日志 3、引入logback配置文件 4、打印logback内部状态信息 Logback 是 Java 社区中使用最广泛的日志框架之一。它是其前身 Log4j 的替代品。Logback 比所有现有的日志框架速度更快&#xff0c;占用空间更小&#xff0c;而且…...

【Linux从青铜到王者】 基础IO

本篇重点&#xff1a;文件描述符&#xff0c;重定向&#xff0c;缓冲区&#xff0c;磁盘结构&#xff0c;文件系统&#xff0c;inode理解文件的增删查改&#xff0c;查找一个文件为什么一定要有路径&#xff0c;动静态库&#xff0c;有的时候为什么找不到库&#xff0c;动态库的…...