openssl3.2 - 官方dmeo学习 - 索引贴

2024-01-11 17:52

本文主要是介绍openssl3.2 - 官方dmeo学习 - 索引贴,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • openssl3.2 - 官方dmeo学习 - 索引贴
    • 概述
    • 笔记
    • 工程的搭建和调试环境
    • BIO
    • BIO - client-arg.c
    • BIO - client-conf.c
    • BIO - saccept.c
    • BIO - sconnect.c
    • BIO - server-arg.c
    • BIO - server-cmod.c
    • BIO - server-conf.c
    • BIO - 总结
    • END

openssl3.2 - 官方dmeo学习 - 索引贴

概述

如果要将openssl在自己的业务逻辑中用起来, 只从网上找零星的代码片段肯定不行的.
且不说人家写的好不好, 主要是我们不知道人家为啥那么写.
openSSL的API, 不同版本, API调用名称, 调用顺序. 是否为已经废弃, 都不同.
如果不是官方demo中推荐的写法, 如果有问题, 那也不好找问题. 作为研发, 我们比对能力还是强的.
如果是从网上找的代码片段, 在最新的openSS中是否能编译过, 都是个问题.

如果要用某个版本的openSSL(如果是新工程, 最好用新版的openSSL) , 看看官方提供的demo, 都清楚了.
如果是旧工程, 就要找对应的openSSL的版本的官方demo来看.
如果是从已有工程的旧openSSL版本迁移到最新的openSSL版本, 官方也有文档说明.
官方提供的Demo, 知识点比较全, 人家就是给用户写的很多具体例子(每个demo集中展示一个或几个小知识点), 用代码来展示openSSL库某个具体知识点具体咋用.

想将openssl3.2的官方demo过一遍, 过完之后, 就知道openssl能具体干啥了. 应用openssl库的编程细节也就知道了.
要想知道openssl3.2的编程细节, 看官方demo是最直接的方法.
在走读openssl demo实现时, 哪里有疑问, 可以自己写测试代码, 自己试试. 有自己的理解, 可以写注释给以后看.

当然, 在用openSSL干活之前, 密码学的书和资料也要稍微看看. 要不就不知道官方demo的知识背景.
如果能找到大佬出的教程, 初步看一下, 被大佬带一下, 让师傅领进门是最好的.
能出书和出教程的大佬, 人家也是看官方demo, 自己学出来的.

openSSL官方的demo都是在一个.c中实现的, 数了一下, 大概70个.
准备将这70个demo的源码走读完, 预计花7天.
等全部走读完, 业务逻辑上用到哪些openSSL操作, 就知道去哪个demo中找了.
移植(迁移)代码这事, 作为研发都熟悉, 不是问题.

笔记

工程的搭建和调试环境

VS2019 vc++ console
openSSL3.2安装到了c:\openssl_3d2
建立一个vs2019 c++ 控制台工程.
包含openssl3.2的头文件路径 => .;C:\openssl_3d2\include;
包含openssl3.2的库路径 => C:\openssl_3d2\lib;
删掉工程模板的.cpp实现
将官方实现(e.g. client-arg.c)放到工程中, 作为主实现
在.c中, 将库包含上, 将openssl/applink.c包进去.

#pragma comment(lib, "libcrypto.lib")
#pragma comment(lib, "libssl.lib")#include <openssl/applink.c> /*! for OPENSSL_Uplink(00007FF8B7EF0FE8,08): no OPENSSL_Applink */

根据编译选项, 加入一些编译宏, 使程序0错误0警告.

add _CRT_SECURE_NO_WARNINGS to VS2019 option

此时编译工程, 就是能编译过的. 0错误0警告
然后就是自己单步看看程序功能和API用法.
在这个过程中, 看看此demo包含哪些知识点?
这些知识点的API的建立, 调用, 释放的流程?
这3步中, 参数都是咋给定的?
自己能从这个demo中学到啥? 如果有, 可以加个注释以后看.
是不是自己也可以尝试改2句试试?
如果此demo要和其他demo配合用, 等过到相关demo时, 再打开这个demo配合用一下, 能更好的理解demo的实现.

BIO

BIO是openssl处理输入/输出的API, 可以处理文件, SSL连接的读写.

BIO - client-arg.c

TLS客户端(服务器连接串从命令行参数来), 向服务器get一个东西
openssl3.2 - 官方dmeo学习 - client-arg.c

BIO - client-conf.c

TLS客户端(服务器连接串从配置文件来), 向服务器get一个东西
openssl3.2 - 官方dmeo学习 - client-conf.c

BIO - saccept.c

建立TLSServer(使用了证书, 和证书中的私钥), 接收客户端的连接, 并将客户端发来的信息打印到屏幕
openssl3.2 - 官方dmeo学习 - saccept.c

BIO - sconnect.c

TLS客户端 - 使用根证书, 非阻塞, 向服务器要东西.
openssl3.2 - 官方dmeo学习 - saccept.c

BIO - server-arg.c

TLS服务器, 等客户端来连接; 如果客户端断开了, 通过释放bio来释放客户端socket, 然后继续通过bio读来aceept.

openssl3.2 - 官方dmeo学习 - server-arg.c

BIO - server-cmod.c

从配置文件中读参数, 建立TLS服务器, 死等客户端来连接. 客户端连接后, 打印客户端发来的内容.
配置文件格式有要求

openssl3.2 - 官方dmeo学习 - server-cmod.c

BIO - server-conf.c

建立TLS服务器, 参数从配置文件中来.通过SSL_CONF_CTX_set_flags()来决定读那些TLS参数
遍历配置文件, 通过SSL_CONF_cmd()来读取预期的配置项.
如果不是TLS直接用的参数(e.g. BIO), 自己从配置文件Item中赋值到变量.

openssl3.2 - 官方dmeo学习 - server-conf.c

BIO - 总结

官方BIOdemo工程就这7个.
可以看出, BIO主要是和TLS通讯相关的. 隐藏了socket操作, TLS两端通讯时, 直接用BIO读写.
BIO隐藏了数据读写2边的信息, 需要在BIO在建立和配置时, 才能知道具体操作的是文件, 内存还是socket.

END

这篇关于openssl3.2 - 官方dmeo学习 - 索引贴的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/595223

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用