当前位置: 首页 > news >正文

HTTPS详解(原理、中间人攻击、CA流程)

摘要

我们访问浏览器也经常可以看到https开头的网址,那么什么是https,什么是ca证书,认证流程怎样?这里一一介绍。

原理

https就是http+ssl,即用http协议传输数据,数据用ssl/tls协议加密解密。具体流程如下图:

图中TLS是SSL3.0的升级版,可以看做SSL3.1。浏览器和服务器发送接收数据都要能对数据进行加密和解密,一般使用非对称+对称加密的组合加密模式验证传输数据。

CA证书

CA证书的必要性

了解CA证书前,我们看平常传输的加密解密:

1、浏览器用随机生成的(对称)密钥X给数据进行加密,再用服务器给的(非对称)公钥A给密钥X加密,一起传给服务器。

2、服务器用(非对称)私钥给密钥X解密,再用密钥X解密数据。

以上看起来完美,密钥X在传输时是加密的,即使被监听获取到,别人没有私钥也是无法获取到密钥X的,但中间人攻击可以绕过密钥X获取到信息并确保数据传输正确。具体如下:

1、浏览器用随机生成的(对称)密钥X给数据进行加密。

2、浏览器请求服务器的公钥A,但这个请求被中间人截取,并修改公钥A为中间人生成的公钥B

3、浏览器用“服务器”给的公钥B给密钥X加密,将数据传给服务器。

4、中间人截取到数据,将密钥X用中间人生成的私钥B解密,再解密的数据,获取到通信明文数据!再将密钥X用公钥A加密,再将数据和密钥X返回给服务器,服务器依旧能用密钥A解密并正确解密出数据。

以上可以看出浏览器和服务器的通信数据可以毫无异常的被中间人获取到,根本原因是浏览器无法知道公钥是服务器的还是中间人篡改过的非法公钥!因此CA证书就出来了,它主要用于防止中间人攻击。

CA证书内容与验证

公网网站使用HTTPS前,需要向CA机构申请CA证书,该证书包含了证书版本信息、发行机构、证书所有人、证书所有人公钥、有效期、签名算法、签名信息等。一般操作系统或浏览器会预装CA机构根证书,即验证服务器CA证书的公钥可以从本地的CA证书里获取。但问题又来了,怎么保证CA证书内容不被中间人篡改,这个问题CA证书也是有解决方案:数字签名。该签名就是对CA证书里的明文数据Hash后的Hash值再进行私钥加密的密文 。

CA证书验证过程:

1、浏览器获取服务器传来的CA证书后,浏览器用本地同发行机构的CA根证书的公钥对签名解密,得到签名的hash值H。

2、浏览器用证书指明的hash算法对证书原文进行hash得到hash值H1。

3、若H=H1则证书可信。

4、由于服务器CA证书里有服务器的公钥,因此浏览器可用该公钥对浏览器生成的对称密钥进行加密。

以上验证流程假如中间人发起进攻,篡改了原文,并用自己的私钥篡改签名。那么,浏览器用本地CA证书的公钥解密是无法解密成功的,验证会失败。若只篡改了原文,那么hash值不对,依旧验证失败。若将整个证书替换成别的服务器的证书,那么原文信息会验证不通过,因为原文包含域名等信息,CA证书与域名不匹配。

总结

浏览器能通过本地CA根证书的发行机构公钥对网站服务器的CA证书验签,验证通过后就可以获取服务器CA证书里的服务器公钥,用该公钥对对称密钥X进行加密。从而保证中间人无法修改数据且密钥X对中间人是不可见的。

相关文章:

HTTPS详解(原理、中间人攻击、CA流程)

摘要我们访问浏览器也经常可以看到https开头的网址,那么什么是https,什么是ca证书,认证流程怎样?这里一一介绍。原理https就是httpssl,即用http协议传输数据,数据用ssl/tls协议加密解密。具体流程如下图&am…...

EventLoop机制

JavaScript 是单线程的语言 JavaScript 是一门单线程执行的编程语言。也就是说,同一时间只能做一件事情。 单线程执行任务队列的问题: 如果前一个任务非常耗时,则后续的任务就不得不一直等待,从而导致程序假死的问题。 同步任…...

倒立摆建模

前言 系统由一辆具有动力的小车和安装在小车上的倒立摆组成,系统是不稳定,我们需要通过控制移动小车使得倒立摆保持平衡。 具体地,考虑二维情形如下图,控制力为水平力FFF,输出为角度θ\thetaθ以及小车的位置xxx。 力…...

SpringSecurity支持WebAuthn认证

WebAuthn是无密码身份验证技术,解决了密码泄露的风险,主流的浏览器都支持。有很多开源的类库实现了WebAuthn规范,Java下流行的类库有:webauthn4jjava-webauthn-serververtx-authSpring Security官方暂时未支持WebAuthn&#xff0c…...

深度学习技巧应用3-神经网络中的超参数搜索

大家好,我是微学AI,今天给大家带来深度学习技巧应用3-神经网络中的超参数搜索。 在深度学习任务中,一个算法模型的性能往往受到很多超参数的影响。超参数是指在模型训练之前需要我们手动设定的参数,例如:学习率、正则…...

【信号量机制及应用】

水善利万物而不争,处众人之所恶,故几于道💦 目录 一、信号量机制 二、信号量的应用 >利用信号量实现进程互斥   >利用信号量实现前驱关系   >利用记录型信号量实现同步 三、例题 四、参考 一、信号量机制 信号量是操作系统提…...

围棋高手郭广昌的“假眼”棋局

(图片来源于网络,侵删)文丨熔财经作者|易不二2022年,在复星深陷债务压顶和变卖资产漩涡的而立之年,“消失”已久的郭广昌,在质疑与非议声中回国稳定军心,强调复星将在未来的五到十年迎来一个全新…...

学成教育-统一异常处理实现

一、统一异常处理实现 统一在base基础工程实现统一异常处理&#xff0c;各模块依赖了base基础工程都 可以使用。 首先在base基础工程添加需要依赖的包&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-web</…...

JNI内通过参数形式从C/C++中传递string类型数据至Java层

目录 0 前言 1 string类型参数形式传值 2 测试和结果 0 前言 类似之前我写过的两篇文章&#xff1a;一篇介绍了在JNI中基础类型int的传值方式&#xff1b;一篇详细梳理了在JNI层中多维数组的多种传值方式。 JNI内两种方式从C/C中传递一维、二维、三维数组数据至Java层详细…...

自动化测试——执行javaScript脚本

文章目录一、点击元素(对应的click())二、input标签对应的值&#xff08;对应的send_keys()&#xff09;修改时间控件的属性值&#xff1a;三、元素的文本属性四、js脚本滚动操作一、点击元素(对应的click()) 使用场景&#xff1a;当使用显性等待不能解决问题时 代码中实现点击…...

常用十种算法滤波

十种算法滤波1. 限幅滤波法&#xff08;又称程序判断滤波法&#xff09;2. 中位值滤波法3. 算术平均滤波法4. 递推平均滤波法&#xff08;又称滑动平均滤波法&#xff09;5. 中位值平均滤波法&#xff08;又称防脉冲干扰平均滤波法&#xff09;6. 限幅平均滤波法7. 一阶滞后滤波…...

IO多路复用

一、概述 IO多路复用&#xff1a;进程同时检查多个文件描述符&#xff0c;以找出他们中的任何一个是否可执行IO操作。 核心&#xff1a;同时检查多个文件描述符&#xff0c;看他们是否准备好了执行IO操作。文件描述符就绪状态的转化是通过一些IO事件来触发。 二、水平触发和…...

Python中的错误是什么,Python中有哪些错误

7.1 错误(errors) 由于Python代码通常是人类编写的&#xff0c;那么无论代码是在解释之前还是运行之后&#xff0c;或多或少总会出现一些问题。 在Python代码解释时遇到的问题称为错误&#xff0c;通常是语法和缩进问题导致的&#xff0c;这些错误会导致代码无法通过解释器的解…...

记录自己开发一款小程序中所遇到的问题(uniapp+uview)(持续更新)

每次开发小程序中&#xff0c;都会遇到各种各样的问题。但是有的问题已经遇到过了&#xff0c;但是遇到的时候还是要各种的问度娘。 特此出这篇文章&#xff0c;方便自己也是方便大家。 仅供参考 1. u-collapse的样式在h5中正常&#xff0c;但是运行到微信小程序中样式就乱了…...

华为机试 HJ43 迷宫问题

经典迷宫问题dfs 题目链接 描述 定义一个二维数组 N*M &#xff0c;如 5 5 数组下所示&#xff1a; int maze[5][5] { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫&#xff0c;其中的1表示墙壁&#xff0c;0表示可以走…...

数据结构|链表

概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。单链表的形式就像一条铁链环环相扣它与顺序表最大的不同是&#xff0c;单链表的数据存储是在不连续的空间&#xff0c;存储的数据里面含有…...

计算机写论文时,怎么引用文献? - 易智编译EaseEditing

首先需要清楚哪些引用必须注明[1]&#xff1a; 任何直接引用都要用引号并注明来源&#xff1b; 任何不是自己的口头或书面的观点、解释和结论都应注明来源&#xff1b; 即使不用原话&#xff0c;但是他人的思路、概念或观点也应注明&#xff1b; 不要为了适合你的观点修改原…...

实验三:贪心

1.减肥的小k1 题目描述 小K没事干&#xff0c;他要搬砖头&#xff0c;为了达到较好的减肥效果&#xff0c;教练规定的方式很特别&#xff1a; 每一次&#xff0c;小K可以把两堆砖头合并到一起&#xff0c;消耗的体力等于两堆砖头的重量之和。 经过 n-1次合并后&#xff0c; …...

MySQL日志文件

文章目录1.MySQL中的日志文件2.bin log的作用3.redo log的作用4.bin log和redo log的区别&#xff08;1&#xff09;存储的内容&#xff08;2&#xff09;功能&#xff08;3&#xff09;写入时间&#xff08;4&#xff09;写入方式5.两阶段提交6.undo log的作用1.MySQL中的日志…...

Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/

很多人都知道一个有符号的数&#xff0c;最高位是1&#xff0c;则表示负数&#xff0c;最高位是0&#xff0c;则表示正数&#xff0c;如果假设我的CPU是4位CPU&#xff0c;那么对于1001这个数&#xff0c;是表示9&#xff0c;还是表示-7呢&#xff1f;&#xff1f;&#xff1f;…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...