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…...
通用GUI编程技术——Win32 原生编程实战(十八)——GDI 设备上下文(HDC)完全指南
通用GUI编程技术——Win32 原生编程实战(十八)——GDI 设备上下文(HDC)完全指南 前面一系列文章我们聊了对话框、控件、资源这些内容,我们的窗口已经能够显示各种控件了。但你可能已经发现了一个问题:我们所…...
从‘偏差-方差’到一行代码:用NumPy/PyTorch五步实现GAE,附PPO实战避坑点
从‘偏差-方差’到一行代码:用NumPy/PyTorch五步实现GAE,附PPO实战避坑点 强化学习中的策略优化常常面临一个核心挑战:如何准确评估动作的价值?广义优势估计(GAE)通过巧妙平衡偏差与方差,成为PP…...
R语言新手必看:clusterProfiler功能富集分析从安装到实战(附常见报错解决方案)
R语言实战:clusterProfiler功能富集分析全流程指南 第一次接触功能富集分析时,我被那些密密麻麻的基因列表和复杂的生物学术语搞得晕头转向。直到发现了clusterProfiler这个神器,它就像生物信息学分析中的瑞士军刀,把复杂的富集过…...
提升嵌入式代码注释质量的工具与技术方案
提升代码注释质量的实用工具与技术方案1. 代码注释工具概述1.1 代码注释的重要性在嵌入式系统开发中,良好的代码注释是保证项目可维护性的关键因素。专业的注释工具能够帮助开发者:创建可视化注释,提升代码可读性生成标准化的文档结构维护代码…...
Qt串口通信实战:用QSerialPort从零搭建一个串口调试助手(附完整源码)
Qt串口通信实战:从零构建工业级调试助手 在嵌入式开发和工业控制领域,串口通信作为最基础也最可靠的通信方式之一,至今仍发挥着不可替代的作用。无论是单片机与上位机的数据交换,还是工业设备的参数配置,一个稳定高效的…...
给渗透新手的保姆级指南:用Kali和MSF搞定VulnHub经典靶机DC-1
Kali Linux渗透测试实战:从零攻破VulnHub DC-1靶机 环境准备与靶机配置 在开始渗透测试之前,确保你已经准备好以下工具和环境。Kali Linux作为渗透测试的标准发行版,集成了我们所需的所有工具。DC-1是Vulnhub上一个专为渗透测试练习设计的靶机…...
如何高效使用抖音批量下载器:3分钟快速上手完整指南
如何高效使用抖音批量下载器:3分钟快速上手完整指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为手动保存抖音视频而烦恼吗?每次看到喜欢的合集都要一个个点击分享保存&…...
python-flask-djangol框架的考公考编学习课程资料推荐系统
目录技术选型与架构设计数据采集与处理推荐算法实现用户画像构建前端交互与功能部署与优化合规与扩展项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与架构设计 采用Python Flask作为后端框架,搭配SQLAlch…...
网络安全学习攻略宝典,从菜鸟到高手的必由之路
想成为一名真正的黑客到底该怎么学? 从0开始又该从何学起呢? 很多人想学习网络安全,却不知道从何下手。别迷茫,这篇文章为你指明方向,无论你是零基础小白,还是有一定基础想提升的人,都能从中找…...
从零上手Neo4j Desktop:CSV数据导入与核心Cypher操作指南
1. Neo4j Desktop环境准备与数据导入 第一次打开Neo4j Desktop时可能会被它的界面搞得有点懵,别担心,我刚开始用的时候也这样。这个工具把数据库管理、浏览器界面和插件都集成在了一起,特别适合新手快速上手。安装过程我就不赘述了࿰…...
