Ubuntu 下解读 OpenSSL 错误代码
一、错误码结构与快速判读
OpenSSL 错误码是32 位整数,由三部分组成:库代码 Library(高 8 位)、函数代码 Function(中 12 位)、原因代码 Reason(低 12 位),由宏 ERR_PACK(l, f, r) 组合而成。命令行或程序输出的形如:
error:1408F10B:SSL routines:ssl3_get_record:wrong version number
可按下表理解:
| 片段 | 含义 | 示例 |
|---|---|---|
| 1408F10B | 十六进制错误码(= 十进制 335545739) | 0x1408F10B |
| SSL routines | 库名(Library=ERR_LIB_SSL=20) | 库代码 20 |
| ssl3_get_record | 函数名(Function 编号) | 函数索引 |
| wrong version number | 原因字符串(Reason) | 具体原因 |
判读要点:
二、命令行场景的排查与解读
三、程序内获取与打印错误栈(C/C++)
#include <openssl/err.h>
#include <stdio.h>
void print_openssl_errors(void) {
unsigned long err;
while ((err = ERR_get_error()) != 0) {
char buf[256];
ERR_error_string_n(err, buf, sizeof(buf));
fprintf(stderr, "OpenSSL error: %s\n", buf);
}
}
四、常见错误码与处理要点