管理PKCS#12结构中的多个RSA密钥/证书

问题描述:

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

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

感谢所有

+0

所以,你想创建一个与libcrypto API的RSA密钥对?或者你想存储多个密钥对? – Badda

+0

嗨,巴达。我想在一个PKCS12结构/文件中存储和分析多个密钥对。 RSA密钥对的创建是可以的。 –

我终于成功地添加/解析多个RSA密钥,并且他们证明了PKCS12结构/文件/从中。 我的解析函数基于p12_kiss.c文件中的OpenSSL parse_pk12函数。这个功能似乎只返回最后一个包。我调整它来检查每个袋子的友好名称,并返回匹配的人。

添加功能首先从现有的PKCS12开箱保险箱(STACK_OF(PKCS7))开始,然后在这个保险箱上工作,以便为它添加一叠新的箱包。然后我用PKCS12_add_safes函数创建一个新的PKCS12,并删除前一个。 感谢所有

PKCS#12是一个复杂的数据结构。 PKCS12_parse使用的所有操作都是公共API,它只是试图简化简单情况。整个245行p12_kiss.c(假定Keep It Simple,Stupid)是PKCS12_parse和它的(非公共的)辅助例程。

p12_crt.c是另外291行“man,这个文件格式很复杂”,它只是PKCS12_create

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

不要忘记在私钥袋上拨打PKCS12_SAFEBAG_create_pkcs8_encrypt。 (IIRC)Apple的PFX阅读器不会从未加密的包中加载密钥(可能不是有意的决定,他们可能从未体验过)。

+1

嗨bartonjs。谢谢你的好回答。我finaly成功解析多个键(添加与keytool),并选择一个我需要取决于它的友好名称。我现在被添加到现有PKCS#12的密钥中。 'STACK_OF(PKCS7)安全框架构建应该是可以的(与p12_crt.c中的相同,我使用'PKCS12_add_key'函数完成crypt事务),但是我想如何将它添加到现有的'PKCS12'中目的。函数PKCS12_pack_authsafes似乎不是我需要的。我认为我之前将它添加到PKCS7中? –

+0

也许我需要获得现有PKCS12的PKCS7堆栈,为我的新密钥添加一个新包并用这个更新的堆栈重新创建一个新的PKCS12?如果成功,我会尝试这个并发布。 –