HTTPS的工作过程

news2025/4/16 23:31:50

        HTTPS就是对HTTP进行了加密,因为要保证数据安全,就需要进行加密,网络中不再直接传输明文了,而是加密之后的密文,加密的方法有很多,但是整体可以分为两大类:对称加密和非对称加密

对称加密

        对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文,引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的 真实内容是啥了

        但事情没这么简单. 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因此服务器就需要维护每个客户端 和每个密钥之间的关联关系, 这是一件很麻烦的事情

        比较理想的做法, 就是能在客户端和服务器建立连接的时候, 由客户端发送对HTTP数据进行加密的对称密钥给服务器

        但是如果直接把对称密钥明文传输, 那么黑客也就能获得对称密钥了,所以对称密钥在发送给服务器时也必须是加密传输

非对称加密

        非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥".

        公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多.

        通过公钥对明文加密, 变成密文 通过私钥对密文解密, 变成明文,也可以反着用 通过私钥对明文加密, 变成密文 通过公钥对密文解密, 变成明文

使用非对称加密来传输对称密钥的流程

        1.首先由服务器生成一组公钥-私钥,服务器自己留下私钥,把公钥发送给客户端

        2.客户端收到公钥以后,用收到的公钥加密对称密钥,并把加密后的对称密钥发送给服务器

        3.服务器收到加密后的对称密钥后,用保留着的私钥进行解密,获得对称密钥的内容

        4.服务器用收到的对称密钥加密HTTP应答数据,并发送给客户端

        5.客户端收到应答数据后,用对称密钥进行解密,获得HTTP应答数据,此时客户端就知道服务器已经获得了对称密钥,客户端就用对称密钥加密业务数据发送给服务器

        6.此后,客户端和服务器用对称密钥加密数据进行通信即可,因为对称密钥只有客户端和服务器双方有,黑客就算截获到了密文,没有对称密钥也不知道内容

        由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商对称密钥的时候使用非对称加密, 后续双方都有对称密钥了就不需要非对称加密了

采用非对称加密就能保证数据安全传输了吗❓

        答案是远远不够滴,因为黑客又想到了“中间人攻击”的方式来获得对称密钥

        

        现在就让我来详细描述一下黑客是如何进行中间人攻击的

        1.首先由服务器生成一组公钥pub1-私钥pri1,服务器自己留下私钥pri1,把公钥pub1发送给客户端

        2.黑客先客户端一步截获到了服务器发送给客户端的公钥pub1,黑客自己又生成了一组公钥pub2-私钥pri2,黑客将自己生成的公钥pub2发送给客户端

        3.客户端用黑客发送过来的公钥pub2加密对称密钥,并把加密后的对称密钥发送给服务器

        4.黑客先服务器一步获取到加密后的对称密钥,由于对称密钥是用黑客发送的公钥pub2加密的,所以黑客可以用私钥pri2进行解密,获取到对称密钥的内容,然后黑客再用服务器发送的公钥pub1加密对称密钥,再把加密后的对称密钥发送给服务器

        5.服务器收到对称密钥后,由于黑客是用服务器发送过来的公钥pub1加密的,所以服务器用私钥pri1可以成功解密,获得对称密钥

        6.此时,客户端和服务器都不知道对称密钥其实已经被获取了,之后用这个对称密钥发送的业务数据都将被黑客截获,被读取到其中的内容

        看完之后是否感叹黑客的手段,但聪明的程序猿还是有办法解决

引入证书

        在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书. 这个证书包含了刚才的公钥, 也包含了网站的身份信息.

         这个证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书. (类似于去公安局办个身份证).

        这个证书可以理解成是一个结构化的字符串, 里面包含了以下信息: 证书发布机构 证书有效期 公钥 证书所有者 签名 ......

        当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的)

        通过证书客户端便能知道当前的公钥是服务器发送的还是黑客发送的,便防止了黑客进行中间人攻击

黑客有没有可能去修改证书中的公钥呢❓

        我们上面提到,证书中包含了服务器要发送给客户端的公钥,那么黑客有没有可能去修改证书中的公钥呢,这是有可能的,但是客户端能够发现证书中的公钥被修改

        客户端是如何发现证书被修改过的呢❓

        证书中有一个属性是数字签名,实际上就是一个加密后的校验和,校验和是通过证书中的内容和算法计算出来的

        当黑客修改证书中的公钥发送给客户端,客户端在收到证书后会对证书中的数字签名进行解密,获得校验和,客户端还会再根据证书中的内容计算一次校验和,比较当前计算的校验和与数字签名中的校验和是否相同,要是黑客修改过公钥的话校验和就肯定不相同,客户端就能够发现了

黑客有没有可能公钥和数字签名一起修改呢❓

        聪明的小伙伴可能想到了这个问题,我们前面提到,客户端之所以能够发现证书中的公钥被修改过,是因为数字签名解密后得到的校验和与实际计算出来的校验和不同,那黑客把公钥和数字签名都改了,让客户端计算出来的校验和与数字签名解密得到的校验和一样,该怎么办呢

        实际上黑客是可以公钥和数字签名一起修改的,但还是会被客户端发现

        因为数字签名实际上是通过CA机构私钥加密后的校验和,CA机构公钥是内置于操作系统中的,所以只要有操作系统的电脑都有CA机构公钥,能够去解密数字签名,包括黑客

        所以黑客能够解密数字签名,将证书中的公钥以及数字签名全部修改,但修改以后黑客不能将数字签名再加密回去,因为CA机构的私钥黑客是没有的,要是黑客用自己的私钥对数字签名进行加密的话,客户端用内置的CA机构的公钥就不能解密,客户端就知道了这个证书有问题,也就不会用这个证书中的公钥加密数据了

总结HTTPS的工作过程

        

        

                        我们对于HTTPS工作过程的讨论到这里就结束了,但其实黑客还是会有办法去获取到对称密钥,毕竟道高一尺魔高一丈嘛,但聪明的程序猿还是会有办法的,这里就不过多讨论了

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

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

相关文章

Vue中的深度监听(Deep Watch):详细解析与实际示例

Vue中的深度监听(Deep Watch):详细解析与实际示例 Vue.js 是一款流行的前端 JavaScript 框架,其响应式系统是其核心特性之一。通过响应式系统,Vue允许开发者轻松地监听数据的变化并对其做出响应。在某些情况下&#x…

零基础学前端(七)将项目发布成网站

我们学习了HTML和CSS,已经可以做出精美的静态网页。我们不慌学习JavaScript,因为Javascript的作用是为网页增加动作和数据交换,只能让网页更完美而已,现在网页的基础我们已经可以搭建,我们不妨先将网站发布出去&#x…

uniapp选择地址弹窗组件

1.效果 2.子组件在components里面创建组件AddreessWindow <template><view style"position: relative;z-index: 999999 !important;"><view class"address-window" :class"value true ? on : "><view class"title…

Controller统一异常处理和yaml配置

目录 Controller统一异常处理 url解析 static下静态资源文件的访问 配置类 如何访问static下的资源文件 yaml基础语法 注解赋值 批量注入 单个注入 Controller统一异常处理 Controller统一异常处理ControllerAdvice&#xff1a;统一为Controller进行"增强" …

聊聊Spring中循环依赖与三级缓存

先看几个问题 什么事循环依赖&#xff1f;什么情况下循环依赖可以被处理&#xff1f;spring是如何解决循环依赖的&#xff1f; 什么是循环依赖&#xff1f; 简单理解就是实例 A 依赖实例 B 的同时 B 也依赖了 A Component public class A {// A 中依赖 BAutowiredprivate B b…

【表格插入小计行】el-table表格,数组对象中根据某字段插入小计行计算数据

前言 功能解释&#xff1a;遇到的一个需求&#xff0c;是表格的tabledata数组。里面有科室医生还有很多消费指标等数据。然后需要我排序后把科室放在一起。然后在每个科室下面添加一行数据&#xff0c;是小计行。用于计算上面相同科室的所有数据汇总。然后最下面再来个合计行&…

【深度学习实验】前馈神经网络(四):自定义逻辑回归模型:前向传播、反向传播算法

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 逻辑回归Logistic类 a. 构造函数__init__ b. __call__(self, x)方法 c. 前向传播forward d. 反向传播backward 2. 模型训练 3. 代码整合 一、实验介绍 实现逻…

JavaWeb 学习笔记 5:JSP

JavaWeb 学习笔记 5&#xff1a;JSP 简单的说&#xff0c;JSP 就是 Java Html&#xff0c;JSP 的出现是为了让 Java Web 应用生成动态页面更容易。 1.快速开始 1.1.依赖 添加 JSP 依赖&#xff1a; <dependency><groupId>javax.servlet.jsp</groupId>&…

华为云云耀云服务器L实例评测|使用docker部署禅道系统

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 文章目录 前言准备工作华为云账号注册充值、购买服务器 服务器操作密码修改登录远程工具 禅道部署简介 部署…

【校招VIP】java语言考点之序列化

考点介绍&#xff1a; 将java对象转换为字节序列的过程称为对象的序列化。对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上&#xff0c;通常存放在一个文件中。 2) 在网络上传送对象的字节序列。 java语言考点之序列化-相关题目及解析内容可点击文章末尾链…

PyCharm:No Python interpreter configured for the project

一、问题概述 Your 的 Pycharm 软件创建完项目后&#xff0c;结果无法运行&#xff0c;观察后&#xff0c;在Pycharm代码编辑区上面出现了这样的一个黄色条提示&#xff1a;No Python interpreter configured for the project 【问题】在您的Python项目中无Python解释器…

金融业需要的大模型,是一个系统化工程

今年年初&#xff0c;在AIGC刚刚开始爆火的时候&#xff0c;我们曾经采访过一位AI领域的专家。当我们提问哪个行业将率先落地大模型时&#xff0c;他毫不犹豫地说道&#xff1a;“金融。” 金融行业场景多、数据多、知识多&#xff0c;这样的“三多”特点让其成为AI大模型发挥价…

yarn安装依赖时报错 error An unexpected error occurred:

一切起因是因为前一天安装了volta管理node&#xff0c;第二天启动项目&#xff0c; 显示error An unexpected error occurred: “https://registry.npmmirror.com/webpack-aliyun-oss/-/webpack-aliyun-oss-0.2.6.tgz: Request failed “404 Not Found””. 项目启动时发现报错…

Selenium Grid 的搭建方法

传统 Selenium Grid 的搭建方法 搭建一个具有 1 个 Node 的 Selenium Grid。那么通常来讲我们需要 2 台机器&#xff0c;其中一台作为 Hub&#xff0c;另外一台作为 Node&#xff0c;并要求这两台机器已经具备了 Java 执行环境。 1.通过官网下载 selenium-server-standalone-…

Java 21 发布,新功能助力开发更高效

Java 21 是 Java SE 平台的最新长期支持 (LTS) 版本&#xff0c;于 2023 年 9 月 19 日发布。它包括了一系列新功能和改进&#xff0c;可以让开发人员编写更高效、更可靠、更安全的 Java 应用程序。 新功能亮点 Java 21 的新功能包括&#xff1a; 虚拟线程&#xff1a;虚拟线程…

【 Tkinter界面-练习05】 event和bind

一、说明 事件和动作有关&#xff1b;所有的界面都与运动有关&#xff0c;本篇将对事件、事件触发、绑定回调函数等&#xff0c;其实是一系列部件配合的复杂的过程&#xff0c;这些过程牵扯到系统如何设计&#xff0c;线程、消息队列循环等。本篇将详细介绍各种因素的关系。 二…

BCC源码编译和安装

接前一篇文章&#xff1a;BCC源码下载 1. 进入源码根目录 进入到BCC源码根目录。命令及结果如下&#xff1a; $ cd bcc ~/eBPF/BCC/bcc$ ls cmake CONTRIBUTING-SCRIPTS.md docs images libbpf-tools man scripts src CMakeLists.txt …

Matlab论文插图绘制模板第115期—带Latex公式的图

之前的文章中&#xff0c;分享了Matlab带线标记的图&#xff1a; 带阴影标记的图&#xff1a; 带箭头标记的图&#xff1a; 带图形标记的图&#xff1a; 进一步&#xff0c;分享一下带Latex公式的图&#xff0c;先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『…

http1和http2的主要区别

主要有四个方面&#xff1a; 二进制分帧多路复用服务器主动推送头部压缩 将前两点结合来说&#xff0c;首先 二进制分帧 帧&#xff1a;HTTP/2 数据通信的最小单位&#xff1b; 消息&#xff1a;HTTP/2 中&#xff0c;例如在请求和响应等操作中&#xff0c;消息由一个或多个…