赞
踩
聊一聊在实际定位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
)这样一个错误。因此对于情况二错误需要在相应的函数中去寻找,需要了解一定的源码过程。
这两种情况就是实际在定位错误过程中遇到的。
本文为CSDN村中少年原创文章,转载记得加上小尾巴偶,博主链接这里。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。