SELS-SSL/TLS
一、了解公钥加密(非对称加密)
非对称加密中,用于加密数据的密钥与用于解密数据的密钥不同。私钥仅所有者知晓,而公钥则可自由分发。发送方使用接收方的公钥对数据进行加密,数据仅能使用相应的私钥进行解密。
你可以将公钥想象成一把可以扣上的开着的挂锁——发送方可以将信息放入一个盒子中,并使用这把挂锁将其锁住。只有拥有这把挂锁钥匙的人才能再次取出信息并阅读。
二、数字签名
除了加密和解密数据外,公钥和私钥还可以用于对数据进行数字签名。当对数据进行签名时,会从数据中生成一个加密校验和。然后,发送者使用自己的私钥对校验和进行签名(加密)。
接收者也使用与发送者相同的算法,从接收到的消息中生成一个加密校验和。接着,他使用发送者的公钥对随消息发送的加密校验和进行解密。如果他自己计算的校验和与解密后的校验和相匹配,接收者就可以确定消息未被篡改,并且是由拥有该私钥的人发送的。
三、角色CA
上面描述的加密过程效果很好,但它存在一个弱点。你如何验证公钥的拥有者是谁呢?换句话说,你如何确保发送方真的是他们所声称的那个人?
解决这个问题的常见方法是使用一个证书颁发机构(CA)作为受信任的第三方,用其自己的私钥对公钥进行签名。由CA签名的公钥也被称为证书。你可以自己设立CA,或者使用第三方的CA。知名的第三方CA包括VeriSign和VISA等组织。这些组织的公钥会自动安装到大多数流行的Web浏览器中。通过用CA的公钥验证签名,浏览器可以验证来自Web服务器的公钥是有效的。
- 由证书颁发机构(CA)签名的公钥也被称为证书。
- 在SSL/TLS加密中,CA的使用方式如下:
- 浏览器识别以https://开头的网络地址。
- 网页浏览器向服务器请求由CA签名的服务器的公钥。
- 网页服务器将公钥发送给网页浏览器。
- 网页浏览器使用签发该公钥的CA的公钥来验证服务器的公钥。
- 如果公钥有效,网页浏览器和网页服务器将建立一个安全连接。
这样,通过CA签名的公钥(即证书),浏览器能够验证服务器的身份,并确保与服务器之间的通信是安全的。
四、对称加密
对称加密(Symmetrical Encryption),又称为单密钥加密或私钥加密,是密码学中的一类加密算法。以下是关于对称加密的详细解释:
- 定义与工作原理
- 定义:采用单钥密码系统的加密方法,即同一个密钥可以同时用作信息的加密和解密。
- 工作原理:在加密过程中,将明文(原始数据)划分为固定长度的块,然后通过密钥和加密算法将这些块转换成对应的密文块。在解密过程中,通过相同的密钥和解密算法,将密文块还原为明文块。
- 密钥管理
对称加密中使用的密钥只有一个,因此发收信双方都使用这个密钥对数据进行加密和解密。
密钥的保密性至关重要,因为一旦密钥被泄露,加密的数据就可能被轻易解密。 - 常见算法
常见的对称加密算法有AES、SM4、ChaCha20、3DES、Salsa20、DES、Blowfish、IDEA、RC5、RC6、Camellia等。
目前国际主流的对称加密算法是AES,而国内主推的则是国标的SM4。 - 应用场景
- 数据库加密:用于数据库中敏感数据的加密,如个人信息、银行账户信息等。
- 文件加密:用于对文档、图片、视频等文件进行加密保护。
- 网络通信:用于保护网络通信中的数据传输,如HTTPS、SSL/TLS等协议。
- 移动设备安全:用于保护移动设备中存储的敏感数据,如手机通讯录、短信、照片等。
- 特性与优势
- 加密解密速度快:由于使用相同的密钥进行加密和解密,对称加密通常比非对称加密更快。
资源消耗少:在处理大量数据时,对称加密的资源消耗相对较少。 - 适用于大量数据加密:由于速度快和资源消耗少的特点,对称加密非常适合用于大量数据的加密场景。
然而,对称加密在密钥管理方面存在一定的难题。由于双方都需要知道相同的密钥才能进行加密和解密,因此如何安全地分发和存储密钥成为了一个重要的问题。此外,如果密钥丢失或泄露,加密的数据将不再安全。
- 加密解密速度快:由于使用相同的密钥进行加密和解密,对称加密通常比非对称加密更快。
综上所述,对称加密是一种高效且广泛应用的加密算法,在保护数据机密性方面发挥着重要作用。然而,在使用对称加密时,需要特别注意密钥的安全管理和分发问题。
五、ssl/tls握手
结合非对称加密、签名和对称加密等安全手段来看一下ssl/tls的握手过程中的应用。
六、openssl工具的使用
- openssl工具介绍
- 名称
openssl - OpenSSL 命令行工具 - 描述
OpenSSL 是一个加密工具包,实现了安全套接层(SSL v2/v3)和传输层安全(TLS v1)网络协议,以及这些协议所需的相关加密标准。
openssl 程序是一个命令行工具,用于从 shell 中使用 OpenSSL 加密库的各种加密功能。它可以用于:- 创建和管理私钥、公钥及参数
- 公钥加密操作
- 创建 X.509 证书、证书签名请求(CSR)和证书吊销列表(CRL)
- 计算消息摘要
- 使用加密算法进行加密和解密
- SSL/TLS 客户端和服务器测试
- 处理 S/MIME 签名或加密邮件
- 时间戳请求、生成和验证
- 三种用法
- openssl 命令 [命令选项] [命令参数]
- 这种用法是openssl工具的主要功能,在描述部分阐述。
- openssl 程序提供了丰富的命令,每个命令通常都有大量的选项和参数。
如下,是openssl工具下所有的命令,共三种:标准命令,摘要命令和加密命令。
可以通过以下方法查看所有的命令:
关于选项,拿ca命令来说,如下图
如何查看命令的所有选项及选项说明?
- 许多命令使用外部配置文件来指定其部分或全部参数,并有一个 -config 选项来指定该文件。可以使用环境变量 OPENSSL_CONF 来指定文件的位置。如果未指定环境变量,则在openssl配置文件/etc/ssl/openssl.cnf的默认的证书存储区域中来定义,该区域的值取决于构建 OpenSSL 时指定的配置标志,可修改为自定义的常用值。
- openssl list [标准命令 | 摘要命令 | 加密命令 | 加密算法 | 摘要算法 | 公钥算法]
-
这种用法是用来查询各种命令的。
-
list 参数中的 standard-commands、digest-commands 和 cipher-commands 分别输出当前 openssl 工具中可用的所有标准命令、消息摘要命令或加密命令的名称列表(每行一个条目)。
用法如下:
列出所有的标准命令:
-
list 参数中的 cipher-algorithms 和 digest-algorithms 列出所有加密算法和消息摘要名称,每行一个条目。别名以“from => to”的形式列出。
-
list 参数中的 public-key-algorithms 列出所有支持的公钥算法。
-
- openssl no-XXX [任意选项]
- 该用法用于测试命令。
- no-XXX 命令用于测试指定名称的命令是否可用。如果不存在名为 XXX 的命令,则返回 0(成功)并打印 no-XXX;否则返回 1 并打印 XXX。在这两种情况下,输出都发送到标准输出,并且不向标准错误打印任何内容。始终忽略附加的命令行参数。由于每种加密算法都有一个同名的命令,这为 shell 脚本提供了一种简单的方法来测试 openssl 程序中加密算法的可用性。(no-XXX 无法检测诸如 quit、list 或 no-XXX 本身之类的伪命令。)
- 例如:
- openssl 命令 [命令选项] [命令参数]
- 名称
- 示例:
所以,看完以上介绍,下面的命令如何理解?
openssl req -new -x509 -keyout demoCA/private/cakey.pem -out demoCA/cacert.pem -days 3652 -newkey rsa:4096
openssl:使用openssl工具
req:命令,man req查询,req 命令主要用于创建和处理 PKCS#10 格式的证书请求。此外,它还可以创建自签名证书,例如 用作根证书颁发机构 (CA)。
-new: 命令的第一个参数,man req查询,此选项用于生成新的证书请求。它会提示用户输入相关字段的值。实际提示的字段及其最大和最小尺寸在配置文件中指定,并且包括任何请求的扩展项。如果未使用 -key 选项,它将使用配置文件中指定的信息生成新的 RSA 私钥。
-x509:命令的第二个参数,man req查询,此选项输出自签名证书,而不是证书请求。这通常用于生成测试证书或自签名根证书颁发机构 (CA)。添加到证书中的扩展项(如果有的话)在配置文件中指定。除非使用 set_serial 选项指定,否则将使用一个大随机数作为序列号。如果通过 -in 选项指定了现有的请求,那么该请求将被转换为自签名证书;否则,将创建新的请求。
-keyout:命令的第三个参数,man req查询,此选项指定新创建的私钥要写入的文件名。如果未指定此选项,则使用配置文件中存在的文件名。
-out:命令的第四个参数,man req查询,这指定了要写入的输出文件的名称,或者默认情况下写入标准输出。
-days:命令的第五个参数,man req查询,当使用 -x509 选项时,这指定了证书的认证天数。默认值为30天。
-newkey:此选项用于创建新的证书请求和新的私钥。其参数可以采用多种形式:
rsa:nbits,其中nbits表示位数,用于生成指定大小的RSA密钥。如果省略nbits(即仅指定-newkey rsa),则使用配置文件中指定的默认密钥大小。如本例: rsa:4096
对于所有其他算法,支持-newkey alg:file形式,其中file可以是算法参数文件(由genpkey -genparam命令生成)或具有相应算法的密钥的X.509证书。
param:file使用参数文件或证书文件生成密钥,算法由参数确定。
algname:file使用算法algname和参数文件file:两者必须匹配,否则会出现错误。
algname仅使用算法algname,如有必要,应通过-pkeyopt参数指定参数。
dsa:filename使用文件filename中的参数生成DSA密钥。
ec:filename生成EC密钥(可用于ECDSA或ECDH算法)。
gost2001:filename生成GOST R 34.10-2001密钥(需要在配置文件中配置ccgost引擎)。如果仅指定gost2001,则应通过-pkeyopt paramset:X指定参数集。
总结: 这就是创建一个自定义的ca根证书,使用这个命令前,先查看或者配置好openssl.cnf文件中的下图配置,或者按照配置文件中的要求,在指定位置创建好目录。
说了这么多,理解了就可以了。记住以上命令,用的时候直接拷贝一份执行即可,如有不同需求,修改对应参数即可。
七、常用创建自签名证书过程
- 创建配置文件中指定的目录。例如:
mkdir -p /root/demoCA/certs
cd /root/demoCA/
mkdir crl newcerts requests private
chmod 700 private
cd
- 创建自定义CA根证书:
openssl req -new -x509 -keyout demoCA/private/cakey.pem -out demoCA/cacert.pem -days 3652 -newkey rsa:4096
- 创建服务器请求签名:
openssl req -new -keyout demoCA/private/server_key.pem -out demoCA/requests/server_req.pem -newkey rsa:2048
- 创建openssl所需的index.txt和序列文件,以跟踪已签署的证书:
touch demoCA/index.txtecho 01 > demoCA/serial
- 创建服务器证书:
openssl ca -policy policy_anything -days 365 -out demoCA/certs/server_crt.pem -infiles demoCA/requests/server_req.pem
- 验证:
- 创建vsftp服务,并配置好证书和私钥的位置并打开ssl开关,其他vsftp配置本处不记录,示例如下:
- 使用如下命令将服务器私钥转换成无密码保护的私钥。
openssl rsa -in /etc/vsftpd/certs/server_key.pem -out /etc/vsftpd/certs/server_key2.pem
-
重启vsftpd
-
结果
- 创建vsftp服务,并配置好证书和私钥的位置并打开ssl开关,其他vsftp配置本处不记录,示例如下:
相关文章:
SELS-SSL/TLS
一、了解公钥加密(非对称加密) 非对称加密中,用于加密数据的密钥与用于解密数据的密钥不同。私钥仅所有者知晓,而公钥则可自由分发。发送方使用接收方的公钥对数据进行加密,数据仅能使用相应的私钥进行解密。 你可以将…...
算法:排序
排序算法 1. 简单排序1.1 直接插入排序1.2 冒泡排序1.3 简单选择排序 2. 希尔排序3. 快速排序4. 堆排序5. 归并排序 将文件的内容按照某种规则进行排列。 排序算法的稳定判定:若在待排序的一个序列中, R i R_i Ri和 R j R_j Rj的关键码相同…...
MyBatis-Plus 更新对象时如何将字段值更新为 null
MyBatis-Plus 是一个 MyBatis 的增强工具,在简化开发、提高效率方面表现非常出色。然而,在使用 MyBatis-Plus 更新对象时,默认情况下是不会将字段值更新为 null 的。这是因为 MyBatis-Plus 使用了非空字段策略(FieldStrategy&…...
Unreal5从入门到精通之如何在VR中使用3DUI
文章目录 前言创建3DUI1.新建控件蓝图2.添加控件到画布上3.新建Actor蓝图MyUIActor4.添加控件组件Widget5.设置控件类和画布大小6.创建MyUIActor实例到场景中3DUI和VR射线交互1.添加按钮的点击事件2.设置MyUIActor碰撞响应3.VRPawn添加控件交互组件4.添加手柄Trigger点击事件绑…...
ViSual studio如何安装 并使用GeographicLib
在C的 Boost.Geometry、GDAL/OGR 和 GeographicLib。这些库都可以用于计算两个经纬度点之间的地面距离。 . Boost.Geometry 描述:Boost库的一部分,提供了几何计算功能,包括计算两点之间的地面距离。 优势:轻量级、易于集成到C项…...
Java程序设计:spring boot(11)——分布式缓存 Ehcache 整合
目录 1 Spring Cache 相关注解说明 1.1 CacheConfig 1.2 Cacheable 1.3 CachePut 1.4 CacheEvict 1.5 Caching 2 环境配置 2.1 pom.xml 依赖添加 2.2 ehcahe.xml ⽂件添加 2.3 application.yml 缓存配置 2.4 启动缓存 2.5 JavaBean 对象实现序列化 3 缓存实现 3.…...
豆包,攻克数字是个什么工具?《GKData-挖掘数据的无限可能》(数据爬虫采集工具)
豆包,攻克数字是个什么工具? “攻克数字” 指的是 “攻克数字(GKData)” 这样一款工具。是一款针对网页、APP中数据自动解析转表存入数据库的软件,为数据工作者而生。它是一个不会编程也能用的可视化数据解析为标准二…...
说一说QWidget
目录 关于QWidget 作为界面组件时,你需要有印象的 1. 控制属性 2. 组件状态与交互属性 3. 外观和样式属性 4. 布局与子组件管理属性 5. 图标和光标属性 6. 大小策略属性 作为单独的窗体的属性 写Qt快两年了,也写过一些规模偏大的软件,…...
Web3.0技术入门
Web3.0技术入门是一个涉及多个方面和领域的复杂过程,以下是一些关键的步骤和要点,帮助您初步了解并掌握Web3.0技术。 一、了解Web3.0的基本概念 Web3.0也被称为下一代互联网,它是对当前互联网(Web2.0)的演进和升级。…...
spygalss cdc 检测的bug(二)
当allow_qualifier_merge设置为strict的时候,sg是要检查门的极性的。 如果qualifier和src经过与门汇聚,在同另一个src1信号或门汇聚,sg是报unsync的。 假设当qualifier为0时,0&&src||src1src1,src1无法被gat…...
集合论(ZFC)之 选择公理(Axiom of Choice)注解
直观感受(Intuition) 集合论(ZFC)中的 "C" 指的是选择公理(Axiom of Choice)中的"choice"。简单来说,对于任一非空集合 S,那么存在一个函数 f,选择出…...
JS:字符串操作
目录 1、 字符串分割 1、 字符串分割 var str "123,456,789"; console.log(str.split(,)); // ["123", "456", "789"]...
.NET 一款二进制文件转换Shellcode的工具
01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失…...
【CSS】——基础入门常见操作
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:CSS引入 二:CSS对元素进行美化 1:style修饰 2:选…...
LuaJIT源码分析(五)词法分析
LuaJIT源码分析(五)词法分析 lua虽然是脚本语言,但在执行时,还是先将脚本编译成字节码,然后再由虚拟机解释执行。在编译脚本时,首先需要对源代码进行词法分析,把源代码分解为token流。lua的toke…...
005 匿名信
005 匿名信 题目描述 电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字剪下来,剪拼成一封匿名信。现在有一名举报人,希望借鉴这种方式,使用英文报刊完成举报操…...
聊聊Web3D 发展趋势
随着 Web 技术的不断演进,Web3D 正逐渐成为各行业数字化的重要方向。Web3D 是指在网页中展示 3D 内容的技术集合。近年来,由于 WebGL、WebGPU 等技术的发展,3D 内容已经能够直接在浏览器中渲染,为用户提供更加沉浸、互动的体验。以…...
【数据结构与算法】LeetCode: 贪心算法
文章目录 LeetCode: 贪心算法买卖股票的最佳时机 (Hot100)买卖股票的最佳时机 II跳跃游戏 (Hot100)跳跃游戏 II(Hot100)划分字母区间 (Hot100)分发饼干K次取反后最大化的…...
Date 日期类的实现(c++)
本文用c实现日期类 将会实现以下函数 bool operator<(const Date& d);bool operator<(const Date& d);bool operator>(const Date& d);bool operator>(const Date& d);bool operator(const Date& d);bool operator!(const Date& d);Date&…...
智能家居10G雷达感应开关模块,飞睿智能uA级别低功耗、超高灵敏度,瞬间响应快
在当今科技飞速发展的时代,智能家居已经逐渐成为人们生活中不可或缺的一部分。从智能灯光控制到智能家电的联动,每一个细节都在为我们的生活带来便利和舒适。而在众多智能家居产品中,10G 雷达感应开关模块以其独特的优势,正逐渐成…...
头歌——人工智能(机器学习 --- 决策树2)
文章目录 第5关:基尼系数代码 第6关:预剪枝与后剪枝代码 第7关:鸢尾花识别代码 第5关:基尼系数 基尼系数 在ID3算法中我们使用了信息增益来选择特征,信息增益大的优先选择。在C4.5算法中,采用了信息增益率…...
一七一、React性能优化方式
在 React 中进行性能优化可以通过多种手段来减少渲染次数、优化渲染效率并减少内存消耗。以下是常见的性能优化方法及示例: 1. shouldComponentUpdate shouldComponentUpdate 是类组件中的生命周期方法,它可以让组件在判断是否需要重新渲染时ÿ…...
编写dockerfile生成镜像,并且构建容器运行
编写dockerfile生成镜像,并且构建容器运行 目录 编写dockerfile生成镜像,并且构建容器运行 概述 一、dockerfile文件详解 Dockerfile的基本结构 Dockerfile的常用指令 二、构建过程 概述 随着微服务应用越来越多,大家需要尽快掌握dock…...
Java项目练习——学生管理系统
1. 整体结构 代码实现了基本的学生管理系统功能,包括登录、注册、忘记密码、添加、删除、修改和查询学生信息。 使用了ArrayList来存储用户和学生信息。 使用了Scanner类来处理用户输入。 2. 主要功能模块 登录 (logIn):验证用户名和密码,…...
sqlserver、达梦、mysql的差异
差异项sqlserver达梦mysql单行注释---- 1、-- ,--后面带个空格 2、# 包裹对象名称,如表、表字段等 [tableName] "tableName"tableName表字段自增IDENTITY(1, 1)IDENTITY(1, 1)AUTO_INCREMENT二进制数据类型IMAGEIMAGE、BLOBBLOB 存储一个汉字需…...
Spring AOP(定义、使用场景、用法、3种事务、事务失效场景及解决办法、面试题)
目录 1. AOP定义? 2.常见的AOP使用场景: 3.Spring AOP用法 3.1 Spring AOP中的几个核心概念 3.1.1 切面、切点、通知、连接点 3.1.2 切点表达式AspectJ 3.2 使用 Spring AOP 的步骤总结 3.2.1 添加依赖: 3.2.2 定义切面和切点(切点和…...
Flutter鸿蒙next 封装对话框详解
✅近期推荐:求职神器 https://bbs.csdn.net/topics/619384540 🔥欢迎大家订阅系列专栏:flutter_鸿蒙next 💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路…...
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
前言 随着多模态大模型的发展,其不仅限于文字处理,更能够在图像、视频、音频方面进行识别与理解。医疗领域中,医生们往往需要对各种医学图像进行处理,以辅助诊断和治疗。如果将多模态大模型与图像诊断相结合,那么这会…...
SCSI驱动与 UFS 驱动交互概况
SCSI子系统概况 SCSI(Small Computer System Interface)子系统是 Linux 中的一个模块化框架,用于提供与存储设备的通用接口。通过 SCSI 子系统,可以支持不同类型的存储协议(如 UFS、SATA、SAS),…...
软件工程实践项目:人事管理系统
一、项目的需求说明 通过移动设备登录app提供简单、方便的操作。根据公司原来的考勤管理制度,为公司不同管理层次提供相应的权限功能。通过app上面的各种标准操作,考勤管理无纸化的实现,使公司的考勤管理更加科学规范,从而节省考…...
建网站松滋哪家强?/销售清单软件永久免费版
文章目录1.安装和启动2.如何保证mysql服务器长时间提供服务3.账号密码设置4.原理分析4.1数据库是什么4.2数据库如何进行数据的交互5.有关操作5.1配置文件所在地5.2查看mysql之中有多少数据库5.3要使用的数据库、以及查看数据表5.4如何创建数据库5.5查看已经创建好的数据库的创建…...
武汉网站开发有限公司/百度上做优化一年多少钱
同事老王最近的电脑没声音怎么办呢?很多时候电脑的声卡驱动出现故障就会导致电脑没有声音,那么电脑没有声音了怎么恢复呢?下面让小编教你电脑没声音了恢复步骤吧。如果你还有其他自己无法解决的电脑问题,不妨到【小白一键重装系统】自助获取相关解决教程。小白一键…...
网站技术方案/ip域名查询网站入口
云计算,拼的就是运维”这个理念已经深入人心,这凸显了运维工作在云计算场景下的重要性。 什么是云计算? 云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池&am…...
崇安网站建设/网络营销公司排名
文章目录概念介绍Widget分类Widget的状态示例代码我们在上一章回中介绍了Flutter版HelloWord,本章回中将介绍 Widget,闲话休提,让我们一起Talk Flutter吧。概念介绍 在Flutter中所有内容都是Widget,大到屏幕中的页面,小到页面中的文字图片都…...
小企业来说 电子商务网站服务器的建设方案/百度网
Android 进程间通信 一、 本地服务与远程服务(AIDL服务)区别本地服务:无法供在设备上运行的其他应用程序访问。一般而言, 这些服务类型仅支持承载该服务的应用程序。onBind方法为在同一设备上运行的外部应用程序提供一个接口来与服务通信。 1.1不需和A…...
css网站做光晕效果/导购网站怎么推广
变量的声明提升:就是把变量的声明提升到当前作用域的最前面 函数的声明提升:就是把整个函数提升到当前作用域的最前面(位于前置的变量声明后面) Javascript中的作用域及作用域链 执行环境:定义了变量或者函数有权访问的其他的数据…...