0

我正在将用 C 编写的项目移植到 OpenWRT mipsel 系统上。交叉编译和库链接都很好,项目在 mipsel 系统上构建和运行,但是 OpenSSL 存在运行时问题。

似乎 PKCS12_create 由于某些未知原因而失败。这是我通过 ERR_print_errors_fp 发现的:

23502:error:06074079:lib(6):func(116):reason(121):NA:0:TYPE=pbeWithSHA1And40BitRC2-CBC
23502:错误:23077073:lib(35):func(119):reason(115):NA:0:
23502:错误:2306C067:lib(35):func(108):reason(103):NA:0:
23502:错误:23073067:lib(35):func(115):reason(103):NA:0:

这正是OpenSSL GET_ERR_LIB应该提供的。但是,例如,我如何找出 lib 35、函数 119 和原因 115 是什么?

我使用 OpenWRT SDK 交叉编译器并链接来自同一个 SDK 的库(包括 OpenSSL)。

这是我用来获取上面列出的错误的基本代码:

PKCS12 *pkcs12 = NULL;
EVP_PKEY *pkey = EVP_PKEY_new();
X509 *cert = X509_new();

...

pkcs12 = PKCS12_create(password, username, pkey, cert, NULL,
                       0, 0, 0, PKCS12_DEFAULT_ITER, 0);
ERR_print_errors_fp(stderr);

if (pkcs12 == NULL){
    printf("pkcs12 == NULL\n");
    /* And here we bail out... */
}

该代码有效,并且在 x86 系统上经过了很好的测试。

所以我的问题是:如何找出 lib、func 和 reason 数值实际代表什么?

4

2 回答 2

1

请通过启用编译时宏 OPENSSL_NO_ERR 检查您的 OpenSSL 库是否已编译。如果启用此宏,则会从 OpenSSL 库中删除所有错误字符串。如果您禁用此宏,那么您应该获得人类可读的字符串。

Also, you can check err.h (for lib code related macros) and ssl.h (for function & reason code related macros) to make some meaning out of these errors.

于 2012-07-11T13:29:48.513 回答
1

Though I understand that, its a very old post but thought that it might help someone. I was facing same issue while calling the pkcs12_create function. It turned out in my case i had not called OpenSSL_add_all_algorithms(); before calling the create function.

于 2014-09-11T06:53:55.797 回答