Openssl p12 证书存储提取单个证书并保留名称

Openssl p12 证书存储提取单个证书并保留名称

我有一个 p12 证书存储,并且有很多证书,它们与几个不同的站点相关,因此一个站点有很多证书。我试图以某种方式提取它们,这将保留他们的名字,因为名字上有一个重要的信息,通过私人数据识别证书用户。但到目前为止我尝试过这个:

pkcs12 -in myDatabaseCerts.p12  -clcerts -nokeys -out publictheCerts.pem

这样我就可以将所有证书放入一个文件中。

openssl pkcs12 -in myDatabaseCerts.p12 -nocerts -out keys.pem

有没有一种方法可以将所有这些数据提取到单独的文件crt和密钥中并自动保留它们的名称?所以我最终会得到这样的列表:

John_Williams_ID_18321239.crtJohn_Williams_ID_18321239.privatekey(or .pem)

我想将 p12 拆分成这样的文件,因为稍后我需要将每一对组装成单独的 p12 文件,因此基本上将整个p12存储转换为许多只包含一对的单独文件key : certificate。有没有办法用 openssl 做到这一点?或者唯一的方法是生成带有密钥和证书的单独文件并使用一些书面脚本解析它们?

答案1

正如您推测的那样,您可以轻松地解析输出openssl pkcs12将碎片分开,如果并且仅当您想要的标识符是友好名称和/或本地密钥 ID,因为它们是通常提供的仅有的两个元数据。例如,对于仅使用FriendlyName的私钥,因为它更容易并且通常应该足够了:

openssl pkcs12 -in combined -nocerts | awk '/friendlyName:/{n=$2} \
/^-----BEGIN.*PRIVATE/,/^-----END.*PRIVATE/{print >n".key"}' 

这需要你输入输入p12的密码,并为每个输出键输入两次密码;为了避免这种情况,您可以根据手册页添加-passin和选项(假设所有输出键都可以使用相同的密码)。-passout或者,如果可以不加密私钥,请添加-nodes-- 如果您及时将它们放回到新的(和加密的)p12 文件中,并安全地删除(例如shred)应该安全的未加密文件;否则,您需要非常小心,未经授权的人无法查看或获取未加密私钥的副本。

可以对证书执行相同的操作,但您可能不需要这样做。如果仅有的您想要的是按照您的描述创建单独的 p12 文件,你的私钥都是不同的,你可以对每个私钥进行操作

cat $one.key allcerts | openssl pkcs12 -export (other options) >$one.p12 

它只会在每个输出 p12 中放入一张证书allcerts从输入火柴钥匙。

openssl或者,您可以使用 openssl 编写程序,而不是预先编写的命令行图书馆它可以做任何你喜欢的事情:在每个包和子包的内部(解密后),取出你喜欢的任何数据,修改它(也许翻译特殊字符等),等等。不过,这是一项更大的工作。

相关内容