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

news2025/4/4 14:34:30

【面试经典题】

前言:

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. 证书机制: 通过第三方公证机构,向网站颁发证书,该证书里面就含有服务器的公钥。客户端首先向服务器请求证书,客户端拿到证书后进行校验,如果证书合法并且证书里的数据没有被篡改,就使用里面的公钥对对称密钥进行加密。
     

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

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

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

相关文章

ES性能优化最佳实践- 检索性能提升30倍!

Elasticsearch是被广泛使用的搜索引擎技术,它的应用领域远不止搜索引擎,还包括日志分析、实时数据监控、内容推荐、电子商务平台、企业级搜索解决方案以及许多其他领域。其强大的全文搜索、实时索引、分布式性能和丰富的插件生态系统使其成为了许多不同行…

C++求欧拉角(eigen库中暴露的一些问题)

不同顺序欧拉角转旋转矩阵对照公式 eigen库求欧拉角公式 分别试验eigen库自带的matrix.eulerAngles()函数,与根据上述公式推导的两种方法求欧拉角 eigen库求得欧拉角的范围一定是 x − > r o l l x->roll x−>roll方向在 [ 0 , π ] [0,π] [0,π]之间&am…

argparse模块介绍

argparse是一个Python模块:命令行选项、参数和子命令解析器。argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义了所需的参数,而 argparse 将找出如何从 sys.argv (命令行)中解析这些参数。argparse 模块还会自动生成…

实时数仓-Hologres介绍与架构

本文是向大家介绍Hologres是一款实时HSAP产品,隶属阿里自研大数据品牌MaxCompute,兼容 PostgreSQL 生态、支持MaxCompute数据直接查询,支持实时写入实时查询,实时离线联邦分析,低成本、高时效、快速构筑企业实时数据仓…

笔记本电脑识别不了刻录机,由于设备驱动程序的前一个实例仍在内存中,windows 无法加载这个硬件的设备驱动程序。 (代码 38)

目录 1 问题2 解决 1 问题 笔记本电脑识别不了刻录机,由于设备驱动程序的前一个实例仍在内存中,windows 无法加载这个硬件的设备驱动程序。 (代码 38) 笔记本电脑插入刻录机,一直识别不了; 右边点击属性 这里展示 由于设备驱动…

powerdesigner逆向mysql与pg生成er图

一、逆向mysql数据库 官网下载mysql的ODBC(开放数据库互连) 选择自己对应版本,我的power designer是32位的,需要选择32的ODBC进行下载,不然power designer会监测不到。 双击exe文件,安装ODBC 这个比较简单,就不阐述了…

nu1l-死亡ping命令攻略

book-nu1l docker 虚拟化技术 把传统的虚拟机堪称容器 依赖镜像启动容器,镜像可以理解为模板克隆的虚拟机,删除容器,对镜像没有影响 镜像在云端 本地要使用某个镜像,根据地址,直接从云端拉取 基本命令 # 查看系统…

day14_集合

今日内容 零、 复习昨日 一、集合框架体系 二、Collection 三、泛型 四、迭代 五、List(ArrayList、LinkedList) 零、 复习 throw和throws什么区别 throwthrows位置方法里面方法签名上怎么写throw 异常对象throws异常类名(多个)作用真正抛出异常对象声明抛出的异常类型 运行时…

【开发篇】一、处理函数:定时器与定时服务

文章目录 1、基本处理函数2、定时器和定时服务3、KeyedProcessFunction下演示定时器4、process重获取当前watermark 前面API篇完结,对数据的转换、聚合、窗口等,都是基于DataStream的,称DataStreamAPI,如图: 在Flink…

【Linux08-进程信号】信号的一生……

今天,带来Linux下进程信号的讲解。文中不足错漏之处望请斧正! 是什么 生活中的信号 例子: 红绿灯来电铃声老妈倒数321叫我起床外卖小哥叫我下楼拿外卖 理解: 过程:收到信号 → 分析信号 → 产生信号对应的行为信号不一定会被立即处理&…

Flutter——最详细(Scaffold)使用教程

Scaffold简介 相当于界面的主体(类似于安卓最外层PhoneWindow),组件的展示都必须依附于它。 使用场景: 每一个界面都是脚手架,通过它来进行架构实现,优美的布局效果。 属性作用appBar顶部的标题栏body显示整…

Qwt QwtPlotMarker标记类详解

1.概述 QwtPlotMarker类是Qwt绘图库中用于在图表上绘制标记的类。标记可以是垂直或水平线、直线、文本或箭头等。它可用于标记某个特定的位置、绘制参考线或注释信息。 以下是类继承关系图: 2.常用方法 设置标记的坐标。传入x和y坐标值,标记将被放置在…

红黑树--讲解以及详细实现过程

目录 红黑树理解红黑树概念红黑树性质 红黑树实现红黑树图解基础结构实现插入实现 红黑树理解 红黑树概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个…

六零导航页SQL注入漏洞复现(CVE-2023-45951)

0x01 产品简介 LyLme Spage(六零导航页)是中国六零(LyLme)开源的一个导航页面。致力于简洁高效无广告的上网导航和搜索入口,支持后台添加链接、自定义搜索引擎,沉淀最具价值链接,全站无商业推广…

前端(二十五)——前端实现 OCR 图文识别的详细步骤与示例代码

😁博主:小猫娃来啦 😁文章核心:前端实现 OCR 图文识别的详细步骤与示例代码 文章目录 简介确定使用的 OCR API创建前端界面添加图像上传功能发送识别请求和处理识别结果完善代码添加注释结论附录 简介 在现代应用程序中&#xff…

如何选择向量数据库|Weaviate Cloud v.s. Zilliz Cloud

随着以 Milvus 为代表的向量数据库在 AI 产业界越来越受欢迎,传统数据库和检索系统也开始在快速集成专门的向量检索插件方面展开角逐。 例如 Weaviate 推出开源向量数据库,凭借其易用、开发者友好、上手快速、API 文档齐全等特点脱颖而出。同样&#xff…

使用AOP切面实现日志记录功能

系列文章 1.SpringBoot整合RabbitMQ并实现消息发送与接收 2. 解析JSON格式参数 & 修改对象的key 3. VUE整合Echarts实现简单的数据可视化 4. Java中运用BigDecimal对字符串的数值进行加减乘除等操作 5. List<HashMap<String,String>&…

【Javascript】函数(变量作用域)

变量:全局变量,局部变量 全局变量 挂载到window对象上的 var a全局变量;console.log(a);var a全局变量;console.log(window.a);var a全局变量;在控制台里输入a也能打印a的值 局部变量 函数体内部声明的变量 var a全局变量;function test(){var b局部…

软考高级之系统架构师系列之UP、RUP、4+1视图、JAD、JRP、RAD

概述 软件工程是一个很庞杂的系统工程,而我们面对的软件需求也很复杂: 面对不同规模(复杂度,模块量,用户量,开发周期等等)的软件项目,人员储备不尽不同的开发团队也会采用不同的软…

数据可视化在行业解决方案中的实践应用 ——华为云Astro Canvas大屏开发研究及指南

本文主要探讨华为云Astro Canvas在数据可视化大屏开发中的应用及效果。首先阐述Astro Canvas的基本概念、功能和特性说明,接着集中分析展示其在教育、金融、交通行业等不同领域实际应用案例;之后,详细介绍使用该工具进行大屏图表创建的开发指…