HTTPS协议原理

HTTPS协议原理

  • 一.前言-为何要有https协议
  • 二.加密与中间方劫持
    • 1.什么是加密
    • 2.为何要加密
    • 3.对称加密
      • 1.小例子
        • 2.好处和缺点
    • 4.非对称加密
    • 5.数据指纹/数据摘要
  • 三.站在设计者的角度提出方案
    • 1.只使用非对称加密 : 且只有server有密钥
    • 2.只使用非对称加密 : 且双方都有密钥
    • 3.非对称+对称 : client一个对称,server一对非对称
    • 4.如何解决中间人攻击问题
  • 四.CA证书
    • 1.介绍
    • 2.CA证书如何防止中间人攻击

一.前言-为何要有https协议

http协议在功能方面已经非常完善了,只不过安全性没有保障,因为数据都是明文传输的
get方法直接将数据以url参数的方式进行传递,post方法将数据以请求体的方式进行传递
虽然post比get安全那么一点,但是只要数据是明文传递的,那就一定不安全(隐私泄漏,数据被篡改等等安全问题)

所以大佬们在http协议之上引入了一个加密层,设计出了https协议

二.加密与中间方劫持

1.什么是加密

加密就是把 明文(要传输的信息)经过一系列变换,转换成密文
解密就是把 密文经过一系列变换,转换成明文

在这个加密和解密的过程中需要一些数据来辅助进行,这些数据被称为密钥

加密和解密涉及到密码学的范畴,我们只需要知道总是有很多方法对数据进行加密解密的,至于怎么加密和解密,有密码学的大佬负责研究

2.为何要加密

因为只要数据是明文传递的,那就一定不安全(隐私泄漏,数据被篡改等等安全问题)
在数据传输过程中,有中间方会进行劫持,窃取隐私信息或者篡改内容等等(至于中间方是谁? 技术既能向善又能向恶,都是被金钱蒙蔽了双眼…)
(想象一下,如果你在使用支付宝进行支付操作时,你的用户账号,密码和支付密码被中间方盗取了…当然这种情况现在不会发生了,因为有了https,人脸识别,指纹识别等等技术)

3.对称加密

对称加密是指:

加密和解密所用的密钥是相同的

特点: 加密解密计算量小,速度快

1.小例子

比如: 利用按位异或的可交换性和抵消性就可以搞一个对称加密
小明和小红要进行通信,它们都持有密钥key=1234

小明发送一个"hello",这个"hello"的每个字符都跟key进行按位异或(也就是加密),然后才发给小红
小红收到数据之后再将数据的每个字符跟key进行按位异或(也就是解密),转换回了"hello"

这个密钥key就是对称密钥,在这期间即使数据被中间方劫持了,中间方也不知道你们的密钥是什么
(不考虑中间方恶意穷举破解密钥,因为有可能获取到的非法利益还不够破解密钥的成本呢…)
因此它也就无法获取隐私信息或者篡改信息
(因为你改消息是为了误导接收方,获取非法利益,你都不知道接收方解密用的密钥是什么,你怎么误导他?? 所以篡改信息没意义)

2.好处和缺点

使用对称加密,理论上来说已经能够解决数据安全性的问题,但是在实践上,单纯只靠对称加密是行不通的
在这里插入图片描述
在这里插入图片描述
小结一下: 如果只采用对称加密,实践当中为何不能解决数据安全性问题

  1. 所有的用户的对称密钥都是一样的
    中间方也能够得知对称密钥,此时加密解密就形同虚设了,因此行不通
  2. 所有用户的对称密钥都不同
    对称密钥的交换缺少安全性,中间方能够进行拦截获取对称密钥,此时加密解密就形同虚设了,而且还会增加服务器维护密钥的成本,因此行不通
  3. 对用户通过源IP地址和源端口号进行划分,分配并使用不同的对称密钥
    无法保证跟中间方密钥相同的用户的数据安全,而且如果中间方扩大影响力,获取多个密钥,那危害也是很大的,因此行不通

总和起来,都是因为

  1. 密钥进行交换/协商时,无法保证自身的安全性
  2. 对称密钥既能对数据进行加密,又能对数据进行解密,一旦被中间方获取,那么双方通信时的加密就形同虚设了

4.非对称加密

非对称加密:需要通过两个密钥来进行加密和解密
一个密钥被称为公钥,另一个被称为私钥

加密解密时有两种使用方式:

  1. 公钥加密,私钥解密
  2. 私钥加密,公钥解密

特点: 算法复杂,加密解密效率低

稍后我们再来分析使用非对称加密能解决数据安全性问题吗,现在我们先介绍其他很重要的知识

5.数据指纹/数据摘要

在这里插入图片描述

三.站在设计者的角度提出方案

下面我们站在https协议设计者那些大佬的角度来思考一下如何对数据进行加密,解密

刚才我们已经看出只使用对称加密是不行的,那么我们只使用非对称加密呢?

1.只使用非对称加密 : 且只有server有密钥

在这里插入图片描述
其实如果考虑中间方欺骗client和server的话,从client到server也是不安全的
在这里插入图片描述
因此这种方案果断pass

2.只使用非对称加密 : 且双方都有密钥

欺负我client没有密钥…那我们给client也配上密钥
我们依然先不考虑中间方欺骗client和server,

刚才server -> client不安全是因为server发送数据使用私钥S’加密,但是中间方有公钥S,
因此server发送数据一定不能用自己的私钥S’加密,而要用client的公钥/私钥来加密
在这里插入图片描述
中间方搞事情:
在这里插入图片描述
这个方案还有一个问题
全都用非对称加密,效率太低了!!!
而且你看,client都能把公钥C"安全"的发给server了,也就是说公钥C这个密钥非常"安全"

而对称密钥缺的不就是安全嘛,人家还非常快,因此把C换成对称密钥不好吗,双方通信时都用对称密钥
因此下一个版本

3.非对称+对称 : client一个对称,server一对非对称

在这里插入图片描述
但是中间方依旧能搞事情
在这里插入图片描述

4.如何解决中间人攻击问题

经过三个版本,我们发现,中间方能搞事情的原因都是因为:
client被骗了,他认为自己受到的公钥M就是server发送的公钥S

也就是说client无法判断收到的公钥的合法性

现实生活当中,如何区分假钱和真钱? -> 验钞机 , 验钞机具体如何区分呢? 根据: 磁性、尺寸、厚度等特征 -> 这些特征谁规定和保证的? -> 国家相关组织

因此我们这里也有相关组织: CA机构(Certificate Authority,证书授权机构)专门解决这一问题

四.CA证书

1.介绍

在server使用HTTPS之前需要向CA机构申请CA证书,CA证书里面含有证书申请者信息,公钥信息等等
client访问server时默认会检查该网站的CA证书,
如果CA证书过期了,或者不可靠等等,浏览器就会给我们安全警报,我们看到之后就会关闭该网页
在这里插入图片描述
如果CA证书有效,那么浏览器就会从CA证书里面获取公钥

CA证书就相当于server的合法证书,证明server公钥是正确安全的

整个流程:
在这里插入图片描述

2.CA证书如何防止中间人攻击

在这里插入图片描述
从技术的角度,中间人对CA证书想怎么改就怎么改,掉包都可以,但是你怎么改都没用,掉包就暴露你了,到时候进局子了就

CA证书=企业的明文数据+用CA私钥加密的 用企业明文数据生成的数据指纹

在这里插入图片描述
因此HTTPS协议的最终方案是:
CA证书+非对称加密(client用server的公钥加密对称密钥发送给server)+对称加密
既保证安全,又保证了效率

以上就是HTTPS协议原理的全部内容,希望能对大家有所帮助!!

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

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

相关文章

网络安全-钓鱼篇-利用cs进行钓鱼

一、环境 自行搭建,kill,Windows10,cs 二、原理 如图所示 三、钓鱼演示 首先第一步:打开System Profiler-分析器功能 选择克隆www.baidu.com页面做钓鱼 之后我们通过包装域名,各种手段让攻击对象访问:h…

TH方程学习(3)

一、编程实现 根据论文给出的案例&#xff0c;使用TH方程进行数值仿真 1.初始化条件 %% 参考文献<New State Transition Matrix for Relative Motion on an Aribitrary Elliptical Orbit> %% 作者 Yamanaka Koji clc;clear global miu Re miu 3.986e5; Re 6378.137;…

阿里云语音合成TTS直播助手软件开发

阿里云的TTS比较便宜&#xff0c;效果比不了开源克隆的那种&#xff0c;比纯机器人效果好一点点 阿里云sambert https://help.aliyun.com/zh/dashscope/developer-reference/quick-start-13 Sambert系列模型 1万字1元 &#xff0c;每主账号每模型每月3万字免费 创建API-KEY htt…

域内用户枚举和密码喷洒

一. 域内用户枚举原理和流量 1. 原理 在AS-REQ阶段客户端向AS发送用户名&#xff0c;cname字典存放用户名&#xff0c;AS对用户名进行验证&#xff0c;用户存在和不存在返回的数据包不一样。 不同之处主要是在返回数据包中的状态码不同&#xff0c;根据不同的状态码来区分账…

271 基于matlab的可调Q因子小波变换故障诊断

基于matlab的可调Q因子小波变换故障诊断&#xff0c;可用在轴承、齿轮、活塞等故障诊断中&#xff0c;程序中包含了原始TQWT工具箱和轴承振动信号信号的谱包络的求取。通过仿真数据、实际轴承数据说明了方法的效果。程序已调通&#xff0c;可直接运行。 271 可调Q因子小波变换 …

基于java的CRM客户关系管理系统(二)

目录 第二章 相关技术介绍 2.1 后台介绍 2.1.1 B/S平台模式 2.1.2 MVC 2.1.3 Spring 2.1.4 Hibernate 2.1.5 Struts 2.2 前端介绍 2.2.1 JSP网页技术 2.3 开发工具 2.4 本章小结 前面内容请移步 基于java的CRM客户关系管理系统&#xff08;二&#xff09; 资源…

查看docker中各个容器所占的资源

要查看Docker中的每个容器占用的资源&#xff0c;可以使用docker stats命令。这个命令提供了容器的实时资源使用统计&#xff0c;包括内存使用情况。以下是如何使用docker stats命令的示例&#xff1a; docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsa…

Appium安装及配置(Windows环境)

在做app相关自动化测试&#xff0c;需要使用appium来做中转操作&#xff0c;下面来介绍一下appium的环境安装配置 appium官方文档&#xff1a;欢迎 - Appium Documentation 一、下载appium 下载地址&#xff1a;https://github.com/appium/appium-desktop/releases?page3 通…

进程——linux

目录 冯诺依曼体系结构&#xff08;计算机组成原理与体系结构&#xff09; 关于冯诺依曼&#xff0c;必须强调几点&#xff1a; 操作系统(Operator System) 概念 设计OS的目的 定位 如何理解 "管理" 总结 系统调用和库函数概念 承上启下 一、进程 基本概念…

C++:细谈Sleep和_sleep

ZINCFFO的提醒 还记得上上上上上上上上上上上上上上上上上上&#xff08;上的个数是真实的&#xff09;篇文章吗&#xff1f; 随机应变——Sleep()和_sleep() 但在ZINCFFO的C怪谈-02中&#xff1a; 我不喜欢Sleep...... 奤&#xff1f;媜煞鷥&#xff01; 整活&#xff01;…

STL中stack的使用

目录 一、stack类介绍和使用 stack类介绍 stack类定义 stack类常见构造函数 stack数据操作 empty()函数 top() pop() 和 push() 函数 size()函数 swap()函数 一、stack类介绍和使用 stack类介绍 1.stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下…

C语言 指针——函数指针

目录 什么是函数指针&#xff1f; 函数指针的定义 定义函数指针时的常见错误 函数指针有什么用&#xff1f; 函数指针的主要应用 什么是函数指针&#xff1f; 函数指针 (Function Pointer) 就是指向函数的指针变量 数据类型 ( * 指针变量名 ) ( 形参列表 ); 例如&#x…

Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明

Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明 目录 Python 机器学习 基础 之 处理文本数据 【停用词/用tf-idf缩放数据/模型系数/多个单词的词袋/高级分词/主题建模/文档聚类】的简单说明…

什么是PLAB?

接上文PLAB---》 可以看到和TLAB很像&#xff0c;PLAB即 Promotion Local Allocation Buffers。用在年轻代对象晋升到老年代时。 在多线程并行执行YGC时&#xff0c;可能有很多对象需要晋升到老年代&#xff0c;此时老年代的指针就"热"起来了&#xff0c;于是搞了个…

秒杀基本功能开发(显示商品列表和商品详情)

文章目录 1.数据库表设计1.商品表2.秒杀商品表3.修改一下秒杀时间为今天到明天 2.pojo和vo编写1.com/sxs/seckill/pojo/Goods.java2.com/sxs/seckill/pojo/SeckillGoods.java3.com/sxs/seckill/vo/GoodsVo.java 3.Mapper编写1.GoodsMapper.java2.GoodsMapper.xml3.分别编写Seck…

数据库(10)——图形化界面工具DataGrip

以后关于数据库的图片演示就使用DataGrip了 : ) 创建数据库和表 在连接上数据库之后&#xff0c;可以选择Schema创建一个新的数据库。 点击OK后&#xff0c;就已经创建了一个空的表。 要在数据库中建立一张新的表&#xff0c;右键数据库&#xff0c;点击new table 要给新表添…

Java对sqlserver表的image字段图片读取和输出本地

Java代码实现对sqlserver数据库表的image字段图片的读取&#xff0c;和输出存储到本地 由于表image字段图片存的内容是二进制值&#xff0c;如何输出保存到本地&#xff1a; 代码示例&#xff1a;&#xff08;注&#xff1a;连接sqlserver数据库需配置其驱动文件&#xff09; …

让EXCEL VBA支持鼠标滚轮,vb6 IDE鼠标滚轮插件原理

vb6 IDE鼠标滚轮插件怎么运行的(适用于VBA) 使用 Spy&#xff0c;我发现代码窗口正在获取 WM_MOUSEWHEEL 事件&#xff0c;但没有触发 WM_VSCROLL 消息。因此&#xff0c;我编写了一个简单的消息钩子&#xff0c;当它捕获鼠标滚轮事件时触发滚动事件。 我从 Spy 得知代码窗口的…

Android 项目Gradle文件讲解(Groovy和Kotlin)

Android 项目Gradle文件讲解&#xff08;Groovy和Kotlin&#xff09; 前言正文一、Gradle的作用二、Gradle的种类① 工程build.gradle② 项目build.gradle③ settings.gradle④ gradle.properties⑤ gradle-wrapper.properties⑥ local.properties 三、Groovy和Kotlin的语言对比…

系统安全及其应用

系统安全及其应用 部署服务器的初始化步骤&#xff1a; 1、配置IP地址&#xff0c;网关&#xff0c;DNS解析 2、安装源&#xff0c;外网&#xff08;在线即可yum&#xff09; 内网&#xff08;只能用源码包编译安装&#xff09; 3、磁盘分区 lvm raid 4、系统权限配置和基础安…