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

【计算机网络】什么是HTTPS?HTTPS为什么是安全的?

【面试经典题】

前言:

HTTP最初的设计就是用于数据的共享和传输,并没有考虑到数据的安全性,如窃听风险,篡改风险和冒充风险。HTTPS是在 HTTP 的基础上引入了一个加密层。HTTPS通过数据加密,数据完整性检验和身份认证有效的保证了数据传输的安全性。HTTP默认端口号80,HTTPS默认端口号是443。是接下来说说这些方法具体是咋实现的。

HTTPS:这里的S指的是TLS(前身是SSL,后来更名了)传输层安全协议。可以理解为HTTPS=HTTP+TLS。TLS是一种安全性协议。旨在保障通信数据的保密性,完整性,真实性。TLS位于应用层和传输层之间。 

TLS的发展历程

    

HTTP为什么不安全?

互联网上任何数据包的传输,都需要经过许许多多的网络设备如路由器等,如果其中一台设备是恶意的,或者被恶意的人劫持(如黑客),那传输的数据就可能会被窃取或者修改。并且HTTP是明文传输的,传输的数据没有进行任何加密。数据就会被轻易窃取。并且数据没有经过任何的校验,要是数据被篡改,也无法感知。并且通信双方也没有进行身份认证,就会存在通信对象可能不是目标对象的情况,如黑客冒充成客户端或者服务器端与对方进行交互。

综上所述:HTTP存在以下三种安全风险:

  1. 窃听风险
  2. 篡改风险
  3. 冒充风险

HTTPS的工作过程

对于如何解决第一种风险,我们首先能想到的是进行加密,加密有两种,对称加密和非对称加密。

1.使用对称加密

这种对称加密使用同一种秘钥,秘钥是由客户端这边生成的,不同的客户端秘钥不同,然后向服务器发送,并于服务器约定使用这个秘钥传输。秘钥既可以加密也可以解密,虽然数据传输进行了加密,但秘钥在传输过程中并没有被加密,就会容易被截获,截获的人就可以通过秘钥解密数据,造成风险。


2.使用非对称加密

如上图所示,加密过程共有四步: 

  1. 首先浏览器向服务器发送获取公钥的请求,
  2. 服务器收到请求返回自己的公钥,
  3. 浏览器收到公钥后,将请求数据和公钥通过加密算法进行加密生成密文,然后发送给服务器。
  4. 服务器收到密文后,用私钥和密文通过解密算法获得明文数据,然后服务器又将响应数据使用私钥加密后发给浏览器,浏览器收到密文再通过公钥进行解密。

这种加密显然优于第一种,非对称加密使用一对秘钥,公钥和私钥,公钥是公开的,私钥是仅服务器拥有的。非对称加密的特点是通过公钥加密的密文必须由私钥解密,通过私钥加密的密文必须由公钥解密。但是纯使用非对称加密这种也有缺点,一是效率太慢(因为涉及到复杂的数学运算)

二是传输过程中公钥是可以被截获的,并且第四步服务器返回响应是通过私钥加密的,截获公钥的不法分子就能够通过公钥解密。


3.使用非对称加密+对称加密

如上图所示,非对称加密过程共有五步:

  1. 浏览器向服务器发起获取非对称加密公钥的请求。
  2. 服务器收到请求返回自己的公钥。
  3. 浏览器将对称加密秘钥使用公钥加密后发送给服务器,服务器收到密文使用自己的私钥解密后获得对称加密秘钥。
  4. 浏览器将请求数据使用对称加密秘钥加密后发送给服务器。
  5. 服务器使用刚才获得的对称秘钥对密文进行解密,得到请求数据。服务器根据请求处理数据,服务器将响应数据使用对称秘钥加密后发给浏览器,浏览器使用对称秘钥解密后获得响应。

非对称加密主要用来传输对称加密的秘钥,而不是传输业务数据。传输业务数据交给对称加密。这样就算不法分子能够拿到公钥,也无济于事。我们的目标是让对称加密的秘钥安全的发送给服务器。发送过去后,剩下的数据传输就全部用秘钥进行加密解密。总的来说就是两种加密方式的加密对象不同。作用时间不同。这样做就可以有效防止窃听风险。但还不够,魔高一尺道高一丈。如果黑客冒充服务器并伪造公钥该咋办?

非对称加密为什么要引入对称加密?

因为非对称加密/解密,运算成本是比较高的,运算速度也比较慢;而对称加密运算成本低,速度快。上文中单单使用对称加密不安全是因为秘钥在传输过程中没有加密,容易被截获。即使用对称加密的要害是传输秘钥。如果我们使用非对称加密进行传输对称秘钥,然后在后面的数据传输中均使用对称加密。这样相互配合,就可以在保证安全的同时,效率也提高。如果整个过程都是用非对称加密传输,传输效率会大打折扣。


3.1详解冒充风险

不法分子是如何冒充的?

客户端向服务器请求公钥后,服务器会返回一个公钥,但在这个中间,公钥存在被截获的风险,黑客这边提前自己也生成一对公钥和私钥,截获后黑客就可以将公钥替换成自己的。但是客户端不知道,就会拿着黑客提供的公钥进行加密,然后传给服务器,中间又会被黑客截获,由于公钥是黑客的,那自然黑客手中的秘钥就能对它解密,这个过程中黑客就获得了秘钥,这时通信双方并没有正式进行数据通信,黑客继续伪装,使用之前截获的服务器的公钥(不是伪造的,如果这里伪造,数据传到服务器那边是解不开的)对秘钥加密,发送给服务器。服务器使用私钥解密,于是双方就约定使用这个秘钥进行数据传输了,殊不知秘钥已经被黑客截获了。后续黑客只需要通过秘钥就能轻松地获取数据了。这个过程的关键是秘钥被黑客给截取了。


4.使用证书机制

解决上述冒充问题的办法就是进入公证机构。在客户端和服务器起初建立连接时,服务器就给客户端返回一个证书。这个证书就好比人的身份证,用来作为网站的身份标识。而每搭建一个 HTTPS 网址时都需要在认证机构申请一个证书。

证书含有的重要信息:

  • 证书发布机构
  • 证书有效期
  • 公钥(服务器的公钥)
  • 证书所有者
  • 签名

即在搭建服务器时,服务器会去公证机构申请证书并提交一系列材料。认证成功后,公证机构会给这个服务器颁发证书(证书中就含有公钥)。接下来每次客户端访问服务器时,都会先请求服务器的证书,服务器返回证书给客户端。接下来分两步进行检验:

第一步:检验证书是否合法

万一证书是伪造的,校验证书方式有:

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

证书检验通过后,进行检验证书中的数据是否被篡改过。

第二步:检验证书中数据是否被篡改

目的是为了检验公钥是否被修改过,进行数字签名(其实就是被加密后的校验和), 这里的校验和就是把证书中所有数据的每个字节带入公式就会算出一个结果数字,这个数字就是校验和。为了防止该校验和又被修改,我们对校验和进行了加密。这个加密是由公正机构完成的,公证哪个机构那边也有一对公钥和私钥,其中公钥分发给各个客户端,私钥用来加密校验和。现如今我们的操作系统上已经拥有许多知名认证机构的公钥,客户端收到证书并确认证书无误后,开始使用公钥解密获得检验和(一串数字),同时客户端这白牛也用相同的公式将证书中的数据进行计算得出一个校验和,与解密后的校验和对比,以此来最终确认证书有没有被篡改过。通过后就可以开始进一步传输秘钥,传输数据了。解决冒充问题的关键就是验证这个证书中携带的服务器的公钥是否被修改过。 


常见的计算校验和的算法有MD5 和 SHA,以下以 MD5 为例,介绍其特点:

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

由于 MD5 这样的特性,因此可以认为如果两段数据的 MD5 值相同,则这两段数据相同。

总结:

  1. 对称加密:由客户端生成的对称密钥,用于对传输的数据进行加密,需要将该对称密钥告知给服务器。
  2. 非对称加密: 服务器给客户端提供一个公钥(私钥自己持有),将公钥传发送给客户端,客户端使用公钥对对称密钥进行加密,将密文传送给服务器。
  3. 证书机制: 通过第三方公证机构,向网站颁发证书,该证书里面就含有服务器的公钥。客户端首先向服务器请求证书,客户端拿到证书后进行校验,如果证书合法并且证书里的数据没有被篡改,就使用里面的公钥对对称密钥进行加密。
     

通过上面三种方式的结合,就可以保证传输过程中的安全了。

相关文章:

【计算机网络】什么是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 &#xff1…...

在声明和定义的一些小坑

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)。 对于整数除法&#xff0c…...

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&#xf…...

学习模板发布

学习目标: 提示:这里可以添加学习目标 例如: 一周掌握 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)算法。 假设一个房地产公司希望预测房价,他们收集了很多关于房子的信息,如面积、房…...

R语言的极值统计学、分位数回归、机器学习方法

受到气候变化、温室效应以及人类活动等因素的影响,自然界中极端高温、极端环境污染、大洪水和大暴雨等现象的发生日益频繁;在人类社会中,股市崩溃、金融危机等极端情况也时有发生;今年的新冠疫情就是非常典型的极端现象。研究此类…...

【SpringCloudNetflix】一图理解Spring Cloud Netflix解决了那些微服务问题?

什么是微服务理解: SpringCloudNetflix解决的问题理解: SpringCloudNetflix核心点: 注册中心:Eureka负载均衡:Ribbon、Feign服务熔断:Hystrix服务降级:Hystrix服务监控:Hystrix Da…...

C++环境配置【学习笔记(一)】

文章目录 1、安装 VS Code 插件2、VS Code SSH远程连接Ubuntu主机3、编写py程序及 debug4、编写C程序5、C程序的 debug6、附录:vs code 中变量解释 C开发工具:Visual Studio Code 下载地址: 地址 其中本文将介绍使用 VS Code ssh 远程连接 a…...

Python数据结构——树

树(Tree)是一种重要的数据结构,它在计算机科学中被广泛应用,用于构建层次结构、组织数据和解决各种问题。本文将详细介绍Python中树数据结构的使用,包括二叉树、二叉搜索树、平衡二叉树等,并提供示例代码来…...

Simulink和GUI联合使用

1、内容简介 略 9-可以交流、咨询、答疑 2、内容说明 Simulink和GUI联合使用 Simulink、GUI、参数传递 3、仿真分析 4、参考论文 略...

【0基础学Java第一课】-- 初始Java

目录 1. 初识java1.1 Java是什么1.2 Java应用领域1.3 Java语言发展简史1.4 Java语言特性1.5 JRE与JDK1.6 Java开发环境1.6.1 安装JDK1.6.2 配置环境变量 1.7 初始Java中main函数1.7.1 JDK、JRE、JVM之间的关系 1.8 注释1.9 标识符1.10 关键字 1. 初识java 1.1 Java是什么 Jav…...

osg3.4的插件及功能

OpenSceneGraph(OSG) 学习之 核心结构(基础篇)-CSDN博客 OSG源码中主要包含17个库,每个库的功能如所示表 1 OSG核心库功能...

『力扣刷题本』:轮转数组

一、题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,…...

Java关于实例对象调用静态变量和静态方法问题

直接去看原文 原文链接:Java关于实例对象调用静态变量和静态方法问题_java对象可以调用static方法吗_骑个小蜗牛的博客-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 实例…...

【开源】基于SpringBoot的海南旅游景点推荐系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…...