Linux网络编程:详解https协议

目录

一. https协议概述

二. 中间人截获

三. 常见的加密方法

3.1 对称加密

3.2 非对称加密

四. 数据摘要和数据签名的概念

五. https不同加密方式的安全性的探究

5.1 使用对称加密

5.2 使用非对称加密 

5.3 非对称加密和对称加密配合使用

六. CA认证 

七. 总结


一. https协议概述

在早期的网络中,传输数据一般采用http协议。但是,无论是用GET方法通过url传递数据,还是使用POST方法通过报文正文传递数据,都是明文传送数据,只要是明文传送数据,那就是不安全的,在传输过程中就很容易被中间人截获,造成信息泄露或者信息被篡改。

结论:http采用明文传递数据,不具有安全性。

为了解决http协议明文传输数据的安全性问题,就需要对数据进行加密处理,加密是在应用层实现的,将加密数据在网络中传输的协议,即为https协议。相较于http协议,https协议更具有安全性,图1.1为https协议工作方式的图解。

结论:https协议传输加密数据,安全性更有保证。

图1.1 https协议工作原理

二. 中间人截获

在早期采用http协议传输数据时,有时候会存在运营商截获现象,一个最典型的场景是,我们希望下载软件A,但是使用软件A的下载链接下载后,发现实际上下载的是软件B。造成这种现象可能得原因之一,就是运营商在网络中截获的数据信息,发现了软件A的下载链接,将软件A得下载链接替换为软件B的下载链接,就造成了希望下载的软件与实际下载的软件不同的现象。

在这种场景下,运营商充当的就是中间人,在网络中截获并篡改数据

在公共场所中,我们常会用到免费WIFI,这其实就是安全隐患,提供免费WIFI的路由器等设备,都有可能截取到用户发送的数据,造成信息泄露。

图1.2 中间人截获并篡改数据的原理

三. 常见的加密方法

3.1 对称加密

  • 对称加密仅使用一个秘钥key,加密和解密都使用这一把秘钥,这种加密解密的方法称为对称加密,也称为单秘钥加密。
  • 常见的对称加密算法:DES,3DES,Blowfish。
  • 对称加密的特征:算法简单,加密解密速度快、效率高。

通过按位异或的方式加密解密,就是最简单的一种对称加密方式。如,原文数据a=2023,秘钥key=8888,那么a加密后的数据c就变为了c=a^key=9567,使用同一把秘钥key对密文数据进行解密获取原文数据,a=c^key=2023。

3.2 非对称加密

  • 对称加密使用两把秘钥配对使用,一把公钥一把私钥,公钥向全网公开,私钥则是私密的。当客户端拿到公钥时,可以使用公钥进行加密,服务端在获取到加密后的信息后,通过秘钥进行解密,从而获取原始的明文数据。
  • 公钥和私钥,一把用于加密一把用于解密,可以用公钥加密私钥解密,反过来使用私钥加密公钥解密亦可。
  • 常见的非对称加密算法:RSA、DSA、ECDSA。
  • 非对称加密的特点:加密的可靠性依赖于秘钥、公钥以及算法的可靠性和复杂度,由于其算法复杂,因此加密和解密效率较低。

四. 数据摘要和数据签名的概念

数据摘要:

  • 数据摘要,就是通过哈希算法,将原文转换为一定长度的密文,即使非常小幅度的改变原文,通过哈希算法生成的密文差别也会非常大。
  • 通过哈希算法生成的数据摘要,严格来说不能算是一种加密方法,因为没有对应的解密手段,即:原文生成密文很容易,但是如果要通过密文破解原文,难度则非常之大。
  • 常见生成数据摘要的哈希算法:MD5、SHA256、SHA512。
  • 数据摘要,也被称为数据指纹。

数据签名:

  • 通过特点的秘钥对数据摘要加密生成的密文,被称为数据签名。
  • 数据签名,主要用于认证数据的合法性,保证客户端接收到的数据不会被中间人篡改(见第六章)。

五. https不同加密方式的安全性的探究

5.1 使用对称加密

使用对称加密时,客户端和服务器要事先协商秘钥,客户端和服务器在向网络中发送数据时,都要实现通过秘钥加密,这样中间人在网络中截获到的数据就是被加密后的数据,中间人拿不到秘钥,也就无法破解密文获取原文数据。

对称加密要保证安全性,就必须为每个客户端都单独维护一个秘钥,因为如果使用相同的秘钥,那么秘钥就会广泛分布在网络设备中,黑客就可以很容易的获取到秘钥,也就无法保证安全性,而为每个客户端都维护独立的秘钥成本很高。

那么如果客户端和服务端在进行通信之前,事先协商秘钥呢?这样也是不可行的。因为双方协商的秘钥需要通过网络进行传输,而秘钥传输要通过明文进行,如果黑客截获了秘钥,那么后续传输的数据就很容易被黑客截获并破译。

那么如果将双方协商的秘钥再用另一把秘钥加密呢?对秘钥进行加密的秘钥要需要事先通过明文传送让通信双方获取,这样本质上与上段所提到的不安全场景没有区别,只不过是多了一层而已。

图5.1 对称加密实现协商秘钥不安全的原因

5.2 使用非对称加密 

非对称加密要用到一把公钥C和一把私钥S,,将公钥C公布于网络中,假设客户端使用公钥C加密,那么如果黑客在网络中截获了客户端加密后的信息,由于没有私钥,就无法破译原文,这样就可以基本保证客户端发送给服务端数据和安全性。但是服务器向客户端发送数据时,通过私钥加密,客户端就需要公钥来解密,由于公钥是在网络中公开的,黑客自然也就可以获取公钥,这样单向的非对称加密就无法保证数据的安全性。

那么如果通信双方均使用非对称加密呢?这样虽然可以极大地提高安全性,但也无法保证绝对安全,且由于非对称加密算法的复杂度大,这样加密和解密的效率就会很低。

图5.2 使用非对称加密不安全的原因

5.3 非对称加密和对称加密配合使用

非对称加密和对称加密配合使用的通信操作流程为:

  • 存在用于非对称加密的公钥M和私钥M'。
  • 在正式通信之前,客户端先向服务器发送请求,获取其公钥M。
  • 客户端生成对称加密的秘钥C,通过公钥M加密,服务器接收到了客户端加密传输的秘钥C,通过私钥M'解密,这条通信双方就都拿到了对称加密秘钥C。
  • 在之后的通信中,通信双方使用对称加密即可,秘钥双方已经通过非对称加密传输协商完成。
  • 这种场景下,如果黑客只截取了加密后的内容,由于拿不到秘钥,依旧无法破译获取原文。但是,黑客依旧有手段窃取和篡改数据。
图5.4 非对称加密与对称加密配合使用的原理

在这种场景下,虽然中间人(黑客)不能通过获取秘钥来破译信息,但依旧可以通过截取并篡改公钥的手段获取信息,原理如下:

  • 服务器有公钥S和配对秘钥S',中间人有一组公钥M和秘钥M'。
  • 当客户端向服务器发送请求获取公钥S时,服务器明文传回公钥S。
  • 此时,中间人如果截获了服务器明文传回的公钥,就可以将公钥S保存下来,然后替换为自己的公钥M发回给客户端,而客户端不知道公钥S已经被篡改为了M。
  • 之后客户端再向服务器发送协商好的对称加密秘钥C时,会使用中间人的公钥M加密,而中间人如果截获了客户端向服务器发送的数据,就可以使用自己的私钥M'破译出原文。
  • 中间人此时再通过先前保存的公钥S对破译获得的对称加密秘钥C加密发给服务器,服务器就无法得知C已经泄露,依旧使用秘钥S'解密获取C。
  • 之后客户端和服务器的正式通信都使用对称加密,秘钥为C已经被黑客窃取,此时如果信息被黑客截取,黑客就能够通过C解密获取原文。

六. CA认证 

首先分析对称加密和非对称加密配合使用场景下不安全的原因,这是由于黑客在对称加密秘钥协商完成之前就入侵了网络,并将数据进行了篡改。

那么,如果客户端能够识别出其收到的数据是被篡改过的数据,进而终止向服务器发送数据,就可以避免信息的泄露。而客户端识别数据是否被篡改的依据,就是权威的CA机构颁发的CA证书,在https协议中,服务器向客户端发送的就是其CA证书,CA证书上会携带服务器的公钥以及其他的服务器相关信息。

CA证书就类似于我们生活中的身份证,身份证由权威机构(政府)颁发,是可以被信任的,如果身份证冒用或者造假,很容易就会被识别出来。

如果某服务端希望实现https协议通信,那就要向权威的CA机构申请CA证书,CA机构会对服务端进行审核,审核通过为该网站生成专门的数据签名,流程如下:

  • CA机构尤其公钥A和私钥A'。
  • 通过Hash算法,获取服务端申请下来的认证证书对应的数据摘要。
  • CA机构通过其私钥A',对数据摘要进行加密,获取对应的数据签名。

我们可以认为,服务端获取的CA证书的内容为:证书的明文信息 + 对应数据签名,服务器就是将证书明文 + 对应数据签名发回给客户端的。

图6.1 通过CA认证获取数据签名的流程

客户端通过CA证书判别服务端发送的数据是否在网络中被黑客篡改的流程为:

  • 将服务器发回来的证书的明文信息和数据签名做分离。
  • 将分解出来的明文信息通过Hash算法生成对应的数据摘要,在通过CA机构的公钥A解密数据签名,得到解密后的数据摘掉。
  • 对比通过对明文Hash和解密数签名要后获取的摘要,如果不相同,则表示数据被替换过了,客户端会终止向服务器发送数据。如果相同,通过明文数据检查目标服务器是否正确,以防止黑客替换整张CA证书。
图6.2 客户端通过CA证书判断数据是否被篡改的流程

七. 总结

  • http协议采用明文传输数据,https协议采用密文传输数据,相对于http协议,https协议更加安全。
  • 早期采用http协议通信时,数据容易被中间人截获并篡改。
  • 对称加密和非对称加密是两种常用的加密方式,对称加密中加密和解密使用同一把秘钥进行,而非对称加密有一把公钥一把私钥,一把负责加密另一把负责解密,公钥在全网公开,私钥私有不公开。
  • 数据摘要是将正文内容通过Hash算法生成的内容,而数据签名则是对数据摘要使用秘钥加密后生成的内容。
  • 在https协议通信中,采用对称加密、非对称加密、对称加密与非对称加密配合的方法,都存在安全隐患,不能保证数据不被黑客截获。
  • 通过 CA认证 + 对称加密 + 非对称加密 的方式,可以保证数据传输的安全性。客户端通过检查服务端发回的CA证书的合法性,就能判断数据是否在网络中被第三方修改,如果数据被修改了,客户端就会终止向服务器发送数据。

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

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

相关文章

第十二届2023软件杯国家二等奖赛后感想总结

一,相关链接 软件杯官网:软件杯大赛官网 (cnsoftbei.com) 金蝶赛道:金蝶云苍穹开发者门户 (kingdee.com) 二,个人介绍 首先我是个双非院校的学生,专业为计算机科学与技术,打这个比赛是在大二下的暑假开始的…

jsbridge实战1:xcode swift 构建iOS app

[[toc]] 环境安装 macOs: 10.15.5 xcode: 11.6 demo:app 创建 hello world iOS app 创建工程步骤 选择:Create a new Xcode project选择:iOS-> single View App填写: project name: swift-app-helloidentifer: smile 包名language: s…

扫雷小游戏(简单详细)(内附完整代码)

设计总体思路 实现游戏可以一直玩,先打印棋盘,玩家和电脑下棋,最后分出胜负。 如果编写较大的程序,我们可以分不同模块 例如这个扫雷,我们可以创建三个文件 分别为: game.h 函数的声明game.c 函数的…

激活函数介绍

介绍 神经网络当中的激活函数用来提升网络的非线性,以增强网络的表征能力。它有这样几个特点:有界,必须为非常数,单调递增且连续可求导。我们常用的有sigmoid或者tanh,但我们都知道这两个都存在一定的缺点&#xff0c…

国庆10.04

服务器 代码 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器头文件 #include<QTcpSocket> //客户端头文件 #include<QList> //链表容器 #include<QMessag…

【Unity2022】Unity实现手机游戏操控摇杆(实现操控轮盘)

文章目录 运行效果预览创建物体脚本获取RectTransform处理玩家拖动事件完整代码 获取输入运行其他文章 运行效果预览 首先展示一下本文章实现的效果&#xff1a; 创建物体 创建两个UI图像&#xff0c;一个用于表示背景&#xff0c;作为父物体&#xff0c;命名为JoyStick&am…

苹果ios系统IPA包企业签名手机下载应用可以有几种方式可以下载到手机?

一、App Store签名&#xff1a;这是最常见和推荐的苹果签名方式。用户可以通过苹果的官方应用商店App Store下载并安装经过苹果审核的应用程序。这种签名方式确保了应用程序的安全性和可靠性&#xff0c;因为App Store对应用进行了严格的审核和验证。 二、企业签名&#xff1a;…

2023八股每日一题(九月份)

文章目录 9月13日【JDK、JRE、JVM之间的区别】9月14日【什么是面向对象&#xff1f;】9月15日【和equals比较】9月16日【final 关键字的作用】9月17日【String、StringBuffer、StringBuilder】9月18日【重载和重写的区别】9月19日【接口和抽象类的区别】9月20日【List和Set的区…

EdgeView 4 for Mac:重新定义您的图像查看体验

您是否厌倦了那些功能繁杂、操作复杂的图像查看器&#xff1f;您是否渴望一款简单、快速且高效的工具&#xff0c;以便更轻松地浏览和管理您的图像库&#xff1f;如果答案是肯定的&#xff0c;那么EdgeView 4 for Mac将是您的理想之选&#xff01; EdgeView 4是一款专为Mac用户…

【kubernetes】kubernetes中的Controller

1 什么是Controller&#xff1f; kubernetes采用了声明式API&#xff0c;与声明式API相对应的是命令式API&#xff1a; 声明式API&#xff1a;用户只需要告诉期望达到的结果&#xff0c;系统自动去完成用户的期望命令式API&#xff1a;用户需要关注过程&#xff0c;通过命令一…

华为OD七日集训第6期 十一特辑 - 按算法分类,由易到难,循序渐进,玩转OD

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治…

MySQL的卸载与安装(Linux)

MySQL 前言1. 卸载MySQL1.1 查询与关闭对应MySQL服务1.2 卸载对应安装包 2. 安装MySQL2.1 配置MySQL官方yum源2.2 开始安装MySQL 前言 在这里演示的卸载与安装MySQL都是在Linux的Centos 7.6 环境下&#xff0c;不同环境会有所出入。 为了避免安装和卸载MySQL过程中受到权限的…