OpenSSL源码之erro定位两种方法

本文介绍如何利用OpenSSL的错误码及日志记录功能定位具体错误原因。通过两个实例详细解析了错误码的构成及其在源代码中的定位方法。

       聊一聊在实际定位openssl错误过程中的处理思路。

       openssl提供了err模块实现日志记录的功能。很多时候需要根据err的记录结果确认错误的原因,即找到出错的那一行。以如下两条错误的记录来说明错误的定位方法:

1、error:140A1175:SSLroutines:ssl_bytes_to_cipher_list:inappropriate
fallback

       数字部分表示的是错误的记录码,该记录码由三部分组成。一共4个字节,前8位表示的是模块的编号,例如14(十六进制)指的就是编号为20的ssl模块;紧接着的12位表示的是函数的编号,例如0A1表示的就是ssl模块中编号为161的函数 ssl_bytes_to_cipher_list,175表示的是错误的原因,表示编号为373的错误类型SSL_R_INAPPROPRIATE_FALLBACK,对应的字符串输出为inappropriate fallback。当然从后向前看,就是SSL_R_INAPPROPRIATE_FALLBACK类型错误发生在 ssl_bytes_to_cipher_list函数中,该函数属于ssl模块。

       事实上在ssl_bytes_to_cipher_list会发现SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_INAPPROPRIATE_FALLBACK)这样的错误输出,因此可以很容易的定位发生该种错误的原因。当然实际定位问题中都是直接搜索错误原因字符串,找到错误原因码,然后搜索错误原因码那个宏,找到错误的位置。

2,error:14094416:SSLroutines:ssl3_read_bytes:sslv3 alert certificate
unknown

       如上分析,该种错误指的是发生在ssl模块, ssl3_read_bytes函数中的SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN类型错误(SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN是定义为1046即16进制为416的宏,对应错误码的最后12位)
       按照前面的情况推断在函数 ssl3_read_bytes应该有如下的错误记录:

SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN)

       但是这种情况并没有出现,在该函数中发现了如下的错误输出

SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr)

       通过查看源码发现 alert_descr表示提取的Alert Message中的Description部分,通常Alert Message包含错误的Level以及错误Description。也就是说一端读取另一端发送过来的报文数据,解析Alert Message消息发现Description字段为2e(十进制为46),因此记录错误为SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + 46),而 SSL_AD_REASON_OFFSET宏值为1000,因此就形成了错误原因为 SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN(1046)这样一个错误。因此对于情况二错误需要在相应的函数中去寻找,需要了解一定的源码过程。

       这两种情况就是实际在定位错误过程中遇到的。

       本文为优快云村中少年原创文章,转载记得加上小尾巴偶,博主链接这里

<think>好的,用户想了解OpenSSL3.0的安装配置教程和常见问题解决方案。首先我需要整理安装步骤,确保符合不同操作系统的情况。用户可能是在Linux环境下安装,比如CentOS或者Ubuntu,也可能在Windows上使用VS2019,引用[4]提到了VS的环境配置,这部分需要包含进去。安装部分,需要分源码编译和包管理器安装两种方式。源码安装通常更灵活,但步骤较多,容易出错。引用[3]提到成功配置后的提示和编译安装步骤,可以借鉴。包管理器安装可能更简单,但版本可能不是最新的,需要提醒用户注意。 接下来是配置环境变量,尤其是Linux下添加软链接,引用[3]中的例子,把安装路径链接到系统目录,这样命令行可以直接调用。Windows的环境配置在VS项目中设置包含目录和库目录,引用[4]详细说明了路径设置,这部分要详细说明。常见问题方面,用户可能遇到版本冲突,比如引用[2]里用户降级到1.1.0解决了问题,但用户现在需要3.0,可能需要处理依赖问题或兼容性。编译错误需要检查系统依赖库是否安装,比如perl和make工具。还有运行时的库路径问题,比如LD_LIBRARY_PATH的设置,避免找不到动态库。 另外,引用[5]提到源码编译安装的情况,虽然针对zabbix,但同样适用于OpenSSL,特别是强调依赖版本的重要性。可能用户在使用过程中需要与其他软件集成,比如Python环境,引用[3]提到Python需要openssl支持,这也可能需要补充说明。最后,生成相关问题时要覆盖安装、配置、问题排查以及应用场景,比如如何使用OpenSSL进行加密操作,如何集成到其他项目里。确保问题能引导用户进一步探索解决方案。</think>### OpenSSL 3.0 安装配置教程 OpenSSL 3.0 是一个重要的版本更新,引入了新的API和功能(如FIPS模块支持),但也可能导致兼容性问题。以下是安装配置的核心步骤: #### 一、安装步骤 1. **源码编译安装(Linux/macOS)** - **下载源码**: ```bash git clone https://github.com/openssl/openssl.git cd openssl git checkout openssl-3.0 # 切换到3.0分支 ``` - **配置与编译**: ```bash ./config --prefix=/usr/local/openssl3 --openssldir=/usr/local/openssl3 make # 编译 make test # 可选,运行测试 sudo make install ``` - **添加环境变量**: 在`~/.bashrc`或`~/.zshrc`中添加: ```bash export PATH="/usr/local/openssl3/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/openssl3/lib64:$LD_LIBRARY_PATH" ``` 2. **包管理器安装(部分Linux发行版)** - Ubuntu/Debian: ```bash sudo apt install openssl libssl-dev ``` *注意:可能需要添加第三方仓库获取3.0版本[^5]。* 3. **Windows环境配置(VS2019)** - 安装OpenSSL 3.0 Windows二进制包(从官网下载)。 - 在VS项目中设置包含目录和库目录: - 包含目录:`C:\OpenSSL\include` - 库目录:`C:\OpenSSL\lib` - 链接器附加依赖项:`libssl.lib, libcrypto.lib`[^4]。 #### 二、常见问题解决方案 1. **版本冲突问题** - **现象**:系统存在多个OpenSSL版本(如1.1.1和3.0),导致命令调用混乱。 - **解决**:通过软链接指定默认版本: ```bash sudo ln -sf /usr/local/openssl3/bin/openssl /usr/bin/openssl ``` 2. **编译错误** - **依赖缺失**:确保安装`perl`、`make`、`gcc`等工具链。 - **API不兼容**:OpenSSL 3.0弃用了部分旧API,需检查代码中是否使用了`EVP_MD_CTX_create()`等旧函数[^3]。 3. **运行时库加载失败** - **现象**:`error while loading shared libraries: libssl.so.3`。 - **解决**:更新动态链接库缓存: ```bash sudo ldconfig /usr/local/openssl3/lib64 ``` #### 三、验证安装 ```bash openssl version # 预期输出:OpenSSL 3.0.x ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村中少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值