Https【Linux网络编程】

目录

一、为什么需要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.hqwc.cn/news/579080.html

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

相关文章

git基本操作二(小白快速上手)

1、前言 接上篇我们接着来继续讲 2、.gitignore忽略文件 创建一个.gitignore文件,并将其置于项目的根目录下,Git将自动识别并根据该规则忽略相应的文件和目录。 # 忽略所有的 .log 文件 *.log# 但跟踪所有的 build.log 文件 !build.log# 忽略所有的 /lo…

uprobe的介绍+运行情况,代码解释(用户层+内核层代码),修改内核层写法,将两个函数与bpf程序分离,去掉用户函数所在程序的符号表(strip,如何解决)

目录 uprobe 介绍 运行情况 代码解释 .bpf.c 源码 语法 SEC("uprobe") SEC("uprobe//proc/self/exe:uprobed_sub") .c 源码 语法 asm volatile (""); LIBBPF_OPTS(bpf_uprobe_opts, uprobe_opts); uprobe_opts.func_name up…

修改docker容器日志大小

docker-compose.yaml logging:options:max-size: "10m"docker run docker run -d \--name example-container \--log-opt max-size10m \--log-opt max-file3 \nginx:latestdocker daemon全局配置 /etc/docker/daemon.json 参考文档:https://docs.docker…

基于springboot实现月度员工绩效考核管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现月度员工绩效考核管理系统演示 摘要 科学时代的发展改变了人类的生活,促使网络与计算机技术深入人类的各个角落,得以普及到人类的具体生活中,为人类的时代文明掀开新的篇章。本系统为月度员工绩效考核管理系统&#xff0c…

给虚拟机配置静态IP并使用FileZIlla在虚拟机和Windows之间传输文件(ssh和ftp两种方法)

一、配置操作系统网络 🌸下面的步骤主要是配置虚拟机的静态IP,方便后续用 FikeZilla 在windows和虚拟机之间传输文件(否则用默认的ip分配方案为 DHCP ,每一次开机时的ip都是有可能不同的,这样就会导致每次远程连接都需要查看ip地址.&#xf…

ABAP AMDP 示例

AMDP 是HANA开发中的一种优化模式 按SAP的官方建议,在可以使用Open SQL实现需要的功能或优化目标的时候,不建议使用AMDP。而在需要使用Open SQL不支持的特性,或者是大量处理流和分析导致了数据库和应用服务器之间有重复的大量数据传输的情况…

Java JSON字符串相关问题

一、依赖包 <!--json包--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.15</version></dependency> 二、举例 1.实体对象转Json字符串 1.1 代码实现 Dog.java: pack…

HarmonyOS实战开发-Stage模型下Ability的创建和使用

介绍 本篇Codelab基于Stage模型&#xff0c;对Ability的创建和使用进行讲解。首先在课程中我们将带领大家使用DevEco Studio创建一个Stage模型Ability&#xff0c;并使用UIAbilityContext启动另一个Ability&#xff0c;然后借助Want&#xff0c;在Ability之间传递参数&#xf…

Autosar-EcuM配置详解(免费)-1

1.1创建EcuM模块 按以下步骤完成EcuM的创建。 创建完成后&#xff0c;在Bsw_Modules下面会生成EcuM模块&#xff0c;如下所示&#xff1a; 在工程根目录下会创建一个“EcucModuleConfiguration.arxml”文件&#xff0c;文件名字在上面第6个步骤上输入。后面所有EcuM的配置都将…

[OpenCV学习笔记]Qt+OpenCV实现图像灰度反转、对数变换和伽马变换

目录 1、介绍1.1 灰度反转1.2 图像对数变换1.3 图像伽马变换 2、效果图3、代码实现4、源码展示 1、介绍 1.1 灰度反转 灰度反转是一种线性变换&#xff0c;是将某个范围的灰度值映射到另一个范围内&#xff0c;一般是通过灰度的对调&#xff0c;突出想要查看的灰度区间。 S …

二、Java语法基础

1、Java语言的关键字、标识符及命名规范 1)java关键字 2)标识符 3)JAVA中的命名规范 包名的命名规范:域名.公司名称.项目名称.模块名称 类的命名规范:首字母大写,第二个单词的首字母大写,以此类推。 2、进制间的转换(二进制、十进制) 1)十进制->二进制 采用…

答题小程序功能细节揭秘:如何提升用户体验和满足用户需求?

答题小程序功能细节体现 随着移动互联网的快速发展&#xff0c;答题小程序成为了用户获取知识、娱乐休闲的重要平台。一款优秀的答题小程序不仅应该具备简洁易用的界面设计&#xff0c;更应该在功能细节上做到极致&#xff0c;以提升用户体验和满足用户需求。本文将从题库随机…