OpenSSL的错误机制

        在我们使用OpenSSL的过程中,可能会遇到函数返回值为0的情况,由于OpenSSL大部分的函数返回值规定1为返回正确,0为错误,因此,我们需要借助OpenSSL的错误处理函数对我们的代码进行进一步的分析,找到错误原因。

        OpenSSL使用一个叫做ERR_STATE的结构体来维护其错误信息,其本质上就是一个深度为16单位的环形缓冲区,里面可以存放错误数据、文件、标志、行号等信息。每当错误产生,OpenSSL的函数将会自动记录一个新的错误信息,并占用缓冲区的一个单位,当所有单位均被占用,则将循环覆盖最早的错误。

        当错误产生时,我们可以通过调用ERR_get_error()函数来获取一个32位的错误号,这个错误号来自最早的一次错误,其值包含了三部分的信息,分别是lib、function、reason。其中低12个bit是reason、中间12个bit是function、高8个bit是lib。解码这个值的时候可以直接将这个32位的数转为16进制,左边两个十六进制数表示lib,中间三个表示function、右边三个表示reason。首先我们打开err.h这个文件,找到所匹配的lib号,然后我们可以到OpenSSL的源码中寻找类似xxxerr.h这种文件,这里可以按照刚刚匹配的lib来对应寻找,以确认function和reason,因为这两项一般都在同一个头文件中定义。

        未完待续……

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值