https通信加密原理

news2024/11/24 1:02:32

为什么要用https

HTTP 由于是超文本传输协议,是一个简单的请求-响应协议,它通常运行在TCP之上,它是明文传输,不能保证数据的完整性,不能保证是否被窃听,不能保证数据是否被篡改

https采用了一些加解密,数字证书,数字签名的技术保证了通信的安全,一般我们认为安全的通信需要包括以下四个原则::机密性、完整性,身份认证和不可否认。

  • 机密性:即对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文;
  • 完整性:指数据在传输过程中没有被篡改,如果修改,接收方也能识别出来,从来判定接收报文不合法;
  • 身份认证:确认对方的真实身份,这样就解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题;
  • 不可否认: 即不可否认已发生的行为,比如小明向小红借了 1000 元,但没打借条,或者打了借条但没有签名,就会造成小红的资金损失。

HTTPS 通信原理简述

首先要了解有哪些加密算法,都有哪些特点

  1. 对称加密算法
    加解密都用的同一个秘钥,用同一个秘钥加密,同一个秘钥解密
    加解密速度快
    适合加密大量数据
    常用的对称加密算法有 AES、DES、3DES、RC4、SM4 等。
  2. 非对称加密算法
    有一对秘钥,公钥和私钥,公钥加密私钥解密,私钥加密公钥解密
    (注:私钥加密其实这个说法其实并不严谨,准确的说私钥加密应该叫私钥签名。因为私密加密的信息公钥是可以解密的,而公钥是公开的,任何人都可以拿到,用公钥解密叫做验签。)
    加密算法复杂,加密速度慢
    比较安全
    常用的非对称加密算法有RSA、DSA、SM2
  3. 哈希算法,也叫散列算法,也叫摘要算法
    不可逆,只能加密,无法解密
    哈希函数输出长度必须是固定的,并且与输入长度无关
    一般用来验证数据的完整性
    常用的哈希算法有SM3,、md5、SHA1、SHA256

实现对称加密,需要三项,确定对称加密算法,生成对称秘钥(一个随机数,一般一次一秘,每一次的通信都会重新生成),明文
实现非对称加密,也需要三项,确定非对称加密算法,公钥(一般一个网站有一组公私钥对),明文
实现哈希算法,需要两项,确定哈希算法,明文,生成固定长度密文

对称加密报文

既然 HTTP 是明文传输的,那我们给报文加密不就行了,对称加密有具有加解密速度快,性能高的特点,也是 HTTPS 最终采用的加密形式。 所以使用对称加密的方式来给报文进行加解密。
但是这里有一个关键问题:对称加密的通信双方要使用同一把密钥,这个密钥是如何协商出来的?如果通过报文的方式直接传输密钥,之后的通信其实还是在裸奔,因为这个密钥会被中间人截获甚至替换掉,这样中间人就可以用截获的密钥解密报文,甚至替换掉密钥以达到篡改报文的目的。

非对称加密结合对称加密算法

这个时候就用到了非对称算法,解决单向对称密钥的传输问题 公钥加密只能私钥解密,而私钥只有服务器有,不在中间传输。用非对称算法的公钥加密对称秘钥,用对称秘钥加密报文,服务器端先用私钥解密出对称秘钥,再解密出报文,这样就实现了加密传输的安全。

但是问题又来了, server 怎么把公钥安全地传输给 client 呢。如果直接传公钥,也会存在被中间人调包的风险。这个时候就用到了数字证书,解决公钥传输信任问题

数字证书

服务器得去公证人这里先登记,把服务器的公钥、网站域名等等信息报上去,公证人拿到这些信息后,计算一个 Hash 值,然后再用公证人的 私钥 把Hash值进行加密,加密后的结果就是 数字签名。最后,公证人把登记的信息和这个数字签名合在一起,封装了一个新的文件发给服务器,登记就完成了,而这个新的文件就是数字证书

服务器拿到证书后,可要好生保管,因为通信的时候,服务器须要将他们的证书发给我们浏览器验证。我们浏览器拿到证书后,把证书里面的信息也计算一遍Hash,再用提前记录好的 公证人的公钥 把证书里的数字签名进行解密,得到公证人计算的Hash,两个一对比,就知道这证书是不是公证人签发的,以及有没有被篡改过了!只有验证成功才能继续后面的流程,要不然就是冒充的!

由于只有 CA 的公钥才能解密签名,如果客户端收到一个假的证书,使用 CA 的公钥是无法解密的,如果客户端收到了真的证书,但证书上的内容被篡改了,摘要比对不成功的话,客户端也会认定此证书非法。如果中间人也向CA申请了证书,劫持客户端的请求,返回自己的证书,也是行不通的,因为客户端会验证网站域名等信息,这一下总算解决了中间人冒充的问题。

抓包

charles 这些中间人为啥能抓到明文的包呢?其实就是用了证书调包这一手法,想想看,在用 charles 抓 HTTPS 的包之前我们先要做什么,当然是安装 charles 的证书。
这个证书里有 charles 的公钥,这样的话 charles 就可以将 server 传给 client 的证书调包成自己的证书,client 拿到后就可以用你安装的 charles 证书来验签等,验证通过之后就会用 charles 证书中的公钥来加密对称密钥了。整个流程如下:

在这里插入图片描述
由此可知,charles 这些中间人能抓取 HTTPS 包的前提是信任它们的 CA 证书,然后就可以通过替换证书的方式进行瞒天过海,所以我们千万不要随便信任第三方的证书,避免安全风险。

证书链

我们可以向 CA 申请证书,但全世界的顶级 CA(Root CA) 就那么几个,每天都有很多人要向它申请证书,它也忙不过来。这个时候用到了证书链,它会授权下一级,下下级 ,这样我们就只要找一级/二级/三级 CA 申请证书即可。怎么证明这些证书被 Root CA 授权过了呢,小一点的 CA 可以让大一点的 CA 来签名认证。比如一级 CA 让 Root CA 来签名认证,二级 CA 让一级 CA 来签名认证,Root CA 没有人给他签名认证,只能自己证明自己了,这个证书就叫「自签名证书」或者「根证书」,我们必须信任它,不然证书信任链是走不下去的(这个根证书其实是内置在操作系统中的,在浏览器中可以看到根证书和中间证书和SSL证书,及证书链)
现在我们看看如果站点申请的是二级 CA 颁发的证书,client 收到之后会如何验证这个证书呢,实际上 service 传了传给二级 CA 的证书外,还会把证书信任链也一起传给客户端,这样客户端会按如下步骤进行验证:

  1. 浏览器就使用信任的根证书(根公钥)解析证书链的根证书得到一级证书的公钥+摘要验签;
  2. 拿一级证书的公钥解密一级证书,拿到二级证书的公钥和摘要验签;
  3. 再然后拿二级证书的公钥解密 server 传过来的二级证书,得到服务器的公钥和摘要验签,验证过程就结束了。

HTTPS 通信过程

发起请求、验证身份、协商秘钥、加密会话

一、 客户端向服务端发起ssl请求

  1. 告诉服务器自己支持哪些加密算法
  2. 客户端生成随机数R1发送给服务端

二、 服务端向客户端发送数字证书(ssl证书)

  1. 服务端生成随机数R2
  2. 选择一种双方都支持的加密算法
  3. 服务端把证书、公钥、随机数R2、会话密钥生成算法,一同发给客户端

三、 客户端验证数字证书

  1. 验证数字证书的有效性,首先验证数字证书上的CA证书的根证书是否存在,再使用CA根证书的公钥解密证书签名数据,得到CA机构计算的摘要。然后通过证书里提供的摘要算法对数据(证书中的相关的明文信息)采用相同的散列函数(Hash算法)计算得到信息摘要,然后通过自己生成的摘要与CA机构的摘要比对。如果一致,则可以确认证书的合法性,即公钥合法
  2. 验证证书合法性,包括证书是否吊销、是否到期、域名是否匹配,通过后则进行后面的流程
  3. 获得证书的公钥、会话密钥生成算法、随机数R2
  4. 生成一个随机数R3(预主密钥)。
  5. 根据会话密钥算法使用R1、R2,和预主密钥R3生成会话密钥;
  6. 用服务端证书的公钥加密随机数R3并发送给服务端。

四、 服务器得到会话密钥

  1. 服务器用私钥解密客户端发过来的随机数R3
  2. 根据会话秘钥算法使用R1、R2,和预主密钥R3生成会话密钥;

五、 客户端与服务端开始进行加密会话

  1. 客户端发送加密数据给服务端
  2. 服务端响应客户端( 解密接收数据:服务端用会话密钥解密客户端发送的数据; 加密响应数据:用会话密钥把响应的数据加密发送给客户端。)
  3. 客户端用会话密钥解密服务端响应的数据

六、 客户端与服务端开始进行加密会话

在这里插入图片描述

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

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

相关文章

安装银河麒麟操作系统

文章目录 一、安装银河麒麟操作系统1.1、简介1.2、银河麒麟高级服务器操作系统V101.3、下载银河麒麟镜像1.4、安装银河麒麟操作系统兼容版 一、安装银河麒麟操作系统 1.1、简介 银河麒麟(KylinOS)原是在863计划和国家核高基科技重大专项支持下&#xf…

HFish蜜罐部署教程(windows版)—HW蓝队主动防御利器

文章目录 前言基础环境蜜罐部署管理端部署添加节点&开启服务 攻击展示端口扫描测试目录扫描测试POC测试 && ssh测试失陷测试 酷炫大屏后记Tips 前言 一年一度的HW马上又要来了,【不过听说今年推迟了一些】 ,各位师傅应该都按耐不住了&#…

Tcl-12. 数组

TCL支持通过数组的形式存储多个元素。 Tcl中的数组和其他高级语言的数组有些不同:Tcl 数组元素的索引,或称键值,可以是任意的字符串,而且其本身没有所谓多维数组的概念。数组的存取速度要比列表有优势,数组在内部使用散…

从理论上理解SQL注入、XSS、中间件解析漏洞、挖矿马

目录 1、SQL注入 (1)原理 (2)分类 (3)防御 2、XSS (1)原理 (2)分类 3、中间件(解析漏洞) (1)IIS6.X …

JDK安装教程

jdk 链接:https://pan.baidu.com/s/1xAFaR7AQdy_hPVFHc1CVnA 提取码:cypz 环境配置 1、我的电脑–》右键属性–》高级系统设置–》环境变量 2、系统变量–》新建系统变量–》完成后点击确定 变量名:JAVA_HOME 变量值:&#xff0…

chatgpt赋能python:Python中的分词技术及其应用

Python中的分词技术及其应用 什么是分词? 分词是自然语言处理(Natural Language Processing,NLP)中的一个重要环节,指将一段文本切分成若干个单词或词组。在中文分词中,由于中文没有明显的词汇边界&#…

进入IT领域,多久能月入过万?

当下打拼的很多人都有这样的困惑:刚毕业或者工作时间不长,也有一些基本技能,对未来有美好憧憬,一身干劲,却拿着微薄的薪水过着捉襟见肘的生活。 有些同龄人进入IT领域后快速升职加薪,观望者经常会问&#…

C++设计模式之生成器模式(Builder)

文章目录 定义前言1. 问题2. 解决方案 结构适用场景实现方法优点缺点与其他模式的关系实例 定义 生成器是一种创建型设计模式,使你能够分步骤创建复杂对象。该模式允许你使用相同的创建 代码生成不同类型和形式的对象。 前言 1. 问题 假设有这样一个复杂对象&a…

100种思维模型之事物关系思维模型-72

具体的事物是形象的、容易观察和理解的,而事物间的关系则容易让人忽视,乃至无法意识到它正在发生作用。 生活中,我们习惯于低估事物关系的影响。 事物关系思维模型一个提醒我们关注事物关系、从宏观层面找到更好的工作方向、实现可持续发展的…

显示反馈与隐式反馈

文章目录 1. 数据分类2. 显性反馈数据模型评价方法:3. 显式反馈转换为隐式反馈4. 隐式反馈的作用5. 参考资料 本文来介绍一下显示反馈与隐式反馈,作为我学习推荐系统的笔记以便日后忘记了可以回过头来温习。 1. 数据分类 显式反馈是指:用户明…

光量子计算机+GPU!NVIDIA、Rolls-Royce和Classiq宣布取得技术突破

​ (图片来源:网络) 5月21日,英伟达(NVIDIA)、罗尔斯罗伊斯(Rolls-Royce)和以色列量子软件公司Classiq宣布了一项量子计算技术突破成果,旨在不断提高喷气发动机的效率。 …

AB32VG:(2)app.cbp工程源码阅读笔记(ADC按键和红外)

文章目录 1.SDK文件目录2.ADCKEY和红外遥控器相关源码2.1 初始化2.2 在定时器中断服务程序中查询按键 3. 更改参数以适应自己的ADC按键板3.1 我的ADC按键板硬件3.2 ADC值转换为键值 4.红外遥控器5. 相关配置 参考文章: 作者:nunu1010,中科蓝…

VSCode+Git+TortoiseGit+Tools

目录 一、Tools 1、VSCode(visual studio code)下载安装 VSCode使用技巧和经验 2、Git下载安装 3、TortoiseGit 简介 3.1、下载安装Git及Tortoisegit 3.2、Tortoisegit拉取gitee仓库到本地 3.3、Git拉取gitee仓库到本地 3.4、Git提交到gitee仓库 4、国内获取GitHub链…

华为OD机试真题B卷 Java 实现【蛇形矩阵】,附详细解题思路

一、题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 二、输入描述 输入正整数N(N不大于100)。 三、输出描述…

Vector DDFS

矢量数字频率生成器 版本:vivado2021.1 帮助文档:C:/Xilinx/Vivado/2021.1/doc/sysgen/html_help/vectorddfs.html 接口 I 频率控制字,I 输出频率 * 采样时间 * 2^(频率分辨率);VI、VO 用于同步&#x…

什么是优雅的代码设计

今天我来解释一下什么样的代码才是优雅的代码设计。当然我们的代码根据实际的应用场景也分了很多维度,有偏向于底层系统的,有偏向于中间件的,也有偏向上层业务的,还有偏向于前端展示的。今天我主要来跟大家分析一下我对于业务代码…

电子科技大学计算机系统结构:课后作业

计算机体系结构作业答案 第一二章作业 1.试述Flynn 分类的4 种计算机系统结构有何特点。 参考答案: Flynn按照指令流和数据流两种不同的组合,把计算机系统的结构分为以下4 类: (1)单指令流单数据流SISD&#xff0…

这款AI绘画工具也太太太赞了!模型丰富,轻松绘画,赶快收藏起来!

现今科技发展迅速,让人工智能(AI)成为了我们日常生活中的必备之物。在艺术领域,AI技术也开始广泛应用。特别是AI绘画软件,以其高效、精准的绘画方式,已成为越来越多艺术家、设计师和普通用户绘画的首选工具…

HUSTOJ使用指南

如何快速上手(了解系统的功能)? admin管理员用户登录,点击右上角管理,仔细阅读管理首页的说明。 切记:题目导入后一次只能删一题,不要导入过多你暂时用不上的题目,正确的方式是每次…

Cron在前端的使用,vue与element ui的vue-cron插件的使用及将定时任务cron表达式解析成中文

文章目录 vue-cron插件的使用安装依赖引用Vue页面去掉秒和年定时任务cron解析成中文该插件存在的一个缺陷 vue-cron插件的使用 安装依赖 执行下面npm命令: npm install vue-cron --save 引用 在想使用cron的vue页面引入以下: import VueCron from ‘vue-cron’ …