2013-07-22 37 views
2

当使用相同的密钥和证书文件创建PKCS12(PKCS#12/p12)文件时,我注意到连续调用OpenSSLpkcs12能力每次产生不同的ENCRYPTED PRIVATE KEY内容(我也使用相同的导入密码和PEM密码短语)。这是否应该发生?我猜测它与一个不同的IV(初始化向量)或与私钥的对称加密相关的salt有关,但我想确定。连续的OpenSSL PKCS12代产生不同的私钥内容

我用下面的命令来创建cred1.p12和cred2.p12文件:

openssl pkcs12 -export -in certs/cert.pem -out cred1.p12 -name "My credentials" -inkey private/key.pem 
openssl pkcs12 -export -in certs/cert.pem -out cred2.p12 -name "My credentials" -inkey private/key.pem 

当我比较所产生的.p12文件(diff cred1.p12 cred2.p12导致二进制差异)我用下面的命令来创建两个PKCS12信息文本文件,我在其上执行另一个diff

openssl pkcs12 -info -in cred1.p12 > a.txt 
openssl pkcs12 -info -in cred2.p12 > b.txt 
diff a.txt b.txt 

而唯一的不同之处在于,其中的私有密钥内容举行-----BEGIN ENCRYPTED PRIVATE KEY----------END ENCRYPTED PRIVATE KEY-----标签之间。

在此先感谢!

回答

3

是的,这是预期的行为。 OpenSSL默认使用DES-EDE3来加密PKCS12文件中的私钥。每次你加密时,它都会产生一个随机的initialization vector,这将改变加密的有效载荷。当你在看-info输出,你会看到这样的内容:数据后

DEK-Info: DES-EDE3-CBC,558C30D119D6944F 

逗号是十六进制编码的8字节的盐。

+0

非常感谢解释! :d – aspergillusOryzae