Https【Linux网络编程】

news2024/11/25 3:04:41

目录

一、为什么需要https 

二、常见加密方法

1、对称加密

2、非对称加密

3、数据指纹

 三、选择什么加密方案?

方案一:对称加密(×)

方案二:双方使用非对称加密(效率低)

方案三:非对称加密+对称加密

中间人攻击

四、引入证书

五、数字签名

六、终级方案:非对称加密 + 对称加密 + 证书认证

七、HTTPS一定是安全的吗?


一、为什么需要https 

HTTP协议内容都是明文传输的,传输过程可能会经过很多中间设备(如一个局域网中的路由器,电脑连接手机热点,公共产所的wifi等),这些中间设备可以抓取我们的请求或响应,会导致信息泄露,消息篡改等信息安全问题,因此有了HTTPS。

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

二、常见加密方法

1、对称加密

加密和解密时使用相同的密钥。

特点:加密速度快,加密效率高 。

常见对称加密算法:DES、3DES、AES等

2、非对称加密

特点:解决密钥安全配送问题,但运行效率低。

通信双方各有一组密钥:公钥和私钥

公钥可公开,私钥必须保密,用公钥加密的密文必须用与该公钥配对的私钥解密。

接收方将自己的公钥公开给发送方。发送方使用接收方的公钥对数据进行加密,然后传输给接收方。即使在加密数据的过程中,接收方的私钥始终保密,因此无需对外公开。只有接收方拥有私钥可以解密数据。

常见非对称加密算法:RSA是使用最广泛的非对称密码算法。

3、数据指纹

对于一份明文数据,通过一种Hash算法(MD5),可以让其生成一个固定长度的,非常低概率发生冲突的固定长度的字符串(也叫数据摘要),具有唯一性,如果原文发生细微更改,生成的字符串都会有很大的不同,这就叫这份明文的数据指纹。

使用案例:

平时我们使用百度网盘的时候,可能会有看到秒传这样的现象,如何做到的呢?

假设有一个用户传了一部电影到百度网盘服务端,服务端会根据用诸如MD5这样的hash算法计算出它的摘要或者叫数据指纹,然后入库,当下一次另一个用户上传同样的一部电影时,经过计算发现其数据指纹对应的数据在服务端已经存在,就不需要再上层了,从而实现秒传。

 三、选择什么加密方案?

方案一:对称加密(×)

客户端和服务端双方约定好同一个密钥,但这并不靠谱。

1. 密钥分发困难:对称加密需要双方共享相同的密钥,如果密钥在传输过程中被攻击者截获,会导致加密效果失效。在服务端和客户端之间安全地传输密钥是一项挑战。

2. 密钥管理成本高:当客户端数量庞大时,需要为每个客户端分配一个唯一的密钥,密钥管理成本将大大增加。

方案二:双方使用非对称加密(效率低)

由于非对称密钥算法效率比对称密钥算法的效率低,所以我们还行再改进一下。

依旧有安全问题

方案三:非对称加密+对称加密

服务端具有公钥S和私钥S'

客户端发起请求获取服务端公钥S;

客户端形成一个对称密钥C,将C通过服务器端的公钥进行加密发送给服务器。服务器通过私钥S’进行解密获得对称密钥C。

之后双方就采用对称加密,这样只有传送对称密钥C时采用的是非对称密钥,其他时候都采用的是对称密钥,因此可以大大提高效率。

接近最佳方案,但依旧有安全问题

中间人攻击

上面的方案都有一个安全问题:如果在一开始就受到中间人攻击了呢?

1. 服务器具有非对称加密算法的公钥S,私钥S'
 2. 中间人具有非对称加密算法的公钥M,私钥M" 3. 客户端向服务器发起请求,服务器明文传送公钥S给客户端。
 4. 中间人劫持数据报文,提取公钥S并保存好,然后将被劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发给客户端。
5. 客户端收到报文,提取公钥M(自己当然不知道公钥被更换过了),自己形成对称秘钥X,用公钥M加密X,形成报文发送给服务器。

6. 中间人劫持后,直接用自己的私钥M'进行解密,得到通信秘钥X,再用曾经保存的服务端公钥S加密后,将报文推送给服务器。

7.服务器拿到报文,用自己的私钥S'解密,得到通信秘钥X 8. 双方开始采用$X$进行对称加密,进行通信。但是一切都在中间人的掌握中,劫持数据,进行窃听甚至修改,都是可以的

根本原因:客户端无法确定收到的含有公钥的数据报文,就是目标服务器发送过来的。

四、引入证书

服务端在使用HTTPS前,需要向CA机构领取一份数字证书,数字证书里含有申请者信息,公钥信息等。服务器将证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性。

怎么保证证书是真的,且没有被篡改过?看下面:

五、数字签名

签名:用签名者的私钥对数据摘要进行加密,就形成了一个签名,将加密后的数据摘要附加到原始数据上就形成了带有数据签名的数据,并将他们一同发送给接收方。

验证: 接收方收到两部分内容:数据摘要和原文;要对签名进行验证,首先要签名者的公钥解密得到数据摘要,再根据原文用相同的算法计算出数据摘要,比较俩个值,如果相同,则数字签名有效。

CA机构就是通过数字签名技术来帮助辨别CA证书的真伪。

六、终级方案:非对称加密 + 对称加密 + 证书认证

前面提到几种方案都有安全隐患即:客户端无法确定收到的含有公钥的数据报文,就是目标服务器发送过来的。

那么这个方案就可以解决这个问题:

客户端发起第一次请求时,服务端要将自己的CA证书(包括CA机构的认证签名,服务端的

公钥、域名等信息)响应给客户端。客户端收到证书后,用其内置的很多权威CA机构的公钥来验证签名(用公钥对数据摘要解密,再与计算根据明文计算出来的数据摘要进行比对),比对成功,则证明证书是可信的,也就是说证书上的服务端的公钥是可信的,由此就可以防范中间人攻击。之后客户端就可以用服务端的公钥来加密自己的对称密钥R,发送给服务端后,双方就可以通过对称密钥来进行通信。

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

1)篡改明文?篡改明文后客户端验证签名时会比对失败

2)掉包整个证书?中间人没有私钥,所以无法制作假证书,只能用真证书来掉包,但证书里面是有域名等信息的,客户端可以识别出来域名发生了变化。

 为什么签名不直接加密,而是要先hash形成摘要?

1)缩小签名密文长度,加快数字签名的签名和验证效率。

七、HTTPS一定是安全的吗?

不一定。

上面提到的中间人攻击本质是对客户端进行攻击,那如果客户端本身就是攻击者呢?

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

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

相关文章

深度学习十大算法之Diffusion扩散模型

1. 引言 扩散模型在近年来成为了热门话题,其火速蹿红主要归功于在图像生成领域的突破应用。尤其是一些从文本到图像的生成技术,它们成功地运用了扩散模型来创建令人惊叹的逼真图像。如果你听说过某个应用能够迅速且高质量地生成图像,那么很可…

【SpringBoot整合系列】SpirngBoot整合EasyExcel

目录 背景需求发展 EasyExcel官网介绍优势常用注解 SpringBoot整合EaxyExcel1.引入依赖2.实体类定义实体类代码示例注解解释 3.自定义转换器转换器代码示例涉及的枚举类型 4.Excel工具类5.简单导出接口SQL 6.简单导入接口SQL 7.复杂的导出(合并行、合并列&#xff0…

docker 共享网络的方式实现容器互联

docker 共享网络的方式实现容器互联 本文以nacos连接mysql为例 前提已经在mysql容器中初始化好nacos数据库,库名nacos 创建一个共享网络 docker network create --driver bridge \ --subnt 192.168.0.0/24 \ --gateway 192.168.0.1 mynet此处可以不指定网络模式、…

Python下载bing每日壁纸并实现win11 壁纸自动切换

前言: 爬虫哪家强,当然是python 我是属于啥语言都用,都懂点,不精通,实际工作中能能够顶上就可以。去年写的抓取bing每日的壁纸,保存到本地,并上传到阿里云oss,如果只是本地壁纸切换,存下来就行,一直想做个壁纸站点&…

Java代码基础算法练习-自定义函数之字符串连接-2024.03.30

任务描述: 写一函数,将两个字符串连接起来,然后在主函数中调用该函数实现字符串连接操作。 任务要求: 代码示例: package M0317_0331;import java.util.Scanner;public class m240330 {public static void main(Stri…

【Java】MyBatis快速入门及详解

文章目录 1. MyBatis概述2. MyBatis快速入门2.1 创建项目2.2 添加依赖2.3 数据准备2.4 编写代码2.4.1 编写核心配置文件2.4.2 编写SQL映射文件2.4.3 编写Java代码 3. Mapper代理开发4. MyBatis核心配置文件5. 案例练习5.1 数据准备5.2 查询数据5.2.1 查询所有数据5.2.2 查询单条…

全国青少年软件编程(Python)等级考试三级考试真题2023年12月——持续更新.....

青少年软件编程(Python)等级考试试卷(三级) 分数:100 题数:38 一、单选题(共25题,共50分) 1.一个非零的二进制正整数,在其末尾添加两个“0”,则该新数将是原数的&#xf…

Redis从入门到精通(二)Redis的数据类型和常见命令介绍

文章目录 前言第2章 Redis数据类型和常见命令2.1 key结构2.2 Redis通用命令2.3 String类型及其常用命令2.4 Hash类型及其常用命令2.5 List类型2.5 Set类型2.6 SortedSet类型2.7 小结 前言 在上一节【Redis从入门到精通(一)Redis安装与启动、Redis客户端的使用】中,…

【智能算法】猎人猎物算法(HPO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年,Naruei等人受到自然界动物猎食过程启发,提出了猎人猎物算法(Hunter-Prey Optimization, HPO)。 2.算法原理 2.1算法思想 HPO模拟…

国产AI大模型推荐(一)

文心一言 主要功能: 各种类型的问答、各种文本创作、推理与数学计算、写代码、聊天交流、图片生成等。 链接:文心一言 讯飞星火 特点: 内容生成能力:我可以进行多风格多任务长文本生成,例如邮件、文案、公文、作文、对…

剑指Offer题目笔记23(归并排序)

面试题77: 问题: ​ 输入一个链表的头节点,将该链表排序。 解决方案: ​ 使用归并排序。将链表分为两个子链表,在对两个子链表排序后再将它们合并为一个排序的链表。 源代码: /*** Definition for sin…

C语言:动态内存管理(二)

目录 前言 1.3 realloc​编辑 3、常见动态内存管理错误 3.1 对空指针的解引用操作 3.2 对动态开辟的空间进行越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态内存开辟的一部分 3.5 对同一块空间的多次释放 3.6 动态内存开辟之后忘记释放 总结 前…

前端三剑客 —— HTML (下)

目录 HTML 多媒体标签 Img*** a标签*** 第一种用法:超链接 第二种用法:锚点 audio标签 video标签 表格标签 带标题的表格 跨行跨列标签 表格嵌套 列表标签 ul --- 它是无序列表标签 ol --- 它是有序列表 dl --- 它是数据列表 表单标签***…

2024.3.30学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p295-p314 super关键字 super代表父类的引用,用于访问父类的属性、方法、构造器 super细节和语法 访问父类的属性,但不能访问父类的private属性 super.属性名 访问父类的…

暴力破解pdf文档密码

首先安装pdfcrack工具包 apt install pdfcrack 默认密码字典存储在/usr/share/wordlists里,是gz文件,将它解压并copy到pdf目录 然后使用pdfcrack破解 密码在最后一行user-password的单引号里

最优算法100例之17- 环形连续子数组的最大和

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 给定一个长度为 nn 的环形整数数组,请你求出该数组的 非空 连续子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开…

Linux重点思考(下)--shell脚本使用以及内核开发

Linux重点思考(下)--shell脚本使用和组合拳 shell脚本的基础算法shell脚本写123...n的值,说思路Shell 脚本用于执行服务器性能测试的死循环Shell 脚本备份和定时清理垃圾文件 shell脚本的内核开发正向映射反向映射 shell脚本的基础算法 shell脚本写123……

解决MySQL幻读?可重复读隔离级别背后的工作原理

什么是当前读和快照读 当前读:又称为 "锁定读",它会读取记录的最新版本(也就是最新的提交结果),并对读取到的数据加锁,其它事务不能修改这些数据,直到当前事务提交或回滚。"sele…

linux服务器安装mysql8

1.下载MYSQL 近几天在linux服务器已安装过2次mysql8,亲测有效,没有遇到任何问题,文档已写的很清楚,按步骤来即可。如果按文档有遇到要使用yum命令的话,需要服务器开通外网。 1.1官网下载 进入官网下拉到最后&#x…

【查看显卡信息】如何查看nvidia-smi命令后的显卡信息

【查看显卡信息】如何查看nvidia-smi命令后的显卡信息 【先赞后看养成习惯】求点赞关注收藏!!!😊 一般我们用nvidia-smi进行查看当前电脑或者服务器的显卡信息,出来一大堆内容,很多小白根本看不懂&#xf…