OpenSSL PCKS12支持是否已中断?

OpenSSL PCKS12支持是否已中断?,openssl,pkcs#12,Openssl,Pkcs#12,我在使用OpenSSL向客户机应用程序添加PCKS#12支持时遇到了问题,因为虽然肯定包含了头,但找不到类型。由于同样的原因,也无法从OpenSSL获取示例代码进行构建。这可能是OpenSSL中不透明结构更改的问题,也可能是其他问题(可能是crypto不支持p12构建?)。我希望我只是错过了一些简单的事情。请注意,这不是关于命令行实用程序,而是关于以编程方式支持PKCS#12 上下文: 向当前使用OpenSSL支持使用PEM证书文件的TLS的应用程序添加PCKS#12支持。该应用程序可以正确使用

我在使用OpenSSL向客户机应用程序添加PCKS#12支持时遇到了问题,因为虽然肯定包含了头,但找不到类型。由于同样的原因,也无法从OpenSSL获取示例代码进行构建。这可能是OpenSSL中不透明结构更改的问题,也可能是其他问题(可能是crypto不支持p12构建?)。我希望我只是错过了一些简单的事情。请注意,这不是关于命令行实用程序,而是关于以编程方式支持PKCS#12

上下文:

向当前使用OpenSSL支持使用PEM证书文件的TLS的应用程序添加PCKS#12支持。该应用程序可以正确使用PEM文件,但我们的证书提供商只提供P12文件。虽然我们可以使用对脚本的系统调用将P12转换为PEM,但我宁愿避免这种情况,并在我的应用程序中直接支持P12

我所尝试的:

  • 下载最新版本并重新生成
  • 研究OpenSSL问题、文档和邮件列表归档
  • 研究堆栈溢出
  • 将p12_local.h移动到包含的文件夹中,以便我可以直接使用结构定义
  • 环境

    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本身,它似乎工作正常)。详情见本帖末尾

  • 错误:PKCS12未定义
  • 在OpenSSL内部调用宏时出现明显错误(我没有调用宏)
  • 来源

    改编自以下示例代码:

    结构PKSC12_t在p12_local.h中定义,它只包含在crypto目录中的实现文件中

    注释

    从INSTALL()(重点添加):

    • 编译现有应用程序

      从1.1.0版开始,OpenSSL隐藏了许多结构 以前打开的。这包括所有内部libssl 结构和许多EVP类型。访问器函数具有 已添加以允许受控访问结构的数据

      这意味着一些软件需要重写以适应 新的做事方式。这通常相当于分配 结构的一个实例,您可以在此之前 将它们作为自动变量分配到堆栈上,并使用 提供了访问器功能,您以前可以访问 结构的字段

      一些API也发生了变化。但是,较旧的API已经过时 尽可能保存

    生成错误

    构建导致以下26个错误,除最后两个错误外,其余均报告为“第55行,外部位置: /usr/local/include/openssl/pkcs12.h C/C++问题:


    通过
    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