Linux网络编程:详解https协议

news2024/12/29 10:36:58

目录

一. 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.coloradmin.cn/o/1060045.html

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

相关文章

JWFD开源工作流大模型设计器

JWFD开源工作流大模型设计器,把流程图的拓扑结构从几十个节点扩展到数千个节点,就不是使用绘图器的模式了,需要开发一个模型生成器了,尝试做一下大模型,赶赶时髦啊

openwrt安装与旁路由 以玩客云为例

鉴于安了wfnb/onecloud 23年的bata版本 结果发现进入docker 连make config apt yum apk curl等命令都没有……而且curl下载很慢 得选6.0哪个版本 反正就是 安不了istore 所以 直接刷人家的成品算了 为什么要使用软路由、旁路由 普通的路由器往往集无线信号转发、网关、DNS 服…

JMeter工具的介绍,安装

一、本文学习目标 1、能知道JMeter的优缺点 2、能掌握JMeter的安装流程 3、能掌握JMeter线程组的设置 4、能掌握JMeter参数化的使用 5、能掌握JMeter直连数据库操作 6、能掌握JMeter的断言. 二、JMeter简介 (1)Jmeter详细介绍 **JMeter(A…

RTC 时间、闹钟

实时时钟RTC是一个独立的定时器。RTC模块拥有一个连续计数的计数器,在软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。 在掉电情况下 RTC仍可以独立运行 只要芯片的备用电源…

MySQL数据库基础回顾与复习

MySQL数据库 一、原理定义概念 定义 数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库 数据库是长期储存在计算机内、有组织的、可共享的数据集合 分类: (1)非结构化数据: 数据相对来讲没…

QFluentWidgets: 基于 C++ Qt 的 Fluent Design 组件库

简介 QFluentWidgets 是一个基于 Qt 的 Fluent Designer 组件库,内置超过 150 个开箱即用的 Fluent Designer 组件,支持亮暗主题无缝切换和自定义主题色。搭配所见即所得的 Fluent Designer 软件,只需拖拖拽拽,不用编写一行 QSS&…

腾讯云服务器简介和使用流程

腾讯云服务器在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵,但是自定义购买云服务器CPU内存带宽配置选择范围广,活动上购买只能选择固定的活动机,选择范围窄,但是云服务器价格便宜比较省钱。腾讯云服务器网来详细说下腾…

driver.js 扩展下次“不再提示”功能

文档地址:https://github.com/kamranahmedse/driver.js 官方demo:https://kamranahmed.info/driver.js/ /*** Title: 页面引导 ……* Author: JackieZheng* Date: 2023-08-16 10:43:31* LastEditTime: 2023-08-16 10:55:08* LastEditors:* Description:*…

找不到msvcp110.dll是什么意思?总结msvcp110.dll丢失修复方法分享

随着电脑技术的不断发展,我们也会遇到各种各样的问题。最近,我就遇到了一个问题:电脑丢失msvcp110.dll的困扰。这个问题让我深感无奈,但同时也让我学到了很多关于电脑维修和系统修复的知识。在这篇文章中,我将分享我的…

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(五)

思维导图 Bom操作 一、Window对象 1.1 BOM(浏览器对象模型) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"vi…

macOS Sonoma 正式版系统已发布,macos14值得更新吗

北京时间9月27日macOS Sonoma 正式版系统发布&#xff0c;为 Mac 带来一系列丰富新功能&#xff1a;优化小组件、升级视频会议、沉浸式游戏体验等&#xff0c;最新macos14值得更新吗&#xff1f;这里根据我一个月的试用beta版本体验来分享一下。 我使用的是M1芯片的MacBook air…

Java架构师功能设计和架构设计

目录 1 架构设计理念1.1 架构定义1.2 文档编写1.3 维护和改进1.4 验证实现1.5 总结 2 深入理解和认识架构设计2.1 架构设计关注哪些东西2.2 架构设计是一系列的活动不断演化和完善的过程2.3 架构设计跨越软工的全流程2.3.1 软工的全流程的原因 3 功能设计概念4 理解和认识功能设…

【Vue3】定义全局变量和全局函数

// main.ts import { createApp } from vue import App from ./App.vue const app createApp(App)// 解决 ts 报错 type Filter {format<T>(str: T): string } declare module vue {export interface ComponentCustomProperties {$filters: Filter,$myArgs: string} }a…

openwrt使用教程

openwrt 插件安装 首先 我们需要明确自己什么版本的cpu 进入docker 然后 cat /proc/cpuinfo# 查看CPU信息 uname -m# 查看CPU架构 cat /proc/meminfo# 查看内存使用情况 df -h# 查看磁盘的使用率 uname -a# 查看内核信息 opkg print-architecture# 可接受的架构arm a5 比较奇…

Maven超细致史上最全Maven下载安装配置教学(2023更新...全版本)建议收藏...赠送IDEA配置Maven教程

Maven安装与配置 Maven 的主要目标是让开发人员能够在最短的时间内了解开发工作的完整状态。为了实现这一目标&#xff0c;Maven 处理了几个关注领域&#xff1a; 简化构建过程 提供统一的构建系统 提供优质的项目信息 鼓励更好的发展实践 基于项目对象模型 (POM&#xff0…

找不到msvcr110.dll丢失的解决方法-常见修复方法分享

在计算机使用过程中&#xff0c;我们可能会遇到 msvcr110.dll 丢失的问题。msvcr110.dll 是 Microsoft Visual C Redistributable 的一部分&#xff0c;是一个运行库文件&#xff0c;用于支持一些软件和游戏的运行。如果它丢失或损坏了&#xff0c;那么你就需要进行修复了。本文…

【C语言】循环结构程序设计(第二部分 -- 习题讲解)

前言:昨天我们学习了C语言中循环结构程序设计&#xff0c;并分析了循环结构的特点和实现方法&#xff0c;有了初步编写循环程序的能力&#xff0c;那么今天我们通过一些例子来进一步掌握循环程序的编写和应用。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &am…

conda安装使用jupyterlab注意事项

文章目录 一、conda安装1.1 conda安装1.2 常见命令1.3 常见问题 二、jupyterlab2.1 jupyterlab安装和卸载2.2 常见错误2.2.1 版本冲突&#xff0c;jupyterlab无法启动2.2.2 插件版本冲突 2.3 常用插件2.3.1 debugger2.3.2 jupyterlab_code_formatter 2.4 jupyter技巧 一、conda…

聊聊分布式架构——Http到Https

目录 HTTP通信协议 请求报文 响应报文 持久连接 状态管理 HTTPS通信协议 安全的HTTPS HTTP到HTTPS的演变 对称加密 非对称加密 混合加密机制 证书机构 SSL到底是什么 HTTPS是身披SSL外壳的HTTP HTTP通信协议 一次HTTP请求的通信流程&#xff1a;客户端浏览器通过…

【C++】STL简介(了解)

一、什么是STL STL (standard template libaray- 标准模板库 ) &#xff1a; 是 C 标准库的重要组成部分 &#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架 。 二、STL的版本 原始版本 Alexander Stepanov 、 Meng Lee 在惠普实验…