OpenSSL PCKS12支持是否已中断?
我在使用OpenSSL向客户机应用程序添加PCKS#12支持时遇到了问题,因为虽然肯定包含了头,但找不到类型。由于同样的原因,也无法从OpenSSL获取示例代码进行构建。这可能是OpenSSL中不透明结构更改的问题,也可能是其他问题(可能是crypto不支持p12构建?)。我希望我只是错过了一些简单的事情。请注意,这不是关于命令行实用程序,而是关于以编程方式支持PKCS#12 上下文: 向当前使用OpenSSL支持使用PEM证书文件的TLS的应用程序添加PCKS#12支持。该应用程序可以正确使用PEM文件,但我们的证书提供商只提供P12文件。虽然我们可以使用对脚本的系统调用将P12转换为PEM,但我宁愿避免这种情况,并在我的应用程序中直接支持P12 我所尝试的:OpenSSL PCKS12支持是否已中断?,openssl,pkcs#12,Openssl,Pkcs#12,我在使用OpenSSL向客户机应用程序添加PCKS#12支持时遇到了问题,因为虽然肯定包含了头,但找不到类型。由于同样的原因,也无法从OpenSSL获取示例代码进行构建。这可能是OpenSSL中不透明结构更改的问题,也可能是其他问题(可能是crypto不支持p12构建?)。我希望我只是错过了一些简单的事情。请注意,这不是关于命令行实用程序,而是关于以编程方式支持PKCS#12 上下文: 向当前使用OpenSSL支持使用PEM证书文件的TLS的应用程序添加PCKS#12支持。该应用程序可以正确使用
Platform: Debian Linux
IDE: Eclipse CDT
OpenSSL version: (from VERSION)
MAJOR=3
MINOR=0
PATCH=0
PRE_RELEASE_TAG=dev
BUILD_METADATA=
RELEASE_DATE=
SHLIB_VERSION=3
问题:
该构建报告了使用OpenSSL的客户端应用程序的构建中的两类问题(而不是构建OpenSSL本身,它似乎工作正常)。详情见本帖末尾
- 编译现有应用程序 从1.1.0版开始,OpenSSL隐藏了许多结构 以前打开的。这包括所有内部libssl 结构和许多EVP类型。访问器函数具有 已添加以允许受控访问结构的数据 这意味着一些软件需要重写以适应 新的做事方式。这通常相当于分配 结构的一个实例,您可以在此之前 将它们作为自动变量分配到堆栈上,并使用 提供了访问器功能,您以前可以访问 结构的字段 一些API也发生了变化。但是,较旧的API已经过时 尽可能保存
通过
gcc$(pkg config--cflags libcrypto)-c main.c
编译经过修改的示例代码对我来说很好。您使用的是什么版本的OpenSSL?(您可以在/usr/local/include/OPENSSL/opensslv.h
中查找符号OPENSSL\u VERSION\u TEXT
)感谢您的测试。我将尝试在IDE之外编译,以查看是否得到不同的结果。以下是版本字符串:#定义OPENSSL_version_STR“3.0.0”#定义OPENSSL_FULL_version_STR“3.0.0-dev”仅供参考,我是用1.1.1d进行测试的,这是当前的“官方”OPENSSL版本。我打赌这就是问题所在。出于某种原因,我原以为3.0.0是新版本,但现在我看到它是一个开发版本。我将“降级”到最新的官方版本并发布更新,不过我可能要到本周末才有时间这么做。谢谢你的帮助!
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/pkcs12.h>
#include <openssl/bio.h>
#include <openssl/x509.h>
#include <openssl/pkcs12err.h>
int main(int argc, char **argv)
{
FILE *fp;
EVP_PKEY *pkey = NULL;
X509 *cert = NULL;
STACK_OF(X509) *ca = NULL;
PKCS12 *p12 = NULL; << error undefined
char *name = NULL;
int i, ret = EXIT_FAILURE;
typedef struct PKCS12_t PKCS12;
invalid storage class for function ‘sk_PKCS12_SAFEBAG_deep_copy’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_delete_ptr’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_delete’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_dup’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_find_ex’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_find’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_free’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_insert’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_is_sorted’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_new_null’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_new_reserve’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_new’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_num’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_pop_free’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_pop’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_push’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_reserve’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_set_cmp_func’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_set’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_shift’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_sort’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_unshift’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_value’
invalid storage class for function ‘sk_PKCS12_SAFEBAG_zero’
make: *** [lib/epri/src/subdir.mk:152: lib/epri/src/openssl.o] Error 1
Type 'PKCS12' could not be resolved