【计算机网络】什么是HTTPS?HTTPS为什么是安全的?
【面试经典题】
前言:
HTTP最初的设计就是用于数据的共享和传输,并没有考虑到数据的安全性,如窃听风险,篡改风险和冒充风险。HTTPS是在 HTTP 的基础上引入了一个加密层。HTTPS通过数据加密,数据完整性检验和身份认证有效的保证了数据传输的安全性。HTTP默认端口号80,HTTPS默认端口号是443。是接下来说说这些方法具体是咋实现的。
HTTPS:这里的S指的是TLS(前身是SSL,后来更名了)传输层安全协议。可以理解为HTTPS=HTTP+TLS。TLS是一种安全性协议。旨在保障通信数据的保密性,完整性,真实性。TLS位于应用层和传输层之间。
TLS的发展历程
HTTP为什么不安全?
互联网上任何数据包的传输,都需要经过许许多多的网络设备如路由器等,如果其中一台设备是恶意的,或者被恶意的人劫持(如黑客),那传输的数据就可能会被窃取或者修改。并且HTTP是明文传输的,传输的数据没有进行任何加密。数据就会被轻易窃取。并且数据没有经过任何的校验,要是数据被篡改,也无法感知。并且通信双方也没有进行身份认证,就会存在通信对象可能不是目标对象的情况,如黑客冒充成客户端或者服务器端与对方进行交互。
综上所述:HTTP存在以下三种安全风险:
- 窃听风险
- 篡改风险
- 冒充风险
HTTPS的工作过程
对于如何解决第一种风险,我们首先能想到的是进行加密,加密有两种,对称加密和非对称加密。
1.使用对称加密
这种对称加密使用同一种秘钥,秘钥是由客户端这边生成的,不同的客户端秘钥不同,然后向服务器发送,并于服务器约定使用这个秘钥传输。秘钥既可以加密也可以解密,虽然数据传输进行了加密,但秘钥在传输过程中并没有被加密,就会容易被截获,截获的人就可以通过秘钥解密数据,造成风险。
2.使用非对称加密
如上图所示,加密过程共有四步:
- 首先浏览器向服务器发送获取公钥的请求,
- 服务器收到请求返回自己的公钥,
- 浏览器收到公钥后,将请求数据和公钥通过加密算法进行加密生成密文,然后发送给服务器。
- 服务器收到密文后,用私钥和密文通过解密算法获得明文数据,然后服务器又将响应数据使用私钥加密后发给浏览器,浏览器收到密文再通过公钥进行解密。
这种加密显然优于第一种,非对称加密使用一对秘钥,公钥和私钥,公钥是公开的,私钥是仅服务器拥有的。非对称加密的特点是通过公钥加密的密文必须由私钥解密,通过私钥加密的密文必须由公钥解密。但是纯使用非对称加密这种也有缺点,一是效率太慢(因为涉及到复杂的数学运算)
二是传输过程中公钥是可以被截获的,并且第四步服务器返回响应是通过私钥加密的,截获公钥的不法分子就能够通过公钥解密。
3.使用非对称加密+对称加密
如上图所示,非对称加密过程共有五步:
- 浏览器向服务器发起获取非对称加密公钥的请求。
- 服务器收到请求返回自己的公钥。
- 浏览器将对称加密秘钥使用公钥加密后发送给服务器,服务器收到密文使用自己的私钥解密后获得对称加密秘钥。
- 浏览器将请求数据使用对称加密秘钥加密后发送给服务器。
- 服务器使用刚才获得的对称秘钥对密文进行解密,得到请求数据。服务器根据请求处理数据,服务器将响应数据使用对称秘钥加密后发给浏览器,浏览器使用对称秘钥解密后获得响应。
非对称加密主要用来传输对称加密的秘钥,而不是传输业务数据。传输业务数据交给对称加密。这样就算不法分子能够拿到公钥,也无济于事。我们的目标是让对称加密的秘钥安全的发送给服务器。发送过去后,剩下的数据传输就全部用秘钥进行加密解密。总的来说就是两种加密方式的加密对象不同。作用时间不同。这样做就可以有效防止窃听风险。但还不够,魔高一尺道高一丈。如果黑客冒充服务器并伪造公钥该咋办?
非对称加密为什么要引入对称加密?
因为非对称加密/解密,运算成本是比较高的,运算速度也比较慢;而对称加密运算成本低,速度快。上文中单单使用对称加密不安全是因为秘钥在传输过程中没有加密,容易被截获。即使用对称加密的要害是传输秘钥。如果我们使用非对称加密进行传输对称秘钥,然后在后面的数据传输中均使用对称加密。这样相互配合,就可以在保证安全的同时,效率也提高。如果整个过程都是用非对称加密传输,传输效率会大打折扣。
3.1详解冒充风险
不法分子是如何冒充的?
客户端向服务器请求公钥后,服务器会返回一个公钥,但在这个中间,公钥存在被截获的风险,黑客这边提前自己也生成一对公钥和私钥,截获后黑客就可以将公钥替换成自己的。但是客户端不知道,就会拿着黑客提供的公钥进行加密,然后传给服务器,中间又会被黑客截获,由于公钥是黑客的,那自然黑客手中的秘钥就能对它解密,这个过程中黑客就获得了秘钥,这时通信双方并没有正式进行数据通信,黑客继续伪装,使用之前截获的服务器的公钥(不是伪造的,如果这里伪造,数据传到服务器那边是解不开的)对秘钥加密,发送给服务器。服务器使用私钥解密,于是双方就约定使用这个秘钥进行数据传输了,殊不知秘钥已经被黑客截获了。后续黑客只需要通过秘钥就能轻松地获取数据了。这个过程的关键是秘钥被黑客给截取了。
4.使用证书机制
解决上述冒充问题的办法就是进入公证机构。在客户端和服务器起初建立连接时,服务器就给客户端返回一个证书。这个证书就好比人的身份证,用来作为网站的身份标识。而每搭建一个 HTTPS 网址时都需要在认证机构申请一个证书。
证书含有的重要信息:
- 证书发布机构
- 证书有效期
- 公钥(服务器的公钥)
- 证书所有者
- 签名
即在搭建服务器时,服务器会去公证机构申请证书并提交一系列材料。认证成功后,公证机构会给这个服务器颁发证书(证书中就含有公钥)。接下来每次客户端访问服务器时,都会先请求服务器的证书,服务器返回证书给客户端。接下来分两步进行检验:
第一步:检验证书是否合法
万一证书是伪造的,校验证书方式有:
- 判定证书的有效期是否过期
- 判定证书的发布机构是否受信任
- 判定证书是否被篡改(从系统中拿到该证书发布机构的公钥,对签名解密,得到一个 hash 值(称为数据摘要),设为 hash1。然后计算整个证书的 hash 值,设为 hash2。对比 hash1 和 hash2 是否相等,如果相等,则说明证书是没有被篡改过的)
证书检验通过后,进行检验证书中的数据是否被篡改过。
第二步:检验证书中数据是否被篡改
目的是为了检验公钥是否被修改过,进行数字签名(其实就是被加密后的校验和), 这里的校验和就是把证书中所有数据的每个字节带入公式就会算出一个结果数字,这个数字就是校验和。为了防止该校验和又被修改,我们对校验和进行了加密。这个加密是由公正机构完成的,公证哪个机构那边也有一对公钥和私钥,其中公钥分发给各个客户端,私钥用来加密校验和。现如今我们的操作系统上已经拥有许多知名认证机构的公钥,客户端收到证书并确认证书无误后,开始使用公钥解密获得检验和(一串数字),同时客户端这白牛也用相同的公式将证书中的数据进行计算得出一个校验和,与解密后的校验和对比,以此来最终确认证书有没有被篡改过。通过后就可以开始进一步传输秘钥,传输数据了。解决冒充问题的关键就是验证这个证书中携带的服务器的公钥是否被修改过。
常见的计算校验和的算法有MD5 和 SHA,以下以 MD5 为例,介绍其特点:
- 定长:无论多长的字符串,计算出来的 MD5 值都是固定长度(16字节版本或者32字节版本)
- 分散:源字符串只要改变一点点,最终得到的 MD5 值都会差别很大
- 不可逆:通过源字符串生成 MD5 很容易,但是通过 MD5 还原成原串理论上是不可能的
由于 MD5 这样的特性,因此可以认为如果两段数据的 MD5 值相同,则这两段数据相同。
总结:
- 对称加密:由客户端生成的对称密钥,用于对传输的数据进行加密,需要将该对称密钥告知给服务器。
- 非对称加密: 服务器给客户端提供一个公钥(私钥自己持有),将公钥传发送给客户端,客户端使用公钥对对称密钥进行加密,将密文传送给服务器。
- 证书机制: 通过第三方公证机构,向网站颁发证书,该证书里面就含有服务器的公钥。客户端首先向服务器请求证书,客户端拿到证书后进行校验,如果证书合法并且证书里的数据没有被篡改,就使用里面的公钥对对称密钥进行加密。
通过上面三种方式的结合,就可以保证传输过程中的安全了。
相关文章:

【计算机网络】什么是HTTPS?HTTPS为什么是安全的?
【面试经典题】 前言: HTTP最初的设计就是用于数据的共享和传输,并没有考虑到数据的安全性,如窃听风险,篡改风险和冒充风险。HTTPS是在 HTTP 的基础上引入了一个加密层。HTTPS通过数据加密,数据完整性检验和身份认证…...

Windows-Oracle19c 安装详解-含Navicate远程连接配置 - 同时连接Oracle11g和Oracle19c
文章目录 0 说明1 下载链接2 安装:一定要以管理员身份运行,不然后面有可能会报错。3 启动监听4. 登录Oracle4 Navicate远程连接-配置监听4.1 修改监听文件4.2 网络配置助手-配置本地监听端口4.3 Navicate连接成功 5 Navicate同时连接两个Oracle数据库 0 …...

文件权限详解
一、文件类型 ll指令查看文件详细信息中,第一列就是文件类型。 常见的文件类型有: 1、 - :普通文件 (文本、源代码、图片、视频、可执行) 2、 d :目录文件 3、b :块设备 4、c ࿱…...

在声明和定义的一些小坑
1、静态成员变量的初始化 静态成员变量声明在 .h 头文件文件中,初始化应该在 .cpp 源文件中 就会出现"找到一个或多个多重定义的符号",下面的错误 class MyString{public:typedef char* iterator;typedef const char* const_iterator;iterator begin();…...

浏览器事件循环 (event loop)
进程与线程 进程 进程的概念 进程是操作系统中的一个程序或者一个程序的一次执行过程,是一个动态的概念,是程序在执行过程中分配和管理资源的基本单位,是操作系统结构的基础。 简单的来说,就是一个程序运行开辟的一块内存空间&a…...

P1868 饥饿的奶牛
根据题意可以知道是一个动态规划,看完数据范围之后可以知道是一个线性DP。 解决方法有点类似于背包问题,枚举背包的每一个空间。 如果把坐标轴上每个点都看成一个块儿,只需要按顺序求出前 i 个块儿的最大牧草堆数,f[i] 就是前i的…...

【软考系统架构设计师】2021年系统架构师综合知识真题及解析
本文主要分享2021年下半年系统架构师综合知识历年真题以及本人在做题时的所思所想。题目序号有点混乱,可忽略 【01】.某计算机系统页面大小为4K,进程P1的页面变换表如下图所示,看P1要访问数据的逻辑地址为十六进制1B1AH,那么该逻辑地址经过变…...

如何在忘记手机密码或图案时重置 Android 手机?
忘记手机密码或图案是 Android 用户一生中不得不面对的最令人沮丧的事情之一。恢复 Android 设备的唯一方法是在 Android 设备上恢复出厂设置。但许多用户不使用此方法,因为此过程会擦除您设备上可用的所有个人数据。 但是,有一种方法可以在不丢失任何数…...
LeetCode每日一题——2520. Count the Digits That Divide a Number
文章目录 一、题目二、题解 一、题目 2520. Count the Digits That Divide a Number Given an integer num, return the number of digits in num that divide num. An integer val divides nums if nums % val 0. Example 1: Input: num 7 Output: 1 Explanation: 7 di…...

论文阅读——DistilBERT
ArXiv:https://arxiv.org/abs/1910.01108 Train Loss: DistilBERT: DistilBERT具有与BERT相同的一般结构,层数减少2倍,移除token类型嵌入和pooler。从老师那里取一层来初始化学生。 The token-type embeddings and the pooler a…...
202212 青少年等级考试机器人实操真题三级
202212 青少年等级考试机器人实操真题三级 考试时间:60分钟 总分:100 及格分:60 一、问答题 (共1题,每题100分) 1、实际操作(共1题,共100分) 请考生在实操考试结束前将本题作答程序文件按“说明”要求完成上传。 1. 主…...

token正确不报错,token失效后却出现报跨域错误
1.今天在使用koajs开发项目时,突然发现前端配置axios的response获取不到后端定义的token失效内容了,取而代之的是出现了跨域的错误。 2. 我马上去查找koajs的跨域中间件配置,发现配置完好cors,token正确时,接口正常访问…...

STM32中除零运算,为何程序不崩溃?
在 C 语言中,除零运算会导致异常吗? 在 C 语言中,当一个数除以零时,会导致除法运算错误,通常表现为“除以零”错误或被称为“浮点异常”(floating-point exception)。 对于整数除法,…...
sprinbboot 2.7启动不生成日志文件
新增了一个springboot项目,通过idea 调试,并且在idea 的vm options中指定-Dlogging.configclasspath:logback-pro.xml 或者 -Dlogging.configclasspath:logback-dev.xml 都能正常生成对应的日志文件。 部署到测试环境以及生产环境,日志文件却…...

Kafka - 3.x 图解Broker总体工作流程
文章目录 Zk中存储的kafka的信息Kafka Broker总体工作流程1. broker启动后向zk中注册2. Controller谁先启动注册,谁说了算3. 由选举出来的Controller监听brokers节点的变化4. Controller决定leader选举5. Controller将节点信息上传到Zk中6. 其他Controller从zk中同步…...

APP自动化测试 ---- Appium介绍及运行原理
在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。 一、Appium介绍 1.Appium概念 Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS…...
学习模板发布
学习目标: 提示:这里可以添加学习目标 例如: 一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 搭建 Java 开发环境掌握 Java 基本语法掌握条件语句掌握循环语句 学习时间&#x…...
Hive 视图和索引
1.视图 1.1 简介 Hive 中的视图和 RDBMS 中视图的概念一致,都是一组数据的逻辑表示,本质上就是一条 SELECT 语句的结果集。视图是纯粹的逻辑对象,没有关联的存储 (Hive 3.0.0 引入的物化视图除外),当查询引用视图时,Hive 可以将视图的定义与查询结合起来,例如将查询中的过…...

EtherCAT主站SOEM-- 0 SOEM下载编译及文件功能介绍
0 介绍EtherCAT主站SOEM文件及主要功能函数 1. soem介绍:2 soem主要功能文件说明:3 soem下载链接4 编译soem4.1 Windows (Visual Studio):4.2 Linux & macOS: 该文档修改记录:总结 1. soem介绍: SOEM&…...
【Python机器学习】零基础掌握RFE特征选择
如何在数据分析中选出关键特征? 面对大量、高维度的数据,如何有效地选取关键特征以提高模型效率和准确度?这是数据分析领域中常见的问题。解决这个问题的一种方法就是递归特征消除(RFE)算法。 假设一个房地产公司希望预测房价,他们收集了很多关于房子的信息,如面积、房…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...