openssl之BIO系列之10---BIO链的定位操作

Debian 10下用OpenSSL生成Nginx自签名SSL证书实战 SSL证书是HTTPS通信的基石,其本质是基于PKI体系的数字身份凭证,通过非对称加密实现服务器身份认证与传输加密。自签名证书虽不被公共信任,但凭借零依赖、秒级生成、完全可控等特性,成为开发测试、内网服务、CI/CD及本地代理等场景的事实标准方案。它绕过域名验证与网络交互限制,特别适用于无公网域名的localhost、192.168.x.x或内部域名环境。技术实现上依赖OpenSSL工具链,核心在于正确生成RSA 2048密钥对、构造符合CN匹配要求的X.509证书,并完成Nginx的ssl_certifi 阅读详情
前面的一篇文章讲过BIO链的构造方法,这里讲的是在一个BIO链中,怎么查找一个特定的BIO,怎么遍历BIO链中的每一个BIO,这组函数定义如下(openssl/bio.h):
     BIO * BIO_find_type(BIO *b,int bio_type);
     BIO * BIO_next(BIO *b);
    
     #define BIO_method_type(b) ((b)->method->type)
    可以看到,这组函数中有两个是真正的函数,另一个则是宏定义,其中,bio_type的值定义如下:
     #define BIO_TYPE_NONE 0
     #define BIO_TYPE_MEM (1|0x0400)
     #define BIO_TYPE_FILE (2|0x0400)
    
     #define BIO_TYPE_FD (4|0x0400|0x0100)
     #define BIO_TYPE_SOCKET (5|0x0400|0x0100)
     #define BIO_TYPE_NULL (6|0x0400)
     #define BIO_TYPE_SSL (7|0x0200)
     #define BIO_TYPE_MD (8|0x0200)
     #define BIO_TYPE_BUFFER (9|0x0200)
     #define BIO_TYPE_CIPHER (10|0x0200)
     #define BIO_TYPE_BASE64 (11|0x0200)
     #define BIO_TYPE_CONNECT (12|0x0400|0x0100)
     #define BIO_TYPE_ACCEPT (13|0x0400|0x0100)
     #define BIO_TYPE_PROXY_CLIENT (14|0x0200)
     #define BIO_TYPE_PROXY_SERVER (15|0x0200)
     #define BIO_TYPE_NBIO_TEST (16|0x0200)
     #define BIO_TYPE_NULL_FILTER (17|0x0200)
     #define BIO_TYPE_BER (18|0x0200)
     #define BIO_TYPE_BIO (19|0x0400)
    
     #define BIO_TYPE_DESCRIPTOR 0x0100
     #define BIO_TYPE_FILTER 0x0200
     #define BIO_TYPE_SOURCE_SINK 0x0400
    可以看到,这些定义大部分都是根据各种BIO类型来命名的,但并不是跟现有的BIO类型是一一对应的,在以后的文章里,我会对这些BIO类型一一进行介绍,现在大家只要有一个概念就可以了。
    【BIO_find_type】
    该函数在给定的BIO链中根据特定的BIO类型bio_type进行搜索,搜索的起始位置就是b。如果给定的类型是一个特定的实现类型,那么就会搜索一个给类型的BIO;如果只是一个总体的类型定义,如BIO_TYPE_SOURCE_SINK(就是sourc/sink类型的BIO),那么属于这种类型的最先找到的BIO就是符合条件的。在找到符合的BIO后,BIO_find_type返回该BIO,否则返回NULL。需要注意的是,如果你使用的0.9.5a以前版本,如果给输入参数b赋值为NULL,可能引起异常错误!
    【BIO_next】
    该函数顾名思义,是返回当前BIO所在的BIO链中的下一个BIO,所以,它可以用来遍历整个BIO链,并且可以跟BIO_find_type函数结合起来,在整个BIO链中找出所有特定类型的BIO。这个函数是在0.9.6版本新加的,以前的版本要使用这个功能,只能使用bio->next_bio来定位了。
    【BIO_method_type】
    该函数返回给定的BIO的类型。
    下面给出一个在一个BIO链中找出所有digest类型BIO的例子:
     BIO *btmp;
     btmp = in_bio; /* in_bio 是被搜索的BIO链 */
    
     do {
     btmp = BIO_find_type(btmp, BIO_TYPE_MD);
     if(btmp == NULL) break; /* 如果没有找到*/
     /* btmp 是一个digest类型的BIO,做些你需要做的处理 ...*/
     ...
    
     btmp = BIO_next(btmp);
     } while(btmp);
    

    到此为止,就已经基本写完了BIO的基础知识方面的东西,下面的文章将开始对每一个具体的BIO类型进行介绍,我想有了前面的这些铺垫和知识,后面的就轻松多了。


FW : http://blog.youkuaiyun.com/gdwzh/article/details/19207

Windows下QT集成OpenSSL实现RSA加解密:从环境配置到实战代码 在C++跨平台开发中,数据安全是网络通信和证书处理的核心需求。非对称加密算法RSA通过公钥加密、私钥解密的原理,为数据传输提供了可靠的机密性和身份验证机制。其技术价值在于解决了密钥分发难题,是实现HTTPS、数字签名等安全协议的基础。在桌面应用开发场景中,QT框架因其跨平台特性被广泛使用,而OpenSSL作为功能全面的开源密码学库,是处理RSA等加密操作的事实标准。本文将指导开发者在Windows平台上,通过动态链接方式为QT项目集成OpenSSL,涵盖从预编译库获取、项目配置到RSA密钥生成、加解密代码实 阅读详情

相关推荐

.NET开发者跨平台加密实战:OpenSSL.Net核心原理与应用指南

在跨平台应用开发与系统集成中,数据加密与安全通信是保障信息安全的基石。其核心原理在于通过标准化的加密算法(如AES、RSA)和协议(如TLS),确保数据在传输与存储过程中的机密性、完整性与身份认证。对于.NET开发者而言,虽然System.Security.Cryptography提供了强大的内置支持,但在与广泛采用OpenSSL生态的Java、Python、Go等系统进行加密数据交换时,常因算法实现细节、默认参数(如填充模式、IV处理)的微妙差异而面临互操作性挑战。OpenSSL.Net作为一套C#编写的

weixin_34208283的博客 460

iOS/macOS开发实战:OpenSSL编译集成与安全通信指南

在移动应用开发中,数据安全是核心需求,涉及网络通信加密、数据存储保护与用户身份认证等多个层面。其基本原理是通过密码学算法对传输和存储的数据进行加密,确保机密性与完整性。SSL/TLS协议是实现这一目标的关键技术,它通过在传输层之上建立安全通道,为应用层数据提供端到端的保护。OpenSSL作为一个功能全面、跨平台的开源密码学库,提供了SSL/TLS协议的完整实现以及丰富的加密算法工具集,其技术价值在于为开发者提供了底层、灵活且高度可控的安全编程接口。这使得它在需要与异构服务端保持加密通信一致性、支持特定行业算

chuiqi9947的博客 374

同步异步阻塞非阻塞BIO/NIO/AIO三维度本质解析

IO模型是后端性能的底层基石,其核心并非抽象概念,而是操作系统对数据流动的调度机制。同步与异步决定结果交付方式(调用方轮询 vs 内核回调),阻塞与非阻塞决定线程是否让出CPU(内核挂起 vs 立即返回),BIO/NIO/AIO则反映内核IO能力演进(独占线程 → 多路复用 → 全异步DMA)。这三组正交维度共同构成高并发系统的设计坐标系。理解它们,才能科学选型Netty、Tomcat或R2DBC;才能定位strace中epoll_wait耗时异常、jstack里NioEndpoint线程阻塞等真实问题;也

as2886089的博客 431

OpenSSL中文手册之BIO库详解

这一系文章参考了http://blog.youkuaiyun.com/xiaoting451292510/article/details/466495831 BIO 概述  其实包含了很多种接口,用通用的函数接口,主要控制在BIO_METHOD中的不同实现函数控制,包括6种filter型和8种source/sink型。   source/sink类型的BIO是数据源,例如,sokect BIO和文件BIO。

liao20081228的博客 4万+

Ubuntu下用OpenSSL生成带IP SAN的自签名SSL证书

自签名SSL证书是开发与测试环境中启用HTTPS的基础技术手段,其核心原理是利用OpenSSL工具链离线生成X.509格式的证书与私钥,并通过Subject Alternative Name(SAN)扩展支持IP地址和域名的双重校验。该技术规避了CA信任链依赖,显著降低本地HTTPS部署门槛,具备零网络依赖、5分钟快速交付、Nginx原生兼容等工程优势。典型应用场景包括Docker容器HTTPS封装、Vue/React本地开发服务器反向代理、Python/Java客户端内网API调用,以及Kubernete

weixin_30785593的博客 331

OpenSSL与Zlib编译生成完整流程实战

先聊聊这对“黄金搭档”的定位。回到最初的问题:为什么这么多年过去了,OpenSSL和Zlib依然不可替代?答案其实很简单:OpenSSL提供了一套经过时间检验的、完整的安全通信基础设施;Zlib用极致简洁的设计实现了卓越的压缩性能;两者均以C语言编写,ABI稳定,跨平台能力强;社区活跃,漏洞响应迅速(尽管Heartbleed是个教训 😅);可静态链接,便于嵌入各类封闭环境。

weixin_35748962的博客 849

OpenSSL BIO源码简析

OpenSSL BIO源码简析

Starr 1858

ESP32驱动MLX90640红外热成像传感器:从报错到成功运行的完整避坑指南

本文是一份详细的ESP32驱动MLX90640红外热成像传感器的实战指南。针对开发中常见的I2C通信失败、数据全零及‘坏点过多’等报错,文章提供了从环境搭建、驱动库选择与改造到实战代码解析的完整解决方案,并分享了数据滤波、热图生成及多任务优化等高级技巧,帮助开发者高效避坑,实现稳定运行。

weixin_29191669的博客 94

Openssl之BIO系列

1.BIO-抽象的IO接口 其实包含了很多种接口,用通用的函数接口,主要控制在BIO_METHOD中的不同实现函数控制,我初步估计了一下,大概有14种,包括4种filter型和10种source/sink型。 BIO是在底层覆盖了许多类型I/O接口细节的一种应用接口,如果你在程序中使用BIO,那么就可以和SSL、非加密的网络以及文件IO进行透明的连接。有两种不通的BIO接口,一种是sour

章志强的专栏 1万+

linux下autocad完美替代品bricscad的安装运行

前言 在Linux平台下,能完美兼容.dwg文件的软件并不多。 虽然国产的中望和浩辰为适配uos操作系统,近期都推出了linux版本,但目前好像还没有对应的破姐流出。(如果有的话请私信我或留下评论) 然而有了这一款源自比利时的软件——bricscad,linux下查看和编辑.dwg文件再也不是噩梦了! 安装pj 资源链接:https://pan.baidu.com/s/1dC7zarlqwuO5fa4CBL_KGQ 提取码:24j6 1.下载对应的压缩包,解压并安装其中对应的deb或rpm软件包。 2.在C

weixin_35259117的博客 4483

从零做出可发布的2D冒险游戏!Unity全流程实战指南:从资源搭建到打包发布,新手也能跟着做

项目配置→资源导入→核心模块开发→关卡设计→调试→打包发布;玩家控制→敌人AI→道具系统→UI系统→游戏管理器→音效系统;新手开发重点:先实现核心玩法(移动、跳跃、攻击),再补充UI、音效、存档等辅助功能;调试是关键:每实现一个功能就测试,避免最后一堆bug难以定位。从零做一款完整的2D冒险游戏,能快速提升你的Unity综合能力——不仅能掌握C#编程、2D物理、UI系统,还能理解游戏开发的完整流程。先做出基础版,再慢慢迭代优化,你会发现游戏开发并没有想象中那么难。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1176

openssl之BIO系列之7---BIO链的操作

我在介绍BIO结构的时候说过,BIO结构其实是一个链式结构,单个BIO是只有一个环节的BIO链的特例,那么我们怎么构造或在一个BIO链中增加一个BIO,怎么从一个BIO链中删除一个BIO呢,那么本节就是专门讲述这个问题的。     其实,在openssl中,针对BIO链的操作还是很简单的,仅仅包括两个函数(openssl/bio.h):      BIO * BIO_push(BIO *b,B

fryingpan的专栏 699

给大一新生的蓝桥杯EDA备赛规划:从电路分析到立创EDA,如何用一年时间高效备赛?

本文为大一新生提供了一份系统的蓝桥杯EDA备赛规划,从电路分析基础到立创EDA实战操作,分阶段指导如何高效备赛。内容涵盖理论学习、软件操作、PCB设计专项提升及冲刺优化策略,帮助学生在一年内全面提升电子设计能力,为竞赛做好充分准备。

weixin_31476015的博客 287

深入OpenSSL API:从密码学原理到安全通信实战开发指南

安全通信是现代软件开发的基石,其核心依赖于密码学原理与协议实现。密码学通过算法(如AES、RSA)和协议(如TLS)为数据提供机密性、完整性和身份认证。OpenSSL作为广泛使用的开源密码学工具库,将这些理论转化为可调用的API,其价值在于为开发者提供了构建安全通信系统的底层能力。在实际工程中,无论是实现HTTPS服务器、微服务间的双向TLS认证,还是在嵌入式设备上部署DTLS协议,深入理解OpenSSL API都至关重要。本文聚焦于**SSL/TLS协议**的实现细节与**内存管理**的最佳实践,通过剖析

weixin_34375251的博客 333

FOC:【1】浅析SVPWM算法(七段式)以及MATLAB仿真验证

最近的科研项目需要使用到SVPWM算法,网上相关的原理介绍很多。对于纯应用的需求来说,或许有些内容上的冗余。 本文的目的就是简要并且明确的给出具体的计算步骤,可以帮助快速上手。同时利用MATLAB进行了简单算法验证。.....................

Alex的技术博客 1万+

如何配置 OpenClaw 使用免费搜索工具:摆脱付费 API 限制

本文介绍了如何配置OpenClaw使用免费搜索工具来替代付费API。主要内容包括:1)启用内置的web_fetch工具直接获取网页内容;2)创建自定义脚本聚合免费AI资讯源;3)配置其他免费网络工具。文章详细说明了配置步骤,推荐了多个优质免费AI资讯网站,并分析了该方案的优劣势。这种配置方式完全免费且灵活,特别适合预算有限的用户,能够在不依赖付费API的情况下获取所需信息。

dongdeaiziji的专栏 9814

openssl编程经验

由于openssl工具集体量大,网上编程示例又杂多,本文旨在给出一个基于openssl应用接口编程思路。该经验方法适用于所有的,可以通过openssl命令行工具实现,但开发者需要通过代码方式实现的到自己工程的功能。

weixin_42636055的博客 356

Python遥感图像处理应用篇(二十三):Python+GDAL 批量拼接图像

遥感影像拼接分多种不同的情况,比如比较常用的是两幅影像拼接或者多个图像合并为一个图像。GDAL中实现影像拼接的方式也有多种,比如常用可以通过numpy读取影像数组,并计算各个图像的numpy数组范围,合并多个numpy数组为一个最终的结果,并将其重新输出为一幅新的图像,即可实现图像的拼接。另外比较方便的一种方法便是使用GDAL.warp()函数方法。这个函数的功能很多,可以实现多种不同的目的,比如用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、矢量裁剪等多种功能。这些功能可以通过设置Op

soderayer的博客 4642

OpenSSL源码级开发指南:从官方示例到现代构建系统集成

加密与安全套接字是网络通信和数据保护的基石,其核心原理基于非对称加密、数字签名和证书验证等技术。OpenSSL作为业界广泛使用的开源加密库,提供了从底层算法到高层协议的全套实现。在工程实践中,深入理解其API设计哲学和资源管理机制,对于构建安全可靠的C/C++后端应用至关重要。通过剖析官方源码中的示例代码,开发者可以掌握EVP接口的通用模式、内存管理铁律以及错误处理的最佳实践。这些技能不仅有助于解决编译链接、版本兼容等常见问题,还能为TLS/SSL通信、自定义密码套件等高级场景提供坚实基础。本文聚焦Open

weixin_34327761的博客 500

阿波罗开发板硬件架构与STM32模块化设计详解

嵌入式开发板的模块化设计是提升硬件复用性、降低迭代成本的关键技术路径。其核心在于底板与核心板的电气解耦与功能分层,依托STM32系列MCU(如F429/F767)的丰富外设资源与引脚复用能力,实现信号完整性、电源域隔离与热管理的系统级协同。该架构显著支撑工业HMI、智能家居网关、便携医疗设备等典型场景,尤其在RGB LCD驱动、QSPI Flash内存映射、多协议通信(CAN/RS485/USB)及低功耗唤醒(WK_UP按键)等工程实践中展现出高可靠性与易调试性。本文围绕阿波罗开发板展开深度解析,覆盖最小系

weixin_42510201的博客 64

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

openssl 内存泄露排查

openssl 内存泄露排查

ughome的专栏 1002

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

OPENSSL:内存泄漏检测机制

工作的某个项目通过对openssl改造,在测试过程中发现内存泄漏,很难定位,想找些开源内存泄漏工具进行检查,不是很方便,通过搜索openssl的文章,原来自身就有其工具可以参考,这里记录下如何使用,以及其运作的机制,在其他项目是个调试的手段。 利用openssl的库进行程序编写,只使用其内存分配接口。 #include <openssl/crypto.h> #in

相机的开关在哪里 2245

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

OpenSSL 战略架构

该文件概述了OpenSSL的战略架构。从3.0.0版本开始,将需要多个发布版本来将当前的“现状”(1.1.1)架构迁移到未来的“目标”架构。未来的架构预计会有大量变化。我们将提供处理最终过渡的迁移路径。OpenSSL 3.0.0版本对绝大多数现有应用程序的影响将很小,几乎所有良好的应用程序只需要重新编译即可。随着时间的推移,当前通过引擎(engine) 接口提供的功能将替换为通过 provider 提供的接口。OpenSSL 3.0.0 将继续支持引擎(engine)。

maimang1001的专栏 748

最近遇见的一些关于openssl的问题

1、openssl_up link:no openssl_applink问题 如果出现上面的问题,那是因为文件读取方式不对。改为BIO方式读取文件就应该没有问题。我的是这么解决的。 2、无法解析的外部符号。 这个网上有些有用的,比如是自己写的win32程序,创建的时候创建成了其他。但是还有一类问题,就是自己的函数写错了。比如,main函数写成了mian或者其他什么的。这样的问题也是这个错误。

cogbee的专栏 1353
上一篇: openssl之BIO系列之9---BIO对的创建和应用
下一篇: openssl之BIO系列之11---文件(file)类型BIO
coo1fish
博客等级 码龄14年 22粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值