Linux:详解https协议

news2024/11/15 14:09:27

文章目录

  • 什么是https协议
  • 信息窃取
  • 常见的加密
  • 数据摘要和数据指纹
  • https的工作过程
    • 只使用对称加密
    • 只使用非对称加密
    • 都使用非对称加密
    • 非对称加密+对称加密
  • 证书
    • 数据签名
    • https方案

本篇要总结的内容是关于https协议的相关内容

什么是https协议

在讲述https协议之前,首先要明确的一点是,在应用层中是允许http协议和https协议同时存在的,那对于https的协议理解,我先借助下面这张图来进行描述

在这里插入图片描述
在上述图中,下三层表示的是在内核当中的,严格意义来说传输层和网络层是在操作系统的内部,而数据链路层是在网卡驱动层,因此也就比对了对应的网络协议,网络协议栈,操作系统之间的关系,而其中在前面认识到的套接字和系统调用接口,都是可以帮助程序员进行开发

那之前对于http的协议认识来说,用户的数据是会以http请求或相应来作为载体,之后再进行对应的交付信息,但是http的最大问题是,它的传输是明文传输,是不安全的,这也就意味着中间人都能够有资格去获得对应的http协议想要传递的内容,这是不可被接受的,因此基于这样的原因,数据安全的设计者就在此基础上添加了一层软件层,当数据准备交给操作系统之前,要增加一个ssl加密解密层,用来维护这当中的各种信息,那未来这些信息都会用加密的方式来进行传输,最终传输到对方的信息后,再在对方的应用层进行解析,换句话说,只有双方的应用层才能知道传递的是什么信息

在这里插入图片描述
所以此时操作系统其实在发送的消息已经变成了一些毫无意义的二进制信息,但是操作系统不关心,它还是会正常的进行信息的传递过程

所以说,其实核心来说,https协议本质上也是一种应用协议,它核心就是在http的基础上新增了一个加密层,而之前的http协议在进行网络传输的时候使用的都是明文传输,有很大的可能会进行所谓的读取抓包篡改的行为,而为了解决这样的问题,其中一种思路就是让双方一个进行加密,一个进行解密,这样就能做到在传递的时候先加密,然后传递到对方手中再进行解密

为了更好的理解这个过程,我这里举一个例子,比如现在进程a向进程b发送了一个信息是10,那现在在进行网络传输的过程中,很有可能这个过程就会被人劫持,劫持之后对应的信息就都会被发现,那为了解决这样的问题,提前进行一个约定,我们约定在进行数据传输之前要对这个数字按位异或上9876这个数字,那么当传输到网络的时候,实际上此时的数字已经变成了一个没有什么意义的数字,而在传递到对方的手中时,再对这个数字继续进行按位异或上9876,那么就能解析出对应的数据信息了,这就是对于https加密的一个基本理解

信息窃取

不管怎么说,只要信息在网络上没有进行加密,就可能会出现被窃取的可能性,我举一个最简单的例子,比如在局域网中,有一个路由器,当用户的网络连接到这个服务器之后,会通过这个服务器进行各种信息的交互,而这些信息是必然要通过这个路由器向外界进行传输,进而传递到基站,然后传递到更远的位置,那这个路由器就有可能会充当一个信息窃取的角色,它可以对于当前用户的信息进行抓包,甚至进行更改用户想要传递的信息,这样就能做到对于信息窃取的功能,这样就更加突出了比如要对于信息进行保护

常见的加密

基于这样的原因,自然就要对于信息做出一些常见的加密,那么从这里开始就要对于信息的加密方式进行一一列举和分析

对称式加密

所谓对称式加密,最大的特点就是加密和解密都用同样的一个数字,就比如刚才的按位异或的方法就是一个最典型的案例,而除此之外这样的加密特点是速度非常快,这也可以理解,毕竟直接进行运算就可以

非对称加密

那除了上面的加密方式外,还有一种是非对称加密,那所谓非对称加密就是说的是加密和解密用的是不同的数据,有两组数据作为中间数据,进行加密和解密的过程,这个和前面的区别是会出现两套不同的密钥,比如对于客户端的加密可以采用的是公钥进行加密,而传递到服务端进行解析采用的是私钥进行解密,这样的方法原理就是非对称加密,那非对称加密的运行特点是速度很慢,但是由于私钥的存在,所以在世界上只有拥有私钥的人才能对于信息进行解密,所以从某种意义来说私钥是相对比较安全的

数据摘要和数据指纹

在了解了上面的概念后,引入的下一个概念是关于数据摘要和数据指纹,所谓数据摘要,就是利用一些哈希函数,对于当前的信息进行一系列复杂的运算,最终运算出的结果可能是一串固定长度的数字摘要,那这个数字摘要就可以被看做是一种数字指纹,这个内容并不是进行加密,而是被用来判断这份数据到底有没有被进行修改,当这份数据被修改过后,它所形成的数据摘要就会截然不同,根据这个原理就可以判断信息是否被修改和截取

那形成信息摘要的方法,就被叫做是摘要算法,一种常见的算法就是md5算法,这个算法就可以把当前的文本生成一个很小的序列,之后对于文本比对就可以转换为对于这个小序列进行比对,如果这个序列被改变了,那么就一定意味着这个文本被改变过

https的工作过程

为了方便于理解https协议,从本小节开始将会对于信息的加密进行一些设计

只使用对称加密

在这里插入图片描述
上图所示的内容就是一个基本的原理,服务器和客户端之间使用一个约定了一个密钥进行沟通,就类似于前面的按位异或9876这样的方案,但是这样的方案并不靠谱,因为这个数字随时可能被客户端进行泄漏,这样就会导致密钥失去它的意义

只使用非对称加密

第二种方法是可以使用非对称的加密方式,具体原理可以看做是,服务器先把公钥传输给浏览器,之后浏览器向服务器传输数据之前都使用公钥加密好再传递给服务器,服务器使用私钥解开公钥加密的数据

这样看似乎好像是安全一些,但是问题还是存在的,服务器会传递给一些信息传递给浏览器,浏览器可以使用服务器最开始传递的公钥来进行加密,但是这是有问题的,如果在最开始服务器把信息传递给浏览器之前,公钥就已经被截取了,那么此时服务器向浏览器发送的信息都可以用公钥进行解析,进而被利用

都使用非对称加密

第三种方法是说,服务器有公钥和私钥,客户端也有公钥和私钥,客户端和服务端进行互换公钥:
客户端向服务端发消息,先对信息用s进行加密,然后传递给服务器,服务器用私钥s’来进行解析
服务端向客户端发消息,先对信息用c进行加密,然后传递给客户端,客户端用私钥c’来进行解析

在这里插入图片描述
这样的做法看似可以,但是实际依旧有问题,第一个问题是在传输的时候用私钥进行解析的效率太低,同时也有安全问题,我这里给出一种攻破方案:

在这里插入图片描述
由此可见,这样的的方案是不好的,既没有解决效率问题,还没有解决传输安全问题

非对称加密+对称加密

这里先解决效率问题:

在这里插入图片描述
这样的解决措施可以解决效率问题,但是对于中间人劫持依旧没有解决措施,因此这样的方案还是不能被采用

证书

那为了解决这个问题,因此引入了证书的概念,服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性

在这里插入图片描述
需要注意的是:申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私钥。这对密钥对⼉就是⽤来在⽹络通信中进⾏明⽂加密以及数字签名的。其中公钥会随着CSR⽂件,⼀起发给CA进⾏权威认证,私钥服务端⾃⼰保留,⽤来后续进⾏通信(其实主要就是⽤来交换对称秘钥)

数据签名

如何理解数据签名?如下图所示

在这里插入图片描述
当服务器申请CA证书的时候,就会对这个服务端进行审核,形成对应的数字签名:

  1. CA有非对称的密钥a和a’
  2. CA对于服务端的数据进行hash处理,形成数据摘要
  3. 然后用私钥a’进行加密,形成数字签名s

在未来,验证的方法非常简单,只需要使用公钥a进行验证就可以了,如果这个证书是伪造的,那么通过公钥a解密后一定不可能还原数据,因为最开始是使用密钥a’进行加密的

https方案

所以基于这样的原因,就可以设计出一个非对称加密+对称加密+证书认证的一套逻辑:

在客户端和服务器建立链接的时候,服务器给客户端返回一个证书,其中包含了之前服务端的公钥,也包含了网站的身份信息,客户端就可以进行验证了,判断有效期是否过期,判断证书的发布机构是否受信任,检验证书是否被篡改,这些方法都可以验证这个证书到底是否安全

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

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

相关文章

Linux镜像文件下载地址--SCAS 开源镜像站,速度快

SCAS 开源镜像站 https://mirror.iscas.ac.cn/举例: 下载centos7 Index of /centos/7/isos/x86_64/ (iscas.ac.cn)

【C++算法】二分算法、二分模板详解,四道例题带详细注释

文章目录 [toc]1)整数二分2)解二分题步骤AcWing 789.数的范围洛谷 P1873.EKO/砍树洛谷 P1678.烦恼的高考志愿 2)浮点二分AcWing 790. 数的三次方根 1)整数二分 有单调性的题目一定可以二分,但是用二分做的题目不一定拥…

Linux初学(八)磁盘管理

一、磁盘管理 1.1 简介 磁盘的工作原理: 添加磁盘对磁盘进行分区格式化磁盘挂载和使用磁盘 磁盘的类型: 固态机械 磁盘的接口类型: IDESTSTSCSI 磁盘工作的原理: 磁盘,特别是硬盘,和内存不同,…

【Bug】记录2024年遇到的Bug以及修复方案

--------------------------------------------------------分割线 2024.3.22------------------------------------------------------- 1、load_sample_image raise AttributeError(“Cannot find sample image: %s” % image_name) AttributeError: Cannot find sample ima…

nvidia显卡如何安装cuda驱动

目录 查看显卡对应的cuda版本下载与你显卡匹配的CUDA Toolkit 查看显卡对应的cuda版本 按 微软 R 键,输入cmd 然后输入 nvidia-smi ,回车显示下面信息: 看到 CUDA Version 为 12.2 下载与你显卡匹配的CUDA Toolkit 打开网页&#xff1a…

鸿蒙Harmony应用开发—ArkTS-@AnimatableExtend装饰器:定义可动画属性

AnimatableExtend装饰器用于自定义可动画的属性方法,在这个属性方法中修改组件不可动画的属性。在动画执行过程时,通过逐帧回调函数修改不可动画属性值,让不可动画属性也能实现动画效果。 可动画属性:如果一个属性方法在animation…

C++默认构造函数(二)

目录 构造函数补充 构造函数初始化列表的使用 赋值运算符重载函数 运算符重载函数介绍 运算符重载函数的使用 赋值运算符重载函数 赋值运算符重载函数的使用 拷贝构造函数和赋值运算符重载函数 重载前置和后置 前置 后置 重载流插入<<与流提取>> 流插…

C++ 其它

1、内存四区-代码区 2、内存四区-全局区 生成exe后&#xff0c;运行前是代码区和全局区 3、内存四区-栈区 4、内存四区-堆区 5、new *new一个整型10&#xff0c;返回的是该数据类型的指针&#xff0c;所以用int p 所以是int [10]&#xff0c;所以new的是int[10]&#x…

3.23项目:聊天室

1、 基于UDP的网络聊天室 项目需求&#xff1a; 如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息如果有人下线&#xff0c;其他用户可以收到这个人的下线信息服务器可以发送系统信息 服务器 #inc…

东方博宜 1469. 数的统计

东方博宜 1469. 数的统计 #include<iostream> using namespace std; int main() {int n ;cin >> n ;int x ;cin >> x ;int cnt ;cnt 0;for (int i 1 ; i < n ; i){int num ;num i ;while(num!0){int g ;g num % 10 ;if (g x)cnt 1 ;num num / 10…

springboot294基于java的火车票订票系统的设计与实现

火车票订票系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装火车票订票系统软件来发挥其高效…

ElasticSearch首次启动忘记密码,更改密码(Windows 10)

先启动ElasticSearch 启动方式cmd到lasticsearch-8.12.2\bin目录下输入elasticsearch 启动成功后新开一个窗口输入elasticsearch-reset-password -u elastic

《剑指 Offer》专项突破版 - 面试题 88 : 动态规划的基础知识(C++ 实现)

目录 前言 面试题 88 : 爬楼梯的最少成本 一、分析确定状态转移方程 二、递归代码 三、使用缓存的递归代码 四、空间复杂度为 O(n) 的迭代代码 五、空间复杂度为 O(1) 的迭代代码 前言 动态规划是目前算法面试中的热门话题&#xff0c;应聘者经常在各大公司的面试中遇到…

C++ —— 日期计算器

1. 头文件 #pragma once #include <iostream> using namespace std;class Date { public:Date(int year 1, int month 1, int day 1);int GetMonthDay();bool operator>(const Date& d) const;bool operator>(const Date& d)const;bool operator<(c…

机器学习--jupyter-matplotlib使用中无法显示中文

jupyter使用中无法显示中文 在jupyter中&#xff0c;通过matplotlib作图时可能会添加中文标题&#xff0c;但有时候会不显示中文 import numpy as np import matplotlib.pyplot as pltx np.arange(0, 6, 0.1) # 以0.1为单位&#xff0c;成0到6的数据 y1 np.sin(x) y2 np.c…

ubuntu安装多个gcc并设置可切换

测试环境&#xff1a; Ubuntu16.04 1. 查看当前有几个gcc&#xff0c;g ls /usr/bin/gcc* ls /usr/bin/g* 有两个版本&#xff0c;5和7. 2. 安装特定gcc/g 版本 可以用sudo apt install gcc-version安装&#xff0c;比如说我想安装gcc-7&#xff0c;则命令为sudo apt instal…

第5章 数据建模和设计

思维导图 5.1 引言 最常见的6种模式&#xff1a;关系模式、多维模式、面向对象模式、 事实模式、时间序列模式和NoSQL模式 每种模式分为三层模型&#xff1a;概念模型、逻辑模型和物理模型 每种模型都包含一系列组件&#xff1a;如实体、关系、事实、键和属性。 5.1.1 业务驱…

【Flink】窗口实战:TUMBLE、HOP、SESSION

窗口实战&#xff1a;TUMBLE、HOP、SESSION 1.TUMBLE WINDOW1.1 语法1.2 标识函数1.3 模拟用例 2.HOP WINDOW2.1 语法2.2 标识函数2.3 模拟用例 3.SESSION WINDOW3.1 语法3.2 标识函数3.3 模拟用例 4.更多说明 在流式计算中&#xff0c;流通常是无穷无尽的&#xff0c;我们无法…

C++第十弹---类与对象(七)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、再谈构造函数 1.1、构造函数体赋值 1.2、初始化列表 1.3、explicit关键字 2、static成员 2.1、概念 2.2、特性 2.3、面试题 总结 1、再…

鸿蒙Harmony应用开发—ArkTS(@Prop装饰器:父子单向同步)

Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的&#xff0c;但是变化不会同步回其父组件。 说明&#xff1a; 从API version 9开始&#xff0c;该装饰器支持在ArkTS卡片中使用。 概述 Prop装饰的变量和父组件建立单向的同步关系&#xff1a; Prop变量…