我将用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:error:23077073:lib(35):func(119):reason(115):NA:0: 23502:error:2306C067:lib(35):func(108):reason(103):NA:0: 23502:error: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数值实际代表什么?
答案 0 :(得分:1)
请通过启用编译时宏OPENSSL_NO_ERR来检查您的OpenSSL库是否已编译。此宏如果启用,将从OpenSSL库中删除所有错误字符串。如果你禁用这个宏,那么你应该得到人类可读的字符串。
此外,您可以检查err.h(对于与lib代码相关的宏)和ssl.h(对于函数和原因代码相关的宏),以便从这些错误中获得一些含义。
答案 1 :(得分:0)
虽然我明白,这是一个非常古老的帖子,但认为它可能对某人有所帮助。 我在调用pkcs12_create函数时遇到了同样的问题。事实证明,我没有调用OpenSSL_add_all_algorithms();在调用create函数之前。