【计算机网络】HTTPS——更安全的HTTP通信(个人笔记)

学习日期:2024.6.26

内容摘要:HTTPS存在的意义、特点和工作方式


HTTP的缺点——易窃听、伪装、篡改

在Web及网络基础中,我们已经知道了网页是怎么打开的,HTTP确实是一个相当优秀和方便的协议,但HTTP也有很多不足,最严重的不足就是——不安全。

因为HTTP属于TCP/IP协议族,其工作机制决定了在通信时,通信线路上的设备几乎不可能全部是个人的私有物。因此,通信可能被窃听、篡改或伪装。

我们来举个比较生动的例子,HTTP协议通信就是你坐在教室最左边,想把纸条传给你最右边的好哥们,叫他放学超光速去操场抢个篮板,显然你要通过一堆同学把你的纸条递过去。

易窃听

因为HTTP不具备加密功能,你传出去的纸条是明文(就是直接写的),传输路上的人可能打开来看你的纸条(虽然一般人不会),这就是传输被窃听了。

当然,你可以通过其他协议或者接层加密你的信息。(用密码来写你的小纸条)即使如此,通信也会被窥视到加密的内容,加密只是让人难以破解加密信息的含义,而不能阻止对方看到这次通信的报文信息本身。

易伪装

HTTP协议中的请求和响应不会对通信方的身份进行确认,也就会存在“跟我通信的服务器是否就是我申请通信的服务器,返回的响应是否真的返回到实际提出申请的客户端”这一问题。这就存在被伪装的隐患。听起来可能有点绕,还是拿传纸条举例子。

因为你们教室很大,你看不到你哥们,所以你也不知道你哥们到底有没有收到信息。即使你收到了回复,建立了通信,你也不确定回复你的到底是你哥们还是你们女班长,还是隔壁班的那个一米九体育生。

这可能导致以下隐患:

①无法确定请求/响应发送至目标的Web服务器/客户端是不是我期望的服务器/客户端,可能是伪装的服务器/客户端。

②无法确认通信的对方是否具有访问权限,因为某些服务器上保存的重要信息,只能开放给有特定权限的客户端访问。

③无法判断请求来自何方,出自谁手。

④即使是无意义请求也会照单全收,海量无意义请求下的Dos攻击(Denial of service,拒绝服务攻击),会让服务器瘫痪。

易篡改

HTTP协议无法证明通信的报文完整性,因此在请求和响应送出后,直到对方收到前这段时间,信息即使被篡改也无法知悉。假如有一个坏同学在你和你哥们通信的路上,他偷偷篡改你们俩的通信内容,你们也不会知道,这种攻击叫做中间人攻击。(Man in the middle attack,MITM)


HTTP+加密+认证+完整性保护=HTTPS

为了解决以上这些问题,需要在HTTP中加入加密处理和认证等机制,我们把加入这些之后的HTTP称为HTTPS(HTTP Secure)。

HTTPS并非是应用层的一种新协议,而是HTTP的套壳,HTTP的通信接口部分由SSL(Secure Socket Layer,安全套接层)和TLS(Transport Layer Security,安全传输层协议)代替而已。

通常,HTTP直接和TCP通信,当使用SSL时,则是先和SSL通信,再由SSL和TCP通信。

SSL是独立于HTTP的协议,应用层的其它协议如SMTP和Telnet等都可以配合使用。

HTTPS的加密

在传输如身份信息,银行卡号等等私密内容时,我们显然不希望它们泄露,而HTTPS就会对通信进行加密。SSL采取一种被叫做“公开密钥加密”的加密方式。

加密技术基础

现代加密技术的加密方法一般是公开的,而密钥是保密的,通过这种方法来保证加密方法的安全性,加密和解密都会用到密钥,一旦密钥被攻击者获得,加密就失去了意义。

从共享密钥加密到公开密钥加密

加密和解密用同一个密钥的加密方式称为共享密钥加密,也称对称密钥加密,以共享密钥方式加密时,必须将密钥也发送给对方。但是这会带来一个问题——如何保证密钥能安全送达不被窃听?再加密一层的话,那密钥的密钥被窃听呢?

为了解决这一问题,我们引入了公开密钥加密,公开密钥加密使用一对非对称的密钥,即公开密钥和私有密钥,简称公钥和私钥。私钥必须保密,而公钥可以公开给任何人,随意发布,不怕攻击者窃听。

公开密钥于其说是“钥匙”,不如说像“”,在用公开密钥加密方式进行加密通信时,发送者首先用对方的公开密钥进行加密,受信方收到后,再使用自己的私钥进行解密。

公钥就是随意分发出去的锁,即使有人窃听,把“锁”偷去,也打不开包裹,而与你通信的人用你的锁把信息加密好,你再用自己的私钥打开,就完成了安全通信。

公开密钥方式虽然好,但是与共享密钥加密方式相比更加复杂,处理速度也更加的慢。因此,HTTPS一般是通过二者结合的方式,使用公开密钥加密方式来交换共享密钥,再通过共享密钥来通信,这样就能实现安全快速的通信。

证明公开密钥正确性的证书

遗憾的是,公开密钥加密方式也不是完美无缺的,因为其是公开传输的,我们也不知道公开密钥是否遭到了篡改,无法证明收到的公开密钥就是接收方的公开密钥。如果这把“锁”不是接收方的锁,而是被攻击者偷偷篡改成攻击者的“锁”了,那我们的加密就形同虚设了。

为了解决这一问题,可以使用CA(Certificate Authority,数字证书认证机构)和其相关机关颁发的公开密钥证书

数字证书认证机构是服务器端和客户端都比较信赖的第三方机构。首先,服务器的运营人员会向数字认证机构提出公开密钥的申请,数字认证机构在仔细判明申请者身份后,会对已申请的公开密钥做数字签名,并且将其放入公钥证书后绑定在一起(公钥和服务器对应绑定)。

在通信时,服务器端会将这份公钥证书(又称数字证书,或直接简称证书)发送给客户端,以公开密钥加密方式通信,而客户端则会向CA机构核实,以CA机构的公开密钥进行通信,确认服务器端发送的密钥就是服务器之前登记的公开密钥,一旦核实成功,客户端就能确定:①认证服务器的CA机构是真实有效的机构 ②服务器的公开密钥是值得信赖的。

确实有点绕。我还是用锁举例来帮助理解:我要确认这把锁是不是被人替换了,就去找一个靠谱的公司,这个公司把所有靠谱服务器的锁都在上面登记了。我每次通信的时候就先去公司查一查锁的目录,这把锁是不是对方的那把,如果是就说明没问题。

但是还有一个问题(真服了),在使用这个方式认证时,客户端需要和CA机构通信,那么如何保证客户端和CA机构之间的通信是安全的呢?如果CA机构的公钥也被篡改了呢?为了解决这个问题,现代的浏览器一般会在内部直接植入常用认证机关的公开密钥。(直接不用通信,一步到位最安全)

其它证书

EV SSL证书(Extended Validation)可以验证网站背后的公司是否真实存在。

而客户端也有对应的客户端证书,可以让服务器安全验证客户端的公开密钥,但是日常生活中,因为客户端证书需要单独付费购买,而且针对客户端的伪装确实比较少见,事实上只有少部分高保密要求的服务如网上银行或者保密单位等才会使用。

不通过权威的第三方机构,也可以有证书,这就是自签名证书,显然,因为不通过权威机构,这个服务器证书在网上没什么大用,浏览器在访问该服务器时,会显示“无法确认连接安全性”,“该网站的安全证书存在问题”等,来提醒用户。(总是“坚持访问”真的有风险!!)


为什么不一直用HTTPS?

通过本章节的学习,我们大概已经能猜到原因了——加密通信实在是太复杂了。HTTPS通信,证书是必须的,而证书需要向CA机构花钱购买,并不便宜,对于很多服务器和个人网站来说非常不划算。

而且HTTPS的加密解密过程会消耗相当多的资源,导致通信速度变慢的同时服务器负载会变大,尤其是那些访问量较大的Web网站,加密和解密占用的消耗很大。对于一些没有那么重要的通信,直接用HTTP是更合理的选择

你确实可以用密码写一张小纸条,再把它放在一个结实盒子里,然后用你哥们的锁把它扣上(记得确认一下是不是你哥们的锁),然后把盒子递过去,等你哥们用他的钥匙打开,回复你,再用你的锁扣上,这样确实很安全。

但你不会,你只会直接在纸条上写“放学速抢操场篮球架”,然后拜托旁边的同学递过去,毕竟,你只是想约哥们打球,你要传输的信息并不是你的身份证号和银行卡密码。


 内容总结自人民邮电出版社《图解HTTP》

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

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

相关文章

【操作系统期末速成】 EP04 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言🚀🚀🚀二、正文:☀️☀️☀️2.1 考点七:进程通信2.2 考点八:线程的概念2.3 考点九:处理机调度的概念及原则2.4 考点十:调度方式与调度算法 一、前言🚀…

排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)

欢迎来到我的Blog,点击关注哦💕 前言 排序是一种基本的数据处理操作,它涉及将一系列项目重新排列,以便按照指定的标准(通常是数值大小)进行排序。在C语言中,排序算法是用来对元素进行排序的一系…

FPGA 690T NVME高速存储设计

高速存储设计会有各种需求的考虑,那么对应的方案也不完全相同,这篇文章出一期纯FPGA实现的高速存储方案。用纯fpga实现高速存储板卡有易国产化,功耗低和体积小等特点,缺点就是灵活性不是很强,实现标准ext4和nfs文件系统…

计算机的错误计算(十六)

摘要 计算机的错误计算(十五)中历史事件给我们的启示或警示。 计算机的错误计算(十五)介绍了历史上发生的一些事件。从这些事件我们可以得到一些启示或警示。 若不是油气平台的沉没,设计者会得出精度低了吗&#x…

信息盲盒系统设计

信息盲盒系统是一种结合了随机性和趣味性的信息传递和接收方式,类似于实体盲盒的概念,但在数字领域应用。这种系统通常用于增加用户参与度、提升用户体验或作为营销策略的一部分。设计一个信息盲盒系统需要考虑以下几个关键要素: 1. 定义目标…

数据仓库建模基础理论-01-为什么需要数据建模?

一、什么是数据模型? 数据模型是数据库的基础结构,用于描述和组织数据的方式。 它不仅是数据库的底层结构,还是一个概念性工具,帮助理解数据的含义和关系。 数据模型包括数据本身、数据之间的关系、数据的语义(含义和…

C++ | Leetcode C++题解之第206题反转链表

题目: 题解: class Solution { public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) {return head;}ListNode* newHead reverseList(head->next);head->next->next head;head->next nullptr;return newHead;} …

在Ubuntu 16.04上安装和配置GitLab的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 GitLab CE(Community Edition)是一个开源应用程序,主要用于托管 Git 仓库,并提供额…

AI在创造还是毁掉音乐之论文

AI在创造还是毁掉音乐? 简介:最近一个月,轮番上线的音乐大模型,一举将素人生产音乐的门槛降到了最低,并掀起了音乐圈会不会被AI彻底颠覆的讨论。短暂的兴奋后,AI产品的版权归属于谁,创意产业要…

一秒记单词:音通义通,一秒牢记

一秒记单词,从小学到高中,一秒牢记 一、小学生记单词,快速突破 1.1 好的开始,是成功的一半 sun n.太阳 【通】尚 moon n.月亮 【通】母恩 mother n.母亲,妈 【通】妈汁 sea n.海,大海 【通】细 sand …

【MySQL基础篇】SQL指令:DQL及DCL

1、DQL DQL - 介绍 DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据表中的记录。(在MySQL中应用是最为广泛的) 查询关键字:SELECT DQL - 语法 SELECT 字段列表 FROM 表名列表 WHER…

【人工智能学习之图像操作(六)】

【人工智能学习之图像操作(六)】 Hough变换直线检测圆检测 图像分割 Hough变换 在图像处理中,霍夫变换用来检测任意能够用数学公式表达的形状,即使这个形状被破坏或者有点扭曲 直线检测 import cv2 import numpy as np image …

利用微信开放标签<wx-open-launch-weapp>在H5中跳转微信小程序报错完美的解决方案

一、报错&#xff1a; [WXTAG] [JSCORE] The slot <template> or <script type"text/wxtag-template"> of <wx-open-launch-weapp> is missing 二、源码 官方源代码如下&#xff0c;<script type"text/wxtag-template"></sc…

美团外卖搜索基于Elasticsearch的优化实践--图文解析

美团外卖搜索基于Elasticsearch的优化实践–图文解析 前言 美团在外卖搜索业务场景中大规模地使用了 Elasticsearch 作为底层检索引擎&#xff0c;随着业务量越来越大&#xff0c;检索速度变慢了&#xff0c;CPU快累趴了&#xff0c;所以要进行优化。经过检测&#xff0c;发现…

gcop:简化 Git 提交流程的高效助手 | 一键生成 commit message

&#x1f496; 大家好&#xff0c;我是Zeeland。Tags: 大模型创业、LangChain Top Contributor、算法工程师、Promptulate founder、Python开发者。&#x1f4e3; 个人说明书&#xff1a;Zeeland&#x1f4e3; 个人网站&#xff1a;https://me.zeeland.cn/&#x1f4da; Github…

[SAP ABAP] 数据字典

ABAP数据字典是定义和管理数据库对象的工具 系统的所有全局数据类型以及数据库表结构等都需要在数据字典中创建和维护(数据字典中的对象对所有ABAP程序都是全局的) 通过数据字典&#xff0c;我们可以把数据库对象管理好&#xff0c;后续才能顺利的进行功能开发&#xff0c;SA…

华为面试题及答案——大数据

(1)namenode内存满了,如何进行扩容,调什么参数。 1. 增加 NameNode 的内存 在 hadoop-env.sh 文件中,可以增加 JVM 分配给 NameNode 的内存。通常是在 HADOOP_NAMENODE_OPTS 中增加 -Xmx 参数来增加最大堆内存。 export HADOOP_NAMENODE_OPTS="-Xmx8g -Xms4g ${HA…

集合,Collection接口

可动态保存任意多个对象&#xff0c;使用比较方便 提供了一系列方便操作对象的方法&#xff1a;add&#xff0c;remove&#xff0c;set&#xff0c;get等 使用集合添加删除新元素&#xff0c;代码简洁明了 单列集合 多列集合 Collection接口 常用方法 List list new Arra…

设计模式详解(一)——策略模式

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型的设计模式&#xff0c;它允许你定义一系列算法&#xff0c;然后将它们封装起来&#xff0c;使它们可以相互替换。这样做的好处是&#xff0c;你可以动态地选择要使用的算法&#xff0c;而不必在运行时进行检查或…

多媒体基础

笔者按&#xff1a; 昨日复习的信息网络安全约莫是挂了&#xff0c;常言道&#xff1a;知耻而后勇。诚如斯言 于是决心多媒体是不能再挂了&#xff0c;不然直接变成xxx之流&#xff0c;自增笑耳 语雀链接&#xff1a;多媒体基础 一.多媒体计算机概述 媒体&#xff1a;承载信息…