关于HTTPS

目录

什么是加密

对称加密

非对称加密

中间人攻击

引入证书


HTTPS是一个应用层的协议,是在HTTP协议的基础上引入了一个加密层.

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

运营商劫持事件

未被劫持的效果,点击下载按钮,就会弹出天天动听的下载链接.

天天动听被劫持的效果,点击下载按钮,就会弹出QQ浏览器的下载链接.

由于我们通过网络传输的任何数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改.

点击下载按钮,起始就是在给服务器发送了一个HTTP请求,获取到的HTTP响应就包含了该App的下载链接,运营商劫持之后,就发现这个请求是要下载天天动听,那么就会自动的把交给用户的响应给篡改成QQ浏览器的下载地址了.

不止运营商可以劫持,其他的黑客也可以利用类似的手段来进行劫持,来窃取用户的隐私信息或者篡改内容.

所以,在互联网上,明文传输时比较危险的事情.

HTTPS就是在HTTP的基础上进行了加密,进一步的来保证用户的信息安全.


什么是加密

HTTPS=HTTP+加密层(SSL),SSL是用来加密的协议,也叫做TLS.

进行安全传输,核心就是加密.

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

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

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


对称加密

加密其中一种最简单有效的办法,叫做对称加密.

加密过程:明文+密钥=>密文;

解密过程:密文+密钥=>明文.

同一个密钥,既可以用来加密,也可以用来解密,这就是对称密钥.

对称加密安全性的前提是,密钥不能被黑客知道.

由于黑客不知道密钥是什么,即使黑客截获了加密的数据,也不知道数据是什么意思.

但事情并没有这么简单,服务器同一时刻是要给很多客户端提供服务的,这么多客户端,每个客户端的密钥必须是不同的(如果是相同的,黑客作为一个客户端就很容易把密钥获得),因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这是个很麻烦的事情.

更理想的做法是在客户端和服务器建立连接的时候,双方协定确定这次的密钥是什么 .

但是如果直接把密钥进行明文传输,那么黑客也就能获得密钥了,此时后续的加密操作就形同虚设了.

因此密钥的传输必须加密传输.

但是此时如果还对密钥的传输采用对称加密的方式,就仍需要双方协定一个密钥的密钥,显然这是行不通的.

那么此时就需要引入非对称加密了.


非对称加密

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

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

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

客户端在本地生成对称密钥,通过公钥加密,发给服务器.

由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥.

服务器通过私钥解密,还原出客户端发送的对称密钥,并且使用这个对称密钥加密给客户端返回的响应数据.

后续客户端和服务器的通信都只用对称加密即可.由于该密钥只有客户端和服务器两个主机知道,其他设备不知道密钥即使截获数据也没有意义.

注意:由于对称加密的效率比非对称加密高很多,因此只有在开始阶段协商密钥的时候采用非对称加密,后续的传输仍然使用对称加密.

中间人攻击

有了上述过程之后,那么客户端如何获取到公钥呢?
如果采用简单询问的方式,就会出现中间人攻击的情况.

黑客在中间设备自己也生成一对非对称密钥,称为pub2和pri2.同时黑客自己存下pub1.黑客拿着自己的pri2进行解密,就拿到了对称密钥key,然后黑客继续使用服务器的pub1公钥,对key重新加密,继续传送给服务器.

这就导致对称密钥泄露了,此时黑客就可以拿着这个对称密钥对后续的数据进行篡改了.

引入证书

解决这个中间人攻击的关键,在于让客户端能够辨别当前的公钥响应是服务器真实的公钥.

引入证书就可以解决这个问题.

在客户端和服务器刚建立连接的时候,服务器就不单单给客户端返回公钥了,而是返回一个证书.

在这个证书里就包含了刚才的公钥,也包含了网站的身份信息.

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

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

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

如何校验?

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

证书可以在浏览器里查看

黑客能够篡改证书?

认证机构也有一组公钥私钥,私钥用来加密hash值得到签名了,公钥是客户端拥有的使用公钥解密签名获取hash值.

如果黑客替换了公钥,此时客户端计算的hash2和签名解密出来的hash1就对不上了,客户端就知道无效了.

另外黑客不知道认证机构的私钥,即使黑客自己计算好了新的篡改后的hash值,也无法加密生成签名!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app引入vant表单(附源码)

新建项目 下载安装vant npm i vant main.js引入 import { Form } from vant; import { Field } from vant;Vue.use(Form); Vue.use(Field);代码引入 <van-form submit"onSubmit"><van-fieldclass"rePwd"v-model"username"name"请…

代码随想录刷题笔记(DAY2)

今日总结&#xff1a;今天在学 vue 做项目&#xff0c;学校还有很多作业要完成&#xff0c;熬到现在写完了三道题&#xff0c;有点太晚了&#xff0c;最后一道题的题解明天早起补上。&#xff08;补上了&#xff09; Day 2 01. 有序数组的平方&#xff08;No. 977&#xff09;…

【qt】解决qt里编辑qss后失效问题(qt编码问题)

1、先创建qss文本stylesheet.qss 以按钮为例 QPushButton {background-color:rgb(240,255,255);color: rgb(0, 0, 2);border-style: outset;border-color: beige;border-radius: 10px; }/* hover按钮悬浮&#xff0c;鼠标悬浮在按钮上的状态&#xff0c;按钮颜色 */QPushButto…

Linux调试工具—gdb

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;HEART BEAT—YOASOBI 2:20━━━━━━️&#x1f49f;──────── 5:35 &#x1f504; ◀️ ⏸ ▶️ ☰ …

HackTheBox - Medium - Linux - Encoding

Encoding 前言 经过10个月左右的网安自学&#xff0c;我想说的第一句话无疑是&#xff1a;感谢TryHackMe。当然&#xff0c;后续的HackTheBox&学院、CRTO等等&#xff0c;对我的帮助都很大。 许多师傅们都在年度总结&#xff0c;我也看了大家都收获很多&#xff0c;都很…

软件工程PPT 笔记摘录(2)

分析软件需求 UML 提供了用例图来分析和描述用例视角的软件需求模型 UML 提供了交互图和状态图来描述行为视角的软件需求模型 UML 提供了类图来描述和分析业务领域的概念模型 顺序图&#xff1a;强调消息传递的时间序 通信图&#xff1a;突出对象间的合作 类图&#xff0…

重温MySQL之索引那些事

文章目录 前言一、概念1.1 索引作用1.2 索引类型1.3 B树索引结构1.4 B树索引源码分析 二、查询计划2.1 explain2.2 id2.3 select_type2.4 table2.5 partitions2.6 type2.7 possible_keys2.8 key2.9 key_len2.10 ref2.11 rows2.12 filtered2.13 Extra 三、索引优化3.1 索引失效3…

C#高级 02异步编程

基础知识 1.什么是异步任务 包含了异步任务的各种状态的一个引用类型 1)正在运行、完成、结果、报错等 2)另有ValueTask值类型版本对于异步任务的抽象 1)开启异步任务后&#xff0c;当前线程并不会阻塞&#xff0c;而是可以去做其他事情 2)异步任务&#xff08;默认&#xff…

Java技术栈 —— Nginx的使用

Java技术栈 —— Nginx的使用 一、认识Nginx二、搭建Nginx环境2.1 在Ubuntu上安装Nginx 三、使用Nginx3.1 配置负载均衡(HTTP) 一、认识Nginx 企业需要运行多个相同的副本&#xff0c;并将负载分散在整个系统集群上&#xff0c;为了高性能的负载均衡&#xff0c;引入了Nginx代…

【Vue2 + ElementUI】el-table中校验表单

一. 案例 校验金额 阐述&#xff1a;校验输入的金额是否正确。如下所示&#xff0c;点击【编辑图标】会变为input输入框当&#xff0c;输入金额。当输入框失去焦点时&#xff0c;若正确则调用接口更新金额且变为不可输入状态&#xff0c;否则返回不合法金额提示 <templat…

Python pycharm编辑器修改代码字体

在pycharm编辑器下修改代码字体&#xff0c;可以按照以下步骤&#xff1a; 点开上图所示的菜单&#xff0c; 再点击File->Settings&#xff0c;进入设置页面。 我们找到Editor下的Font并点选&#xff0c;然后我们就可以在右侧修改字体相关配置了。 这里建议使用等宽字体&…

SparkStreaming与Kafka整合

1.3 SparkStreaming与Kafka整合 1.3.1 整合简述 kafka是做消息的缓存&#xff0c;数据和业务隔离操作的消息队列&#xff0c;而sparkstreaming是一款准实时流式计算框架&#xff0c;所以二者的整合&#xff0c;是大势所趋。 ​ 二者的整合&#xff0c;有主要的两大版本。 kaf…

webpack的深入学习与实战(持续更新)

一、何为Webpack Webpack是 一个开源的JavaScript模块打包工具&#xff0c;其最核心的功能是解决模块之间的依赖&#xff0c;把各个模块按照特定的规则和顺序组织在一起&#xff0c;最终合并为一个JS文件或多个。 二、带宽的换算 目前我们的云服务器带宽为5M 三 、bundle 体…

二叉树题目:根到叶路径上的不足结点

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;根到叶路径上的不足结点 出处&#xff1a;1080. 根到叶路径上的不足结点 难度 6 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root…

maven中dependencyManagement标签

简介 dependencyManagement正如其名&#xff0c;用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后&#xff0c;子项目&#xff08;module&#xff09;中引用相同的依赖时可以不指定version标签自动引入…

【python报错】UserWarning: train_labels has been renamed targets

UserWarning: train_labels has been renamed targetswarnings.warn(“train_labels has been renamed targets”) 这是一条 Python 警告信息&#xff0c;它表示 train_labels 这个变量已经被重命名为 targets&#xff0c;在将来的版本中可能会移除 train_labels。因此&#x…

51蛋骗鸡595级联1616点阵

缘由如何用单片机独立按键控制16*16LED点阵模块点亮和熄灭?求指导 - 24小时必答区 #include "reg52.h" unsigned char code DuLiAnJian[]{1,2,4,8,16,32,64,128,254,253,251,247,239,223,191,127}; unsigned char code CHARCODE[12][8]{ //{0xFD,0xFD,0x0D,0xED,0x…

如何开发一个google插件(二)

前言 在上一篇文章如何开发一个google插件(一)里主要介绍了google插件的基本结构。 在这篇文章中主要结合reactwebpack进行一个代码演示&#xff0c;源码地址&#xff1a;源码地址 下载源码后打开浏览器的扩展程序管理->加载已解压的扩展程序&#xff0c;即可调试插件 此…

在 Spring 中操作 Redis

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对博主首页也很感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f4dc;redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿 目录 1、引入依赖 2、对 Redis 的配置文件进行书写 3、S…

Python机器学习原理与算法实现中绘制散点图和线图的操作

作为对数据进行预处理的重要工具之一&#xff0c;散点图&#xff08;Scatter Diagram&#xff09;深受专家、学者们的喜爱。散点图的简要定义就是点在直角坐标系平面上的分布图。研究者对数据制作散点图的主要出发点是通过绘制该图来观察某变量随另一变量变化的大致趋势&#x…