HTTPS协议原理---详解六个加密方案

news2024/12/27 16:16:11

目录

一、HTTPS

1.加密与解密

2.我们为什么要加密?

3.常见加密方式

①对称加密

②非对称加密

4.数据摘要

5.数字签名

二、HTTPS的加密方案

1.只是用对称加密​

2.只使用非对称加密 

3.双方都使用非对称加密

4.非对称加密+对称加密

中间人攻击

证书

CA认证

理解数据签名

5.非对称加密+对称加密+证书认证

完整流程

查看浏览器所信任的证书发布机构

 中间人有没有可能篡改该证书?

中间人是否可以掉包整个证书呢?

如何成为中间人?

总结:


一、HTTPS

        上一篇博客,详细讲述了HTTP协议(超文本传输协议)的一些细节,在最后我们提到,无论如何HTTP 协议内容都是按照⽂本的⽅式明⽂传输的,这就导致在传输过程中出现⼀些被篡改的情况,所以当今的网站都是用的是HTTPS 协议,HTTPS 也是⼀个应⽤层协议. 是在 HTTP 协议的基础上引⼊了⼀个加密层。

1.加密与解密

        什么是加密?就是将明文转换为密文。

        什么是解密?就是将密文转换为明文。

        在这两个过程中,通常要密钥来辅佐。密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。

例子:
        

         

         通过密钥我们可以将密文转换为明文,反之亦然。

2.我们为什么要加密?

        我们都会经历过这样一个现象。明明下载的是我们想要的软件,却弹出另一个软件的下载。

        这就是臭名昭著的运营商的劫持。关于运营商劫持,我们要到后面才会讲到。

        如图,我们发送HTTP请求,运营商接收到这个请求之后,发现请求为www.baidu.com,运营商就会将HTTP响应替换为新浪的官网。        

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

        所以针对防止中间人攻击,我们要对数据进行加密,下文会讲述到“道与魔之间的对抗”,我们呢拼尽全力抵抗数据被截取,中间人总用方法来获取信息。可谓“道高一丈魔高一尺”。

3.常见加密方式

①对称加密

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

        常⻅对称加密算法:DES、3DES、AES、TDEA、Blowfish、RC2等 

        特点:算法公开、计算量⼩、加密速度快、加密效率⾼

例如:

②非对称加密

        需要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥 (private key,简称私钥)。

        常⻅非对称加密算法(了解):RSA,DSA,ECDSA

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

        非对称加密要⽤到两个密钥, ⼀个叫做 "公钥", ⼀个叫做 "私钥". 公钥和私钥是配对的. 最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多.

        通过公钥对明⽂加密, 变成密⽂                      

        通过私钥对密⽂解密, 变成明⽂

或者

        通过私钥对明⽂加密, 变成密⽂                      

        通过公钥对密⽂解密, 变成明⽂

4.数据摘要

        数据摘要(数据指纹)这是通过利用单向散列函数(Hash函数)对信息进行运算,生成一段固定长度的数据摘要。

        摘要常见算法:有MD5、SHA1、SHA256、SHA512等。

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

        这个摘要就像这个资源的身份证号一样,相同的几率微乎其微,我们可以通过数据摘要来比对判断不同资源是否相同。因为更改一个标点符号就会导致前后数据摘要不一样。

        例如:当我上传电影时,会发现这个资源有时会瞬间就会被告知上传成功,但是有时需要很长时间几兆几兆的上传。只是因为,上传的软件会将电影等资源利用单向散列函数形成数据摘要,将数据摘要与服务器中的资源的数据摘要进行对比,如若有数据摘要与当前上传的文件的数据摘要相同,就证明服务器中有我们上传的这份资源,此时就不需要我们上传了,所以会被告知上传完毕。

        注意,不可能通过数据摘要反向推出资源来,因为是使用单向散列函数来运算的。

5.数字签名

        数字摘要通过加密就得到了数字签名。

二、HTTPS的加密方案

1.只是用对称加密

        哇,这样不错诶,黑客(中间人)拿到的只是密文,看不到我的明文内容,这样多安全。

        但事情绝没有这么简单,服务端同时给很多客户端提供服务,它们的密钥之间必是不同的,如果是相同的,就容易扩散,黑客很容易拿到。所以密钥之间是不同的。所以,需要服务端来维护每个客户端和服务端之间的密钥关系,也是一个麻烦的工程。

        较为理想的情况为,在每次服务端和客户端建立关系之前就协商好密钥是什么。

        但是,这个密钥在网络传输(协商)中是不是也要加密啊,不加密又要被黑客获取,但是加密又要使用密钥,这就是“先有鸡还是先有蛋”的问题了,所以这个方法行不通。

2.只使用非对称加密  

         这样很是不错,因为中间人只能获得我的公钥和密文,但是获得不了私钥,所以解密不了,但是,这有很大隐患,只能由客户端发信息,而不能由服务端发信息。

        因为客户端只有公钥,所以服务端只能用私钥加密,发送信息 ,这时中间人截取信息,通过先前截取的公钥就可以获得信息。那如果服务端通过公钥加密,那客户端没有私钥就不能解密。

        只使用非对称加密是行不通的。

3.双方都使用非对称加密

        上个方案只是客户端有公钥,服务端有私钥,保证单方面的保密可行。这一次客户端和服务端都具有独有的公钥与私钥,然后互换公钥。

          这种方法可行,但是非对称加密速度与对称加密相比慢得多,会产生效率问题,并且还会有安全问题。

4.非对称加密+对称加密

        服务器具有非对称公钥1和私钥1。

        客户端发起Http请求,获取公钥1。

        客户端形成对称密钥2,通过公钥1,将对称密钥2发给服务端,中间人因为没有私钥1,所以获取之后解密不了,服务端获取密文通过私钥1解密之后获得对称密钥2.

        之后客户端和服务端都使用对称密钥2来加密解密,快捷可靠。

中间人攻击

        这几个方案都逃不过中间人攻击这个手段。

        我们以方案四作为底层方案,设想一下,如果在建立http请求的时候中间人,伪装成客户端和服务端,与不同的双方交流都伪装成对面的一端,这样方案四就漏洞百出,我们根据图示理解。

         中间人干了这么多事情最主要的是假装自己对方通信的另一端,最终为了获取客户端的对称密钥,这样接下来的客户端和服务端之间的通信对中间人毫无秘密可言。

证书

CA认证

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

        我们下一个方案需要证书的帮助。

理解数据签名

        数据签名的目的是防止数据被篡改。

        如果中间人拿到数字签名的数据,将其中的数据做修改,然后通过散列函数形成散列值,但是中间人没有签名者的私钥,不能将散列值转换为签名(即无法将更改之后的数据转换为签名,即使使用自己的私钥加密之后将签名更换,之后的还需要有签名者的公钥来解密,就会原形毕露),最后再验证的时候原有的签名经过签名者的公钥得出的散列值和已经被篡改的数据形成的散列值不一致,这个数字签名就没有用了。

5.非对称加密+对称加密+证书认证

        在客户端和服务器刚⼀建⽴连接的时候, 服务器给客户端返回⼀个证书,证书包含了之前服务端的公钥, 也包含了⽹站的⾝份信息。

        当客户端获取证书后,会检查证书的证伪。

        判断证书的有效期是否过期。

        判断发布证书的机构是否受信任。

        验证证书是否被篡改。从系统中拿到发布证书的机构的公钥,将签名解密,得到hash1(数据摘要),再将数据(证书)通过散列函数得到hash2,比对hash1与hash2的值,相同则为该证书未被篡改过。

完整流程

查看浏览器所信任的证书发布机构

        在edge浏览器中,此处就可以查看

        我们点开一个证书查看细节。

        我们会发现他们包含了我们所说的关键信息。

 中间人有没有可能篡改该证书?

        先前我们说过,这里在简洁的表述。

        中间人篡改证书,将原文修改,但是他没有CA机构的私钥,无法将更改的数据经过hash再通过私钥转形成签名。如果强⾏篡改,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改, 证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈。

中间人是否可以掉包整个证书呢?

        我们要知道,客户端在认证时都是通过认证机构的公钥来检查证书的真伪的,所以中间人没有响应的私钥就是不可行的,转而去申请真的证书,然后用自己的证书将客户端接受的证书进行调换。

        方法是可行的,但是证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。

如何成为中间人?

        ARP欺骗:在局域⽹中,hacker经过收到ARP Request⼴播包,能够偷听到其它节点的 (IP, MAC) 地址。例, ⿊客收到两个主机A, B的地址,告诉B (受害者) ,⾃⼰是A,使得B在发送给A 的数据包 都被⿊客截取。

        ICMP攻击:由于ICMP协议中有重定向的报⽂类型,那么我们就可以伪造⼀个ICMP信息然后发送给 局域⽹中的客⼾端,并伪装⾃⼰是⼀个更好的路由通路。从⽽导致⽬标所有的上⽹流量都会发送到 我们指定的接⼝上,达到和ARP欺骗同样的效果。

总结:

        第一组非对称密钥,CA机构拥有的私钥,客户端拥有公钥,这两个密钥合作起来,来检查证书的真伪。

        第二组非对称密钥,客户端生成对称密钥,通过公钥,将对称密钥加密,发回给服务端,服务端通过私钥解密,获得对称密钥。

        第三组对称密钥,客户端和服务器后续传输的数据都通过这个对称密钥加密解密。

   

        感谢观看,如有错误请指出,我们下次再见。

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

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

相关文章

kubernetes教程 --Pod控制器详解

Pod控制器详解 介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建控制器创建的pod&am…

字母消消乐游戏(C语言版本_2023首篇新作)

上一篇: 2022圣诞树(C语言摇钱树版本) 逐梦编程,让中华屹立世界之巅。 简单的事情重复做,重复的事情用心做,用心的事情坚持做; 文章目录前言一、图形库准备1.EasyX绘图库下载2.EasyX作用二、游戏内画面展示1.游戏开场介绍2.游戏画…

5年软件测试工程师分享的自动化测试经验,一定要看

今天给大家分享一个华为的软件测试工程师分享的关于自动化测试的经验及干货。真的后悔太晚找他要了, 纯干货。一定要看完! 1.什么是自动化测试? 用程序测试程序,用代码取代思考,用脚本运行取代手工测试。自动化测试涵…

0.2opencv库源码编译

如何编译opencv库源码 大家好,我是周旋,感谢大家学习【opencv源码解析】系列,本系列首发于公众号【周旋机器视觉】。 上篇文章我们介绍了如何配置opencv环境,搞清了opencv的包含目录include、静态库链接以及动态库链接的作用。 【…

汽车安全硬件扩展 AUTOSAR SHE SecureHardwareExtensions

SHE(Secure Hardware Extension)在车联网中,被应用在车端ECU中负责安全存储与安全计算。是由HIS(由Audi、BMW、Porsche、Volkswagen组成)制定的标准,中文意思“安全硬件扩展”,是对任何给定微控…

【Python】Python读写Excel表格

简要版,更多功能参考资料1。1 Excel文件保存格式基础概念此处不提,详见资料1。Excel的文件保存格式有两种: xls 和 xlsx。如果你看不到文件后缀,按下图设置可见。xls是Office 2003及之前版本的表格的默认保存格式。xlsx 是 Excel …

Javac命令详解

命令行 用法: javac <options> <source files> 其中, 可能的选项包括:-g 生成所有调试信息-g:none 不生成任何调试信息-g:{lines,vars,source} 只生成某些调试信息-nowarn 不生成任何警告-ver…

学习 Python 之 Pygame 开发坦克大战(一)

学习 Python 之 Pygame 开发坦克大战&#xff08;一&#xff09;Pygame什么是Pygame?初识pygame1. 使用pygame创建窗口2. 设置窗口背景颜色3. 获取窗口中的事件4. 在窗口中展示图片(1). pygame中的直角坐标系(2). 展示图片(3). 给部分区域设置颜色5. 在窗口中显示文字6. 播放音…

MyBatis 之三(查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection)

文章目录1. 参数占位符 #{} 和 ${} 的区别2. ${} 的优点3. SQL 注入问题4. like 查询5. 返回字典映射&#xff1a;resultMap6. 一对一查询&#xff1a;association7. 一对多查询&#xff1a;collection回顾一下&#xff0c;在上一篇 MyBatis 之二&#xff08;增、删、改操作&am…

APP测试中IOS和Android的区别,有哪些注意点?

01、常识性区别 02、导航方式 iOS&#xff1a;Tab放在页面底部&#xff0c;不能通过滑动来切换&#xff0c;只能点击。也有放在上面的&#xff0c;也不能滑动&#xff0c;但有些Tab本身可以滑动&#xff0c;比如天猫的。还有新闻类的应用。 Android&#xff1a;一般放在页面…

Visual Studio 高级调试-(上)

概述编程圈子里隔三差五的就会有场“谁是最强IDE”之争&#xff0c;重要的是我们需要对使用的IDE有充分的了解&#xff0c;正所谓工欲善其事&#xff0c;必先利其器。本文主要讲述Visual Studio常用的调试技巧&#xff0c;包括多类型断点&#xff0c;数据监视&#xff0c;以及多…

MySQL ---基础概念

目录 餐前小饮&#xff1a;什么是服务器&#xff1f;什么是数据库服务器&#xff1f; 一、数据库服务软件 1. 常见数据库产品 2.如何开启和停止MySQL服务 二、数据库术语及语法 1.数据库术语 2.SQL语法结构 3.SQL 语法要点 三、SQL分类 1.数据定义语言&#xff08;D…

LeetCode——1237. 找出给定方程的正整数解

一、题目 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/find-positive-integer-solution-for-a-given-equation/description/ 翻译一下题目 意思是&#xff0c;这是一个二维单调递增的函数&#xff0c;函数一共有 9 …

快速上手GoWeb开发之Gin框架

Go是一门正在快速增长的编程语言&#xff0c;专为构建简单、快速且可靠的软件而设计。 golang提供的net/htp库已经很好了&#xff0c;对于htp的协议的实现非常好&#xff0c;基于此再造框架&#xff0c;也不会是难事&#xff0c;因此生态中出现了很多框架。 Gin: Go 语言编写的…

智能洗地机什么牌子好?智能洗地机排行

要说家庭清洁热门的产品&#xff0c;洗地机肯定首当其冲&#xff0c;集洗吸拖为一体的清洁工具&#xff0c;省时又省力&#xff0c;可谓是家里清洁好助手&#xff0c;今天笔者就为大家介绍几款重量轻、噪音轻、拖地干净的洗地机! 一、CEYEE希亦T800洗地机 在国内&#xff0c;洗…

13.进程---

一、进程的概念 1.可以用ps或top查看进程 2.pid0;交换进程&#xff08;作用是进程调度&#xff09; pid1;init进程&#xff08;作用是系统初始化&#xff09; 3.getpid();//获取自身的进程标识符 4.getppid();//获取父进程的进程标识符 什么是父进程&#xff1f; 答&#x…

【GStreamer 】 TX1中CPU和GPU解码显示海康相机RTSP流

大家好&#xff0c;我是虎哥&#xff0c;今天找了一套海康的相机&#xff0c;想后续测试一下DeepStream用网络相机RTSP流做输入看看后续目标识别和分类。但是还是想先实时看看视频&#xff0c;当然&#xff0c;可以选择VLC去查看&#xff0c;顺道我也用GStreamer 来测试了一下&…

HashMap原理详解

一、hashmap简介 hashmap是Java当中一种数据结构&#xff0c;是一个用于存储Key-Value键值对的集合&#xff0c;每一个键值对也叫作Entry。 二、JDK7的HashMap1、JDK7时HashMap的数据结构 1、在JDK7之前&#xff0c;hashmap底层采用数组链表的数据结构来存储数据 2、插入数据采…

SpringBoot静态资源访问

静态资源路径 类路径下&#xff1a;/resources/static/、/resources/public/、/resources/resources/、/resources/META-INF/resources 这些路径下的资源均可直接访问&#xff1b;通过 http://ip:port/资源名称 访问即可 可在配置文件中对访问路径和访问拦截规则进行设置&…

【ArcGIS Pro二次开发】(5):UI管理_自定义控件的位置

新增的自定义控件一般放在默认的【加载项】选项卡下&#xff0c;但是根据需求&#xff0c;我们可能需要将控件放在新的自定义选项卡下&#xff0c;在自定义选项卡添加系统自带的控件&#xff0c;将自定义的按钮等控件放在右键菜单栏里以方便使用&#xff0c;等等。 下面就以一…