【应用层】HTTPS协议详细介绍

文章目录

  • 前言
  • 一、什么是"加密"
  • 二、常见的加密方式
  • 三、数据摘要(数据指纹)
  • 四、证书
  • 总结


前言

HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层,由于HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况,下面我们详细介绍https是如何解决这些问题的。


一、什么是"加密"

加密就是把明文(要传输的信息)进行一系列变换,生成密文。

解密就是把密文再进行一系列变换,还原成明文。

在这个加密和解密的过程中,往往需要一个或多个中间的数据,辅助进行这个过程,这样的数据成为密钥。

下面我们举个例子:

比如我们的客户端要给服务器发送一个变量a = 100,这个变量的多少不想被其他人知道,所以我们用key变量按位异或a形成c变量,将c变量发送给服务器,然后服务器用c变量按位异或key就得到了a变量,我们发现只有在客户端一开始知道a是100,中间在网络传输的时候传输的都是c变量。

上面对a变量异或的过程就是加密,服务器对c变量异或得到a变量的过程就叫解密。

下面我们举一个非常常见的例子:

当我们需要下载某个游戏时,在浏览器搜到后然后开始下载,最后发现下载出来的是应用宝??这是因为当我们的浏览器向游戏服务器发起请求,游戏服务器向我们发起的回应包含游戏下载路径但是被运营商劫持,运营商将游戏路径改为应用宝的路径,然后发送给用户。

由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的数据内容并进行篡改,当我们点击下载按钮,实际上就是给服务器发送了http请求,获取到的http响应其实就包含了该APP的下载链接,运营商劫持后就自动的把交给用户的响应篡改为其他应用的下载地址了。

所以:因为http的内容是明文传输的,明文数据会经过路由器,wifi热点,通信服务运营商,代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了,劫持者还可以篡改传输的信息且不被双发察觉,这就是中间人攻击,所以我们才需要对信息加密。

二.常见的加密方式

对称加密:采用单钥密码系统的加密方式,同一个秘钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单秘钥加密,特征:加密和解密所用的秘钥是相同的。

特点:算法公开,计算量小,加密速度快,加密效率高。

实际上我们上面演示的异或就是对称加密,两边都有key就能完成加密和解密。

非对称加密:需要两个秘钥来进行加密和解密,这两个秘钥是公开秘钥和私有秘钥。

特点:算法强度复杂,安全性依赖于算法与秘钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

非对称加密要用到两个秘钥,一个叫做公钥,一个叫做私钥。公钥和私钥是配对的,最大的缺点是运算速度非常慢,比对称加密要慢很多。

三.数据摘要(数据指纹)

数据指纹(数据摘要):其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要,数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。

摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据比对。

有了上面三组概念,下面我们探究一下http是如何加密的:

1.只使用对称加密可以解决问题吗?

 当我们客户端给服务端发送数据时,首先自己通过算法生成一个秘钥然后对数据加密,但是我们的服务端是没有客户端生成的秘钥的,要想对加密的数据解密还需要客户端把秘钥发送给服务端,但是我们说过http是明文的,这就导致客户端给服务端发送的秘钥也会被中间人(黑客)劫持,所以我们单单使用对称加密是解决不了问题的。

2.只使用非对称加密

首先我们假设只有服务端有公钥和私钥:

 当客户端向服务端发起秘钥协商握手的时候,服务端会给客户端发送公钥,但是黑客这个时候也会拿到公钥,然后客户端用公钥对数据加密发送给服务器,这里一定可以保证数据只会被服务器解密,因为私钥只有服务器有。服务器解密后要给客户端回应,但是服务器的回应是无法加密的,因为如果用公钥加密,就必须用私钥解密,而客户端并没有私钥,如果用私钥加密,那么黑客是有公钥的,还是会篡改信息。

下面我们假设客户端和服务端都用非对称加密:

首先客户端和服务端都有自己生成的公钥和私钥,第一次协商握手的时候客户端将自己的公钥给服务端,然后服务端发送响应的时候把自己的公钥给客户端,当两边交换公钥后客户端就可以用服务端的公钥加密数据发送给服务端,然后服务端用自己才有的私钥进行解密,然后服务器用客户端的公钥加密响应发送给客户端,客户端用只有自己才有的私钥进行解密。这样看似没有问题,但是我们说过非对称加密的速度很慢,并且有一个隐藏的安全问题我们在下一个方法中讲到。

3.为了解决效率问题,我们用对称加密 + 非对称加密组合的方法 

 首先服务端自己是有公钥和私钥的,然后第一次客户端向服务端发起请求,服务端将公钥给了客户端,客户端自己生成对称秘钥,然后用服务器的公钥对对称秘钥进行加密得到x,然后把x给服务端,因为只有服务端有唯一的秘钥所以可以对x进行解密拿到C,这样的话客户端和服务端都有了对称秘钥C,以后就可以通过对称秘钥加密通信了,我们说过对称秘钥速度很快,所以解决了速度慢的问题。 

我们发现上面的所有方案我们都忽略了一个问题,那就是如果中间人一开始就进行攻击,我们是无法完成正确的公钥交换的,如下图:

 首先服务端有自己的公钥P和私钥S,然后客户端第一次向服务器发起请求,然后服务器在给客户端发送P的时候被黑客劫持,黑客也准备了自己的私钥D和公钥M,然后黑客保存了服务器的公钥P,将自己的公钥M发送给客户端,客户端形成对称秘钥C,用黑客的公钥进行加密然后发送给服务端,在发送途中被黑客劫持,黑客用自己唯一的私钥D对X进行解密,拿到客户端形成的对称秘钥C,然后再用原先服务器的公钥P对C进行加密然后发送给服务端,服务端收到后用唯一的私钥S解密拿到了对称秘钥C,然后以后就用C和客户端通信,但是不管是服务端还是客户端都不知道黑客已经拿到对称秘钥C了。

那么如何解决上面这个问题呢?实际对上面这种情况我们只需要解决一开始黑客篡改公钥的情况,本质问题是客户端没有辨别公钥是否合法的能力,所以只要客户端能辨别公钥合法就能解决这个问题。

在解决这个问题之前我们先引入一些概念:

四.证书

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

 在数字证书中包含一个电子签名,这个我们后面会详细讲。然后还有公司的信息以及域名等等最重要的是公钥在证书中。

下面我们重点认识一下数字签名的形成:

首先公司提交公司注册信息,然后CA机构通过哈希散列将这份数组变成一个散列值(也叫数据摘要),然后CA机构会用CA自己的秘钥对散列值进行加密,加密后就形成了数据签名。注意:CA机构所使用的秘钥只有CA机构有。 有了数字签名后,我们要确保一份证书的真实性只需要将证书中的内容提取出来做数据摘要,然后用证书中的公钥对数据摘要解密,如果解密后的值和数字签名一样,则说明这个证书是真实的没有被篡改过,否则就说明证书是被篡改过的。

申请证书的过程如下图:

防篡改过程如下图:

 注意:CA会在所有的浏览器中内置自己的公钥,这一点非常重要。正是因为这样所以我们的浏览器才可以分辨出哪些网站是受信任的哪些网站是不受信任的。

下面我们分析一下为什么有了CA后就可以解决问题了:

1.黑客修改公钥可行吗?

很明显是不行的,如果黑客劫持了服务器给客户端发送的证书并且修改了证书中的公钥(注意证书中的公钥是服务器自己生成的公钥,与我们签名讲解的方案中的公钥是一样的),由于CA生成证书的时候会将公司提交的公钥信息,注册信息等全部进行摘要然后用CA自己的私钥加密,所以一旦客户端浏览器用CA内置的公钥对证书中的数字签名解密,然后和证书中的数据摘要做对比,只要不一样则说明证书被篡改。

2.黑客同时修改公钥和数字签名

当然也是不行的,因为数字签名的修改必须要CA机构的私钥。

3.黑客直接掉包整个证书

首先黑客肯定造不出假证书,因为没有CA的私钥。要拥有证书就必须去CA机构申请真证书,但是证书中是含有域名等信息的,每个服务器的域名是唯一的,如果你拿着别人已经申请过的公司的域名那么一定申请不到证书的。

 了解了以上知识,那么最终方案就来了:非对称加密+对称加密+证书认证

首先服务端自己是有公钥和私钥的,然后第一次客户端向服务端发起请求,服务端将证书给了客户端,客户端自己生成对称秘钥,然后用证书中的公钥对对称秘钥进行加密得到x,然后把x给服务端,因为只有服务端有唯一的秘钥所以可以对x进行解密拿到C,这样的话客户端和服务端都有了对称秘钥C,以后就可以通过对称秘钥加密通信了。证书的存在解决了中间人一开始就对公钥做手脚的场景,所以这就是https的加密原理。

当然我们也可以在自己的浏览器查看相关的证书:

 上面除了CA以外的机构很多都是CA的子机构。

 可以看到不管公钥还是私钥都是一堆代表唯一性的字符串。


总结

https与http最本质的区别在于https在http的基础上引入了加密层,以前http明文发送的数据在https中可以进行加密了,极大的提高了安全性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

郑州https数字证书

很多注重隐私的网站都注重网站信息的安全,比如购物网站就需要对客户的账户信息以及支付信息进行安全保护,否则信息泄露,客户与网站都有损失,网站也会因此流失大量客户。而网站使用https证书为客户端与服务器之间传输的信息加了一个…

深度学习笔记-暂退法(Drop out)

背景 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预…

day50-Insect Catch Game(捉虫游戏)

50 天学习 50 个项目 - HTMLCSS and JavaScript day50-Insect Catch Game&#xff08;捉虫游戏&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport"…

【【STM32学习-3】】

STM32学习-3 下面是对c语言的稍微复习 这个是我们设置好的文件 以后拖出去用就可以了 这里加入关于指针的感想 关于指针数组和数组指针的想法 常规的东西是int a10; int * p&a; &#xff08;p指向了a元素&#xff0c;意思是p等于a的地址 类型是int*&#xff09;就是 整型指…

C语言假期作业 DAY 10

一、选择题 1、求函数返回值&#xff0c;传入 -1 &#xff0c;则在64位机器上函数返回&#xff08; &#xff09; int func(int x) { int count 0; while (x) { count; x x&(x - 1);//与运算 } r eturn count; } A: 死循环 B: 64 C: 32 D: 16 答案解析 正确答案&#xff…

HCIA-datacom数通题库和录播视频资料

HCIA-Datacom&#xff0c;是华为数通认证的初级考试&#xff0c;培训与认证具备数通基础通用知识和技能水平的工程师&#xff0c;只是入门了解数通的一些基础通用知识&#xff0c;适用于小白了解和学习数通知识点起点。 个人建议还是有必要考的&#xff0c;如果在企业考试考试…

ffplay——QT项目移植

一、ffmpeg源码编译 参考&#xff1a; https://blog.csdn.net/sgzed/article/details/119850119 在生成时做了一些修改&#xff1a; ./configure --toolchainmsvc --enable-shared --enable-postproc --enable-gpl --prefixwindows 二、对文件做调整 ffplay只需要三个文件&…

品牌活动 | 阿里云云原生技术实践营:大模型+CloudOS,实现企业智能化

近日&#xff0c;由阿里云举办的“云原生技术实践营-应用和容器实践专场”在广州顺利开展。行云创新CEO马洪喜作为受邀嘉宾之一&#xff0c;参加了本次活动&#xff0c;分享了主题为“API大语言模型&#xff0c;以非侵入式实现企业业务智能化变革”的演讲&#xff0c;向参会者展…

JS判断类型的方法和对应的局限性(typeof、instanceof和Object.prototype.toString.call()的用法)

JS判断类型的方法和对应的局限性(typeof、instanceof和Object.prototype.toString.call()的用法&#xff09; 一、typeof 返回&#xff1a; 该方法返回小写字符串表示检测数据属于什么类型&#xff0c;例如&#xff1a; 检测函数返回function 可判断的数据类型&#xff1a…

Vcenter 创建 虚拟机配置 Thin Provision 模式 disk

介绍 在vCenter中选择虚拟磁盘格式通常也取决于您的需求和使用情况。 vSphere支持多种虚拟磁盘格式&#xff0c;以下是一些常见的格式&#xff1a; Thick Provision Lazy Zeroed&#xff1a;这是vSphere中的默认格式。它会预分配虚拟磁盘所需的存储空间&#xff0c;但只有在虚…

Meta “地平线世界”移动端应用即将上线,手机快乐元宇宙?

根据海外记者 Janko Roettgers 的报道&#xff0c;Meta 预计很快推出移动版的 VR 元宇宙服务 "地平线世界"&#xff0c;这是Meta 长期开发的产品。 根据最新报道&#xff0c;Meta宣布正在研发“地平线世界”的移动版&#xff0c;并表示这一服务已经可以在Quest VR设…

杜教筛的小结

总所周知&#xff0c;杜教筛是一个可以快速求积性函数前缀和的工具&#xff0c;为了快速理解杜教筛&#xff0c;自己给自己写了一个文章快速理解。 它可以在O(n2/3)的复杂度快速求出某个积性函数的前缀和。 例如&#xff0c;我们想要知道 f f f函数的前缀和&#xff0c;我们可…

《向量数据库指南》——腾讯云向量数据库Tencent Cloud VectorDB产品特性,架构和应用场景

腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持 10 亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提…

刷题笔记:day 1

力扣 283 移动零 解法一&#xff1a;双指针 定义一个指针 cur 去遍历数组 &#xff1b; 定义一个指针 dest 去指向已处理区间中&#xff0c;非零的最后一个位置。 然后让 指针 cur 遇到 0 &#xff0c;就往后走 &#xff1b; 遇到的数不是 0 &#xff0c;就与 dest指针的下…

Django使用用户列表的展示和添加

接着上一篇&#xff1a;https://blog.csdn.net/javascript_good/article/details/132027702 来实现用户表的查询和添加 1、创建数据库表 在models.py 中&#xff0c;增加UserInfo类&#xff0c;包括字段姓名、密码、年龄、账号余额、入职时间、所属部门、性别 verbose_name 就…

web-6-深入理解JSP:探索其核心概念和特性

JSP 今日目标&#xff1a; 理解 JSP 及 JSP 原理 能在 JSP中使用 EL表达式 和 JSTL标签 1&#xff0c;JSP 概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java 服务端页面。是一种动态的网页技术&#xff0c;其中既可以定义 HTML、JS、CSS…

医药化工企业洁净厂房改造消防防爆安全的重要性

设计 【摘要】&#xff1a;近年来&#xff0c;我国医药化工企业规模不断扩大。医药化工企业的情况复杂&#xff0c;稍有不慎将发生火灾或者爆炸&#xff0c;对人员生命以及财产安全造成巨大的损害&#xff0c;酿成悲剧。所以&#xff0c;“三同时”原则的落实&#xff0c;如何…

分布式事务之CAP理论和BASE理论详解

&#x1f680; 分布式事务 &#x1f680; &#x1f332; AI工具、AI绘图、AI专栏 &#x1f340; &#x1f332; 如果你想学到最前沿、最火爆的技术&#xff0c;赶快加入吧✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域优质创作者&#x1f3c6;&…

【软件安装】MATLAB_R2021b for mac 安装

Mac matlab_r2021b 安装 下载链接&#xff1a;百度网盘 下载链接中所有文件备用。 我所使用的电脑配置&#xff1a; Macbook Pro M1 Pro 16512 系统 macOS 13.5 安装步骤 前置准备 无此选项者&#xff0c;自行百度 “mac 任何来源”。 1 下载好「MATLAB R2021b」安装文…

【RabbitMQ】golang客户端教程1——HelloWorld

一、介绍 本教程假设RabbitMQ已安装并运行在本机上的标准端口&#xff08;5672&#xff09;。如果你使用不同的主机、端口或凭据&#xff0c;则需要调整连接设置。如果你未安装RabbitMQ&#xff0c;可以浏览我上一篇文章Linux系统服务器安装RabbitMQ RabbitMQ是一个消息代理&…
最新文章