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

时间:2017-06-16 09:18:45

标签: c openssl rsa pkcs#12 libssl

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

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

全部谢谢

2 个答案:

答案 0 :(得分:2)

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 :(得分:0)

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

添加功能首先从现有PKCS12解压缩保险箱(STACK_OF(PKCS7)),然后处理此保险箱,以便为其添加新的行李箱。然后我使用PKCS12_add_safes函数创建一个新的PKCS12并删除前一个。 谢谢大家