计算机网络-HTTP相关知识-RSA和ECDHE及优化
HTTPS建立基本流程
- 客户端向服务器索要并验证服务器的公钥。
- 通过密钥交换算法(如RSA或ECDHE)协商会话秘钥,这个过程被称为“握手”。
- 双方采用会话秘钥进行加密通信。
RSA流程
RSA流程包括四次握手:
- 第一次握手:客户端发送支持的TLS版本、生成的Client Random和支持的密码套件列表。
- 第二次握手:服务器处理确认TLS协议版本,然后发送生成的Server Random、密码套件列表(包括密钥交换算法、签名算法、对称加密算法、对称加密算法分组方式和摘要算法)以及服务器的数字证书(包含公钥)。
- 第三次握手:客户端处理验证证书真伪,生成会话密钥(由Client Random + Server Random + pre-master key组成以保证随机性),然后发送服务器公钥加密过的刚生成的pre-master key(预主密钥),告诉服务端之后使用加密方式发送消息,并发送之前所有发送的数据做个摘要,并使用会话密钥加密,以验证可用性。
- 第四次握手:服务器处理生成会话密钥,然后发送告诉客户端之后使用加密方式发送消息,并发送之前所有发送的数据做个摘要,并使用会话密钥加密,以验证可用性。
RSA缺陷
RSA的主要缺陷是没有前向安全性。这意味着如果一个会话的秘钥被泄露,那么所有以前的会话都可能被解密。
DHE算法
- DHE算法基于离散对数问题,即对于 aimodp=b,当 p 很大时,已知 a、b 无法快速获得 i ,时间复杂度为 O(p) ,但是如果正向计算(已知 a、i,求b )是可以做到 O(logp) 的。
- DHE算法的流程如下:
- 双方确定模数P和底数A。
- 各自随机生成私钥i,j作为指数。
- 通过 Bi=Aimodp、Bj=Ajmodp 得到公钥并交换。
- 以 K=Bij=Bjimodp 为会话密钥。
- 在static DH算法中,一方私钥是固定的,无法保证前向安全,所以有了DHE,其中E就是 ephemeral 临时的。
- DHE算法的缺点是虽然保证了前向安全性,但是需要大量乘法,性能不佳。
ECDHE算法
- ECDHE算法基于椭圆曲线上的加法,对于椭圆曲线上一点 A,过A的一条切线与圆锥曲线相交,交点关于x轴对称的点记为2A。
- ECDHE算法的流程如下:
- 双方确定椭圆曲线和曲线是基点G。
- 各自随机生成私钥d1、d2。
- 计算公钥 Q1=d1G、Q2=d2G并交换。
- 计算得到 d1Q2=d2Q1 中的x相同的(预主密钥)。
- ECDHE算法的优势是利用了ECC圆锥曲线特性,计算量更少,前向安全性,ECDHE 允许 TLS False Start 即在第三次挥手之后可以直接进行数据传输。
ECDHE流程
ECDHE流程包括四次握手:
- 第一次握手:客户端发送支持的TLS版本、生成的Client Random和支持的密码套件列表。
- 第二次握手:服务器处理确认TLS协议版本,生成私钥、公钥,然后发送生成的Server Random、密码套件列表(类型同RSA)、服务器的数字证书、选定的圆锥曲线以及对应公钥。
- 第三次握手:客户端处理生成私钥、公钥,会话密钥 = Client Random + Server Random + ECDHE计算出的点的x坐标 保证随机性,然后发送圆锥曲线公钥(客户端公钥加密)、告诉服务端之后使用加密方式发送消息、之前所有发送的数据做个摘要,并使用会话密钥加密,验证可用性。
- 第四次握手:服务器处理生成会话密钥,然后发送告诉客户端之后使用加密方式发送消息、之前所有发送的数据做个摘要,并使用会话密钥加密,验证可用性、Session Ticket 会话复用。
HTTPS优化
-
硬件优化
- 升级CPU,加快密钥计算。
- 选用支持 AES-NI 特性的 CPU。
-
软件优化
- openssl升级。
- linux内核升级。
-
协议优化
- 选用 ECDHE 密钥交换,支持 TLS False Start。
- 选择 x25519 椭圆曲线,该曲线是目前计算最快的椭圆曲线。
- 有CPU支持就选AES,如果没有就选择ChaCha20。
- 安全性要求不是很高使用 AES128 代替 AES256。
- 升级TLS1.3,将第一、三次握手合并,两次握手之后即可加密传输。密钥交换算法仅留下了支持前向安全性的ECDHE,仅留下了几个安全性高的密码套件,0RTT会话复用。
-
证书优化
- 选择椭圆曲线(ECDSA)证书,而不是 RSA 证书,相同安全程度下ECDSA密钥更短。
-
会话复用
- Session ID:双方会在内存缓存会话密钥,并用唯一的 Session ID 来标识,Session ID 和会话密钥相当于 key-value 的关系,定时过期。客户端再次连接时,hello 消息里会带上 Session ID,服务器收到后就会从内存找,如果还有就继续使用,省略后续挥手过程。占用服务器内存。
- Session Ticket:首次连接后的第四次挥手加密会话密钥作为 Ticket 发给客户端。服务器收到 Ticket 后判断有效期,有效就恢复会话。在 TLS1.3 中把 Ticket 和 HTTP 请求一同发送给服务端即可,我们称之为Pre-shared Key(PSK)。
- 重放攻击:如果中间人截获了客户端使用会话重用技术的 POST 请求,会导致服务器被恶意修改。应对方法包括设定过期时间,只对GET请求等使用会话复用。
相关文章:

计算机网络-HTTP相关知识-RSA和ECDHE及优化
HTTPS建立基本流程 客户端向服务器索要并验证服务器的公钥。通过密钥交换算法(如RSA或ECDHE)协商会话秘钥,这个过程被称为“握手”。双方采用会话秘钥进行加密通信。 RSA流程 RSA流程包括四次握手: 第一次握手:客户…...

axios 封装 http 请求详解
前言 Axios 是一个基于 Promise 的 HTTP 库,它的概念及使用方法本文不过多赘述,请参考:axios传送门 本文重点讲述下在项目中是如何利用 axios 封装 http 请求。 一、预设全局变量 在 /const/preset.js 中配置预先设置一些全局变量 window.…...

牛客2024年愚人节比赛(A-K)
比赛链接 毕竟是娱乐场,放平心态打吧。。。 只有A一个考了数学期望,其他的基本都是acmer特有的脑筋急转弯,看个乐呵即可。 A 我是欧皇,赚到盆满钵满! 思路: 我们有 p 1 p_1 p1 的概率直接拿到一件实…...

loadbalancer 引入与使用
在消费中pom中引入 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> 请求调用加 LoadBalanced 注解 进行服务调用 默认负载均衡是轮训模式 想要切换…...
Yolov5封装detect.py面向对象
主要目标是适应摄像头rtsp流的检测 如果是普通文件夹或者图片,run中的while True去掉即可。 web_client是根据需求创建的客户端,将检测到的数据打包发送给服务器 # YOLOv5 🚀 by Ultralytics, GPL-3.0 license """ Run inf…...

入门级深度学习主机组装过程
一 配置 先附上电脑配置图,如下: 利用公司的办公电脑对配置进行升级改造完成。除了显卡和电源,其他硬件都是公司电脑原装。 二 显卡 有钱直接上 RTX4090,也不能复用公司的电脑,其他配置跟不上。 进行深度学习&…...

python爬虫之selenium4使用(万字讲解)
文章目录 一、前言二、selenium的介绍1、优点:2、缺点: 三、selenium环境搭建1、安装python模块2、selenium4新特性3、安装驱动WebDriver驱动选择驱动安装和测试 基础操作1、属性和方法2、单个元素定位通过id定位通过class_name定位一个元素通过xpath定位…...
【ARM 嵌入式 C 头文件系列 22 -- 头文件 stdint.h 介绍】
请阅读【嵌入式开发学习必备专栏 】 文章目录 C 头文件 stdint.h定长整数类型最小宽度整数类型最快最小宽度整数类型整数指针类型最大整数类型 C 头文件 stdint.h 在 C 语言中,头文件 <stdint.h> 是 C99 标准的一部分,旨在提供一组明确的整数类型…...

LabVIEW专栏三、探针和断点
探针和断点是LabVIEW调试的常用手段,该节以上一节的"测试耗时"为例 探针可以打在有线条的任何地方,打上后,经过这条线的所有最后一次的数值都会显示在探针窗口。断点可以打在程序框图的所有G代码对象,包括结构…...

Transformer模型-softmax的简明介绍
今天介绍transformer模型的softmax softmax的定义和目的: softmax:常用于神经网络的输出层,以将原始的输出值转化为概率分布,从而使得每个类别的概率值在0到1之间,并且所有类别的概率之和为1。这使得Softmax函数特别适…...
记录一下做工厂的打印pdf程序
功能:在网页点击按钮调起本地的打印程序 本人想到的就是直接调起方式,网上大佬们说用注册表的形式来进行。 后面想到一种,在电脑开机时就开启,并在后台运行,等到有人去网页里面进行触发,这时候就有个问题&a…...

Linux网络编程一(协议、TCP协议、UDP、socket编程、TCP服务器端及客户端)
文章目录 协议1、分层模型结构2、网络应用程序设计模式3、ARP协议4、IP协议5、UDP协议6、TCP协议 Socket编程1、网络套接字(socket)2、网络字节序3、IP地址转换4、一系列函数5、TCP通信流程分析 第二次更新,自己再重新梳理一遍… 协议 协议:指一组规则&…...

Python读取Excel根据每行信息生成一个PDF——并自定义添加文本,可用于制作准考证
文章目录 有点小bug的:最终代码(无换行):有换行最终代码无bug根据Excel自动生成PDF,目录结构如上 有点小bug的: # coding=utf-8 import pandas as pd from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from reportlab.pdfbase import pdf…...

http: server gave HTTP response to HTTPS client 分析一下这个问题如何解决中文告诉我详细的解决方案
这个错误信息表明 Docker 客户端在尝试通过 HTTPS 协议连接到 Docker 仓库时,但是服务器却返回了一个 HTTP 响应。这通常意味着 Docker 仓库没有正确配置为使用 HTTPS,或者客户端没有正确配置以信任仓库的 SSL 证书。以下是几种可能的解决方案࿱…...

Flume学习笔记
视频地址:https://www.bilibili.com/video/BV1wf4y1G7EQ/ 定义 Flume是一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。 Flume高最要的作用就是实时读取服务器本地磁盘的数据,将数据写入HDFS。 官网:https://flume.apache.org/releases/content/1.9.0/…...

数据库系统概论(超详解!!!) 第三节 关系数据库标准语言SQL(Ⅳ)
1.集合查询 集合操作的种类 并操作UNION 交操作INTERSECT 差操作EXCEPT 参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同 查询计算机科学系的学生及年龄不大于19岁的学生。SELECT *FROM StudentWHERE Sdept CSUNIONSELECT *FROM StudentWHERE Sage&l…...

与谷歌“分家”两年后,SandboxAQ推出统一加密管理平台
3月27日,SandboxAQ宣布其AQtive Guard平台现已全面可用(GA),适用于所有行业,以防范人工智能驱动和量子攻击的威胁。前者是在两年前3月从谷歌母公司Alphabet分拆出来的初创公司,并在当时获得了“九位数”的融…...

【卫星家族】 | 高分六号卫星影像及获取
1. 卫星简介 高分六号卫星(GF-6)于2018年6月2日在酒泉卫星发射中心成功发射,是高分专项中的一颗低轨光学遥感卫星,也是我国首颗精准农业观测的高分卫星,具有高分辨率、宽覆盖、高质量成像、高效能成像、国产化率高等特…...
XML与Xpath
XML与Xpath XML是一种具有某种层次结构的文件,Xpath则是解析这种文件的工具 接下来将会解释XML文件的结构和Xpath的基本使用,并且用Java语言进行操作展示。 XML结构 XML(可扩展标记语言)文件具有一种层次结构,由标签…...
【c++20】CPP-20-STL-Cookbook 学习笔记
Cpp20-STL-Cookbook-src简单的阅读笔记。c++20更好用了,比如STL 包含了一些这样的辅助函数,比如 make_pair() 和make_tuple() 等。 这些代码现在已经过时了,但是为了与旧代码兼容,会保留这些代码。比如 可以声明是一个std的string:Sum s1 {1u, 2.0, 3, 4.0f }?...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...