HTTPS的介绍以及工作过程

目录

一.HTTPS是什么?

HTTPS的介绍 

 HTTPS产生的背景

二.https的安全机制

加密是什么

如何加密

客户端如何获取公钥

总结


🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主
🎥 本文由 tq02 原创,首发于 CSDN🙉
🎄 本章讲解内容:HTTPS的学习  

在学习本文之前,需要学习http的详细知识,才能明白什么是https,以及它的作用。

http详解链接:http://t.csdnimg.cn/TnKcz


  🎥学习专栏:  C语言         JavaSE       MySQL基础     多线程学习

一.HTTPS是什么?

HTTPS的介绍 

     https是应用层协议. 是在 HTTP 协议的基础上引入了一个加密层。而为什么需要出现加密层呢?

原因:HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况.

 HTTPS产生的背景

        当时主流使用HTTP,但是发生了一件事情,导致HTTPS的产生。运营商劫持

什么是运营商劫持呢?

        就是当你在浏览器里下载软件时,某移、某通和某信的的网络设备(路由器, 交换机等)会接收到你网络的网络传输的任何的数据包,运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改。

简单而言,当你需要下载酷狗音乐时,给服务器发送HTTP请求,但是被运营商劫持了,而且被发现了你要下载的内容,而它却给你修改为了QQ音乐的下载链接。

运营商这样的目的:为了流量,为了万物之源----钱。

思考一下:http传输数据竟然如此容易会被发现,那么对于黑客而言,也可以窃取用户隐私信息, 或者篡改内容。因此很不安全!!!

二.https的安全机制

        由于http的传输等方面很棒,但是如果因为不安全而放弃重新研发,那么成本太高,因此我们可以通过在HTTP,在其本身上下手,在其基础上进行加密操作!

加密是什么

http传输的是明文,加密就是把明文进行一系列操作,生成密文

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

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

如何加密

        加密的方式有很多, 但是整体可以分成两大类: 对称加密 非对称加密

对称加密:
        对称加密其实就是通过同一个 " 密钥 " , 把明文加密成密文 , 并且也能把密文解密成明文 .

举例 简单对称加密---按位异或

        明文 a = 1234, 密钥 key = 8888;加密 a ^ key 得到的密文 b 为 9834.
             针对密文 9834 再次进行运算 b ^ key, 得到的就是原来的明文 1234.    
注: 按位异或只是最简单的对称加密. HTTPS 中并不是使用按位异或.                               

而使用了对称加密,即使数据被截获了,黑客不会知道密钥是什么!但是实际上并没有那么简单!

原因:每个客户端的密钥必须是不同的,不然大部分人用一样的,那么相同密钥扩散太多,黑客也能拿到。而服务器真的可以维护每一个客户端和密钥之间的关联关系吗?不能。

因此就出现了一种,双方先沟通,协商密钥是什么,在进行密钥传输的方式。

如上图的形式,但是傻子也看得出来,第一次就这样传输,黑客不就知道了吗?因此为了争对第一次的传输,我们引入非对称加密。

非对称加密
        非对称加密要用到两个密钥, 一个叫做 " 公钥 ", 一个叫做 " 私钥 "
公钥和私钥是配对的 . 最大的缺点就是 运算速度非常慢 ,比对称加密要慢很多 .
  • 通过公钥对明文加密 , 变成密文
  • 通过私钥对密文解密, 变成明文
注:也可以反着使用。

用法:A 要给 B 一些重要的文件, 但是 B 可能不在. 于是 A B 提前做出约定: B 说: 我桌子上有个盒子, 然后我给你一把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来 开锁取文件. 在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥. 公钥给谁都行(不怕泄露), 但是私钥只有 B 自己持有. 持有私钥的人才能解密.

  • 客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器.
  • 由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密
  • 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据.
  • 后续客户端和服务器的通信都只用对称加密即可

客户端如何获取公钥

        有没有想过,如果一开始就有公钥,那为什么还需要密钥呢?不就是应该客户端一个密钥吗?因此,我们需要明白公钥如何获取!

获取公钥:        

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

    客户端取得证书,对证书进行校验,防止伪造的可能。校验手段

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
  • 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash (称为据摘要), 设为 hash1. 然后计算整个证书的 hash , 设为 hash2. 对比 hash1 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的.

证书含有以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名

也就是说,靠证书获取服务器赠的公钥!!!

总结

        HTTPS就是HTTP的基础上加密了,更加安全,不会轻易被黑客盗取信息。而加密方式:使用了密钥加密。

工作流程分三步:

  1. 第一组 ( 非对称加密 ) : 用于校验证书是否被篡改 . 服务器持有私钥 ( 私钥在注册证书时获得 ), 客户端持有公 钥( 操作系统包含了可信任的 CA 认证机构有哪些 , 同时持有对应的公钥 ). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名 , 从而校验证书内容是否是篡改过
  2. 第二组 ( 非对称加密 ): 用于协商生成对称加密的密钥 . 服务器生成这组 私钥 - 公钥 对 , 然后通过证书把公钥传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密 , 传输给服务器 , 服务器通过私钥解密获取到对称加密密钥.
  3. 第三组 ( 对称加密 ): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密 .

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

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

相关文章

OkHttp的配置

一、拦截器 1.添加拦截器的作用: 每次在请求过程中就会回调一次intercept方法 2.拦截器的回调方法里我们可以做那些事情: 当前的请求还没有发给服务器,比如我们在与服务器通信的时候,一个应用中很多地方都会跟服务器发起通信。…

Linux端口流量统计

Ubuntu sudo apt-get install wiresharkCentOS sudo yum install wiresharkUDP端口统计 sudo tshark -i <interface> -f "udp port <port_number>" -a duration:60 -q -z conv,udp请将 替换为你的网络接口&#xff0c;<port_number> 替换为要监…

ASP.NET Core 使用 SignalR 实现实时通讯

&#x1f433;简介 SignalR是一个用于ASP.NET的库&#xff0c;它允许服务器代码向连接的客户端实时发送推送通知。它使用WebSockets作为底层传输机制&#xff0c;但如果浏览器不支持WebSockets&#xff0c;它会自动回退到其他兼容的技术&#xff0c;如服务器发送事件&#xff…

Linux常用命令----shutdown命令

文章目录 命令概述参数解释使用示例及解释 命令概述 shutdown 命令用于安全地关闭或重启 Linux 系统。它允许管理员指定一个时间点执行操作&#xff0c;并可发送警告信息给所有登录的用户。 参数解释 时间参数 ([时间]): now: 立即执行关闭或重启操作。m: 在 m 分钟后执行操作…

centos7.9 + gitlab12.3.0安装

本文在centos7.9操作系统上安装gitlab 12.3.0&#xff0c;gitlab官方最新的版本已经是16.6.0了&#xff0c;这里仍然安装12.3.0版本的原因是汉化包的最新版本是12.3.0&#xff0c;如果汉化包的版本和gitlab的版本不对应&#xff0c;会出现汉化他无法启动的现象。 1、安装依赖 …

Web UI自动化测试框架

WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动化测试框架。 特点 提供更加简单API编写自动化测试。提供脚手架&#xff0c;快速生成自动化测试项目。自动生成HTML测试报告生成。自带断言方法&#xff0c;断言…

07-学成在线修改/查询课程的基本信息和营销信息

修改/查询单个课程信息 界面原型 第一步: 用户进入课程列表查询页面,点击编辑按钮编辑课程的相关信息 第二步: 进入编辑界面显示出当前编辑课程的信息,其中课程营销信息不是必填项,修改成功后会自动进入课程计划编辑页面 查询课程信息 请求/响应数据模型 使用Http Client测…

89基于matlab的人工蜂群和粒子群混合优化的路径规划算法

基于matlab的人工蜂群和粒子群混合优化的路径规划算法&#xff0c;起点和终点确定的前提下&#xff0c;在障碍物中寻找最佳路径。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 89人工蜂群和粒子群混合优化 (xiaohongshu.com)https://www.xiaohongshu.com/e…

【Vue】绝了!这生命周期流程真...

hello&#xff0c;我是小索奇&#xff0c;精心制作的Vue系列持续发放&#xff0c;涵盖大量的经验和示例&#xff0c;如果对您有用&#xff0c;可以点赞收藏哈~ 生命周期 Vue.js 组件生命周期&#xff1a; 生命周期函数&#xff08;钩子&#xff09;就是给我们提供了一些特定的…

Android flutter项目 启动优化实战(二)利用 App Startup 优化项目和使用flutterboost中的问题解决

背景 书接上回&#xff1a; Android flutter项目 启动优化实战&#xff08;一&#xff09;使用benchmark分析项目 已经分析出了问题: 1.缩短总时长&#xff08;解决黑屏问题、懒启动、优化流程&#xff09;、2.优化启动项&#xff08;使用App Startup&#xff09;、3.提升用…

java基础-IO

1、基础概念 1.1、文件(File) 文件的读写可以说是开发中必不可少的部分&#xff0c;因为系统会存在大量处理设备上的数据&#xff0c;这里的设备指硬盘&#xff0c;内存&#xff0c;键盘录入&#xff0c;网络传输等。当然这里需要考虑的问题不仅仅是实现&#xff0c;还包括同步…

【问题系列】消费者与MQ连接断开问题解决方案(一)

1. 问题描述 当使用RabbitMQ作为中间件&#xff0c;而消费者为服务时&#xff0c;可能会出现以下情况&#xff1a;在长时间没有消息传递后&#xff0c;消费者与RabbitMQ之间出现连接断开&#xff0c;导致无法处理新消息。解决这一问题的方法是重启Python消费者服务&#xff0c;…

redis运维(二十二)redis 的扩展应用 lua(四)

一 最佳实践 ① 铺垫 最佳实践&#xff1a;1、把redis操作所需的key通过KEYS进行参数传递2、其它的lua脚本所需的参数通过ARGV进行传递. redis lua脚本原理 Redis Lua脚本的执行原理 ② 删除指定的脚本缓存 ③ redis集群模式下使用lua脚本注意事项 1、常见报错现象 C…

草图大师sketchup道路怎么快速种树?

草图大师sketchup道路怎么快速种树&#xff1f;草图大师中的道路图纸想要在道路两旁种树&#xff0c;该怎么快速给道路种树呢&#xff1f;下面我们就来看看详细的教程&#xff0c;需要的朋友可以参考下 草图大师sketchup中想要快速种树&#xff0c;该怎么种多棵树呢&#xff1…

别太担心,人类只是把一小部分理性和感性放到了AI里

尽管人工智能&#xff08;AI&#xff09;在许多方面已经取得了重大进展&#xff0c;但它仍然无法完全复制人类的理性和感性。AI目前主要侧重于处理逻辑和分析任务&#xff0c;而人类则具有更复杂的思维能力和情感经验。 人类已经成功地将一些可以数据化和程序化的理性和感性特征…

JavaEE进阶学习:Bean 作用域和生命周期

1.Bean 作用域 .通过一个案例来看 Bean 作用域的问题 假设现在有一个公共的 Bean&#xff0c;提供给 A 用户和 B 用户使用&#xff0c;然而在使用的途中 A 用户却“悄悄”地修改了公共 Bean 的数据&#xff0c;导致 B 用户在使用时发生了预期之外的逻辑错误。 我们预期的结果…

leaflet对线设置渐变色

效果展示&#xff1a; 引用leaflet-polycolor组件 npm install leaflet-polycolor .vue文件中使用 import leafletPolycolor from leaflet-polycolor; leafletPolycolor(L); const latLngs [[37.03, 111.92], [37.53444, 111.98555], [36.88, 112.12], [37.53444, 112.24], […

Redis深入理解-主从架构下内核数据结构、主从同步以及主节点选举

Redis 主从挂载后的内核数据结构分析 主节点中&#xff0c;会通过 clusteNode 中的 slaves 来记录该主节点包含了哪些从节点&#xff0c;这个 slaves 是一个指向 *clusterNode[] 数组的数据结构从节点中&#xff0c;会通过 clusterNode 中的 slaveof 来记录该从节点属于哪个主…

04_Flutter自定义Slider滑块

04_Flutter自定义Slider滑块 一.Slider控件基本用法 Column(mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[Text("sliderValue: ${_sliderValue.toInt()}"),Slider(value: _sliderValue,min: 0,max: 100,divisions: 10,thumbColor: Colors.…

《微信小程序开发从入门到实战》学习三十四

4.2 云开发JSON数据库 MySQL、Oracle之类的“关系型数据库”。JSON数据库是“非关系型数据库”&#xff0c;没有行表列的概念。 4.2.1 JSON数据库基本概念 集合:一个数据库有多个集合&#xff0c;一个集合存储通常是同一类数据&#xff0c;可看作为JSON数组&#xff0c;数组…