在 PKCS#12 结构中管理多个 RSA keys/certs

Manage multiple RSA keys/certs in a PKCS#12 structure

我尝试在 C 库中管理 PKCS#12 结构中的多个 RSA 密钥和证书。使用基元 PKCS12_createPKCS12_parse 管理单个密钥工作正常,但我找不到任何关于管理多个密钥的信息。我尝试使用保险箱和包原语,但我只成功地破坏了我的 PKCS12。

OpenSSL 的 PKCS#12 是否允许 PKCS#12 结构中的多个密钥和证书?如果是这样,那么如何使用 PKCS#12 API 管理多个密钥和证书?

谢谢大家

PKCS#12 是一个复杂的数据结构。 PKCS12_parse使用的所有操作都是publicAPI,它只是试图简化简单的情况。 p12_kiss.c 的全部 245 行(假设保持简单,愚蠢)是 PKCS12_parse 及其(非 public)辅助例程。

p12_crt.c又是"man, this file format is complicated"的291行,也就是PKCS12_create.

管理多个文件是更简单的代码,但如果您想将复杂性纳入您的代码中,您可以简化您的文件操作。

不要忘记在私钥包上调用 PKCS12_SAFEBAG_create_pkcs8_encrypt。除非您调用它,否则您的密钥不会被加密,并且 (IIRC) Apple 的 PFX reader 不会从未加密的包中加载密钥(可能不是有意的决定,他们可能从未经历过)。

我终于成功获得了 add/parse 多个 RSA 密钥,他们认证了 into/from PKCS12 structure/file。 我的解析函数基于 p12_kiss.c 文件中的 OpenSSL parse_pk12 函数。这个函数好像return最后一个包而已。我修改它以检查每个包的友好名称和 return 匹配的那个。

添加函数首先从现有的 PKCS12 解压保险箱 (STACK_OF(PKCS7)),然后处理这个保险箱以向其中添加新的一叠包。然后我使用 PKCS12_add_safes 函数创建一个新的 PKCS12 并删除前一个。 谢谢大家