SSL握手协议相关概念
下图为握手协议的流程图,具体的解释参考博客:
【下】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS_tenfyguo的博客-CSDN博客
下面梳理一下SSL协议中的一些细节。首先是相关名词:证书、签名、非对称加密、预主秘钥。
签名和非对称加密
非对称加密是一类加密算法,使用两个不同的秘钥,公开的称之为公钥,不对外公开的叫私钥,公钥-私钥是成对的,公钥加密的数据可以用私钥解密,私钥加密的数据可以用公钥解密,但是公钥加密的不能用公钥解密。非对称加密的RSA算法可以参考我之前写的一篇博客,算法非常简单。
SSL-RSA加密算法实践_腾昵猫的博客-CSDN博客
证书
证书包含3种:根证书、中间证书、服务器证书。
根证书是顶层的证书,这个证书就是一个私钥和一个公钥。公钥发布安装给各个客户端和浏览器,也就是客户端的根证书。
中间证书是CA生成的,服务器提交CSR文件(这个接下来介绍)以后服务器会针对这个服务器生成一对非对称加密的秘钥,然后将公钥写到中间证书中,并用根证书的私钥对中间证书进行签名(客户端根证书有相关CA的公钥,通过公钥可以解开中间证书上根证书的签名,使得中间证书可信)。接着,通过中间证书的私钥对服务器证书进行签名(用户在SSL握手时会得到中间证书,其中包含中间证书公钥,用户可以通过该公钥解开服务器证书上的签名,使得服务器证书可信)。也就是形成一个“根证书->中间证书->服务器证书”的信任链。
服务器证书是服务器生成的一个证书,里面包含了一些标明身份的信息。并且这个服务器证书使用了服务器自己的私钥进行了签名(这个服务器证书在SSL握手过程中也会发给用户,里面包含公钥,通过公钥可以验证签名,保证服务器证书不被篡改)。
证书的生命过程包括:申请和使用。
在申请证书时,服务器会生成一个CSR文件,其中包含了服务器的公钥和相关信息。服务器将这个CSR文件发送给CA,以请求签发证书。CSR文件的具体生成过程如下:
生成密钥对:服务器首先会生成一对密钥,包括公钥和私钥。通常使用非对称加密算法,如RSA或ECDSA生成密钥对。
生成CSR文件:服务器使用生成的密钥对,以及服务器的相关信息,生成CSR文件。具体的生成步骤如下:
主题信息:CSR文件中包含了服务器的主题信息,包括组织名称、通用名称(域名)、国家/地区、州/省、城市等。
公钥:CSR文件中也包含了服务器的公钥信息。
数字签名:CSR文件会使用服务器的私钥对上述主题信息进行数字签名,以确保CSR的完整性和真实性。
提交CSR文件:生成CSR文件后,服务器会将该文件提交给证书颁发机构(CA),以请求签发数字证书。
SSL协议并不是所有阶段都使用非对称加密的,而是只在握手阶段进行非对称加密,而在接下来使用的都是对称加密。对称加密就得协商怎么生成一个秘钥,其中会用到一种秘钥协商算法是Diffie-Hellman算法,如下:
Diffie-Hellman密钥协商算法是一种用于在不安全的通信渠道上协商共享密钥的方法,它的基本原理如下:
密钥协商参数生成: 选择一个大素数p和一个原根g,将它们作为公开的全局参数。 发送者(通常是客户端)选择一个私密的随机数a,并计算发送者的公钥A = g^a mod p。 接收者(通常是服务器)选择一个私密的随机数b,并计算接收者的公钥B = g^b mod p。 发送者和接收者分别将自己的公钥发送给对方。
密钥协商过程: 发送者收到接收者的公钥B后,计算共享密钥K = B^a mod p。 接收者收到发送者的公钥A后,计算共享密钥K = A^b mod p。
发送者和接收者计算得到的共享密钥K是相同的,可以作为后续通信的对称密钥。 Diffie-Hellman密钥协商算法的关键在于,即使在不安全的通信渠道上,攻击者可以截获公开的参数和公钥,但由于无法轻易计算出私密的随机数a和b,无法直接推导出共享密钥K。因此,Diffie-Hellman算法具有前向安全性。 为了增加安全性,通常还会对生成的共享密钥K进行进一步的处理,如通过密钥派生函数生成会话密钥,用于后续的加密和解密操作。 需要注意的是,Diffie-Hellman密钥协商算法本身并不提供身份验证和数据完整性保护,通常需要与其他安全机制(如数字签名和消息认证码)结合使用,以确保通信的安全性。
相关文章:

SSL握手协议相关概念
下图为握手协议的流程图,具体的解释参考博客: 【下】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS_tenfyguo的博客-CSDN博客 下面梳理一下SSL协议中的一些细节。首先是相关名词:证书、…...

idea 打开java项目后新建的模块中,java文件夹需要变成蓝色,以及resources文件夹变成三条杠的
idea 打开java项目后新建的模块中,java文件夹需要变成蓝色,以及resources文件夹变成三条杠的方法 再选择modules,找到需要变蓝的文件夹,点击sources即可 同理resources文件夹变成三条杠也只需要找到对应文件夹,点击re…...

【Docker】Docker network之bridge、host、none、container以及自定义网络的详细讲解
🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL&…...

滑模控制器理论推导和matlab/simulink实例分享
滑模控制的运动轨迹主要分为两个方面:(1)系统的任意初始状态向滑模面运动阶段;(2)系统到达滑模面后并且慢慢趋于稳定的阶段。所以,对于滑模变结构控制器的设计,对应于系统运动的两个阶段,可以分为两个部分:…...
git 操作
git切换ssh和http协议 切换协议: 查看当前remote git remote -v 切换到http: git remote set-url https://github.com/username/repository.git 切换到ssh: git remote set-url gitgithub.com:username/repository.git 某些文件不想提交…...

自建hexo博客并将原有的文章发布其上
1、保存粘贴到memo9中的博客文章,并将txt转换成word文档 varPowerShellPath, CommandLine: string; // , ScriptPath begin//save to txtMemo9.Lines.SaveToFile(test.txt);memo10.Lines.SaveToFile(txt2word.ps1);//save as docxPowerShellPath : powershell.exe…...

【双指针_和为 s 的两个数_C++】
和为s的两个数字 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int n nums.size();int left 0;int right n-1;while(left<right){if(nums[left]nums[right]>target) right--;else if(nums[left]nums[right]<tar…...

HTML5的介绍和基本框架
目录 HTML5 HTML5介绍 HTML5的DOCTYPE声明 HTML5基本骨架 html标签 head标签 body标签 title标签 meta标签 在vscode中写出第一个小框架 HTML5 HTML5介绍 HTML5是用来描述网页的一种语言,被称为超文本标记语言。用HTML5编写的文件,后缀以.ht…...

代码随想录算法训练营第58天|动态规划part15|392.判断子序列、115.不同的子序列
代码随想录算法训练营第58天|动态规划part15|392.判断子序列、115.不同的子序列 392.判断子序列 392.判断子序列 思路: (这道题也可以用双指针的思路来实现,时间复杂度也是O(n)) 这道题应该算是编辑距…...

日常BUG——普通页面跳转tabbar页面报错
😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 微信小程序页面跳转的时候出现下面的问题: wx.redirectTo({url: /pages/index/i…...

SpringBoot复习:(48)RedisAutoConfiguration自动配置类
RedisAutoConfiguration类代码如下: 可以看到在这个类中配置了2个bean: redisTemplate和stringRedisTemplate. 而它通过EnableConfigurationProperties(RedisProperties.class)注解,把配置文件中配置的Redis相关的信息引入进来了,RedisPrope…...

软硬件免费,服务收费:网络安全商业模式正在被颠覆
大数据产业创新服务媒体 ——聚焦数据 改变商业 从元宇宙到造汽车,重回国内A股市场五年的360一路苦追热点。一直到大模型横空出世,360才算真正找到感觉,经历一次战略上的回归。 在8月9日的互联网安全大会上,一袭红衣的红衣教主周…...

变形金刚:从零开始【01/2】
一、说明 在我们的日常生活中,无论你是否是数据科学家,你都在单向地使用变压器模型。例如。如果您使用的是 ChatGPT 或 GPT-4 或任何 GPT,那么在为您回答问题的框中是变压器的一部分。如果您是数据科学家或数据分析师,则可能正在使…...

Opencv特征检测之ORB算法原理及应用详解
Opencv特征检测之ORB算法原理及应用详解 特征是图像信息的另一种数字表达形式。一组好的特征对于在指定 任务上的最终表现至关重要。视觉里程 (VO) 的主要问题是如何根据图像特征来估计相机运动。但是,整幅图像用来计算分析通常比较耗时,故而转换为分析图像中的特征点的运动…...

【es6】函数柯里化(Currying)
柯里化(Currying):把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数。 柯里化由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,它是 Mos…...
线上多域名实战
本文博主给大家分享线上多域名实战,当线上主域名不可用的情况下,启用备用域名完成网站高可用保障。 网站的高可用性一直是网站运维的重中之重。一旦网站宕机,不仅会造成巨大的经济损失,也会严重影响用户体验。备份域名就是一种实现…...
【C语言】上手实验
实验1 顺序、分支结构 程序填空 1. 题目描述:输入三个整数存放在变量a、b、c中,找出三个数中的最大值放于max中,并将其输出。以下是完成此项工作的程序,请将未完成的部分填入,实现其功能,并在计算机上…...

设计HTML5表单
HTML5基于Web Forms 2.0标准对HTML4表单进行全面升级,在保持简便、易用的基础上,新增了很多控件和属性,从而减轻了开发人员的负担。表单为访问者提供了与网站进行互动的途径,完整的表单一般由控件和脚本两部分组成。 1、认识HTML…...

使用Kaptcha生成验证码
说明:验证码,是登录流程中必不可少的一环,一般企业级的系统,使用都是专门制作验证码、审核校验的第三方SDK(如极验)。本文介绍,使用谷歌提供的Kaptcha技术,制作一个简单的验证码。 …...

【vue】vue中的插槽以及使用方法
插槽 普通插槽 1、在父组件中直接调用子组件的标签,是可以渲染出子组件的内容;如果在子组件标签中添加了内容,父组件就渲染不出来了; ParentComponent.vue: <template><div><h1>Parent Componen…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...