我从一个带有推送证书的客户端转发了一个p12文件。
我可以更改此p12文件的密码而不产生任何后果吗?如果可以,我可以使用以下内容吗?
openssl pkcs12 -in Certificates.p12 -out temp.pem -passin pass: -passout
pass:temppassword
openssl pkcs12 -export -in temp.pem -out Certificates-final.p12 -passin
pass:temppassword -passout pass:newpassword
rm -rf temp.pem
我在这个网站上找到了这个here
5条答案
按热度按时间9rnv2umw1#
不,你不能这样做没有后果。
使用openssl导出PKCS#12内容将丢失信息,这些信息在重新创建PKCS#12时无法恢复。
元数据对您是否重要取决于您的PKCS#12内容和用例。
似乎没有一种方法可以简单地使用openssl "更改容器的密码"。(不过,您可以使用Java的
keytool
来完成此操作,我将在后面解释。)keytool -importkeystore -srckeystore source.p12 -srcstoretype PKCS12 -srcstorepass:file ssp -destkeystore dest.p12 -deststoretype PKCS12 -deststorepass:file dsp -destkeypass:file dsp
开放SSL
下面是重新创建的PKCS#12与原始的PKCS#12之间的比较,原始的PKCS#12来自我用于测试的旧的(无效的)德国税务登录密钥库。
在我的例子中,以这种方式重新创建的PKCS#12不再有效/适用于预期的应用程序(基于证书的登录),因此我必须找到一个不同的解决方案。
简短概述(原始文件,然后是重新创建的文件):
现在是原始导出的PEM文件内容与重新创建的PKCS#12的重新导出的PEM之间的差异。(我编辑了一些base64行,并重新排序了输出中的PEM数据,以使差异更短,更改更明显。)
你可以看到原来的有两个私钥(一个签名密钥和一个加密密钥),而新的只有一个,以及证书包上丢失的元数据。还请注意
localKeyID
是如何被更改的:除了丢失元数据,在导入时丢失私钥在这里,对我来说似乎确实是个问题。所以一定要测试你的新PKCS#12,并可能在一个安全的位置备份你的旧PKCS#12!
测试对象
关键工具
keytool
是一个密钥和证书管理实用程序,是Java JRE的一部分,用于管理Java的密钥库。您可能会在Linux上找到
/usr/bin/keytool
,或者在Java安装中找到/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/keytool
。使用
keytool
,您只能更改容器密码(密钥库密码),而无需更改其中的任何密钥(但这可能不是您想要的):现在我们更改容器密码:* * 这将覆盖旧文件**
并比较结果:
所以
keytool
升级了迭代计数,但是保留了密钥别名信息(encryptionkey/signaturekey)和容器中的文件顺序。但是请注意,只更改PKCS#12密钥库的密码,不更改任何加密私钥的密码。如果您使用PKCS#12存储具有不同加密密码短语的不同密钥,这将非常有用。但这也意味着您需要记住所有密钥,并且您无法再使用openssl导出这些密钥,因为openssl只能处理与PKCS#12容器共享相同密码的密钥:
然后,您只能使用
-nokeys
从此文件导出证书:其中,
SRCFILE
和DSTFILE
分别是PKCS#12文件,ssp
和dsp
是您之前安全写入源密码和目标密码的文件(keytool还可以使用:env
而不是:file
从环境变量中读取。并且您可以在命令行上传递密码短语,但请记住,这是最不安全的,并记录在您的shell历史记录中。)现在重新创建PKCS#12之后,您可以验证元数据和内容顺序是否保留:
(同样,为了简洁起见,我编辑了PEM的一些base64行)
我们看到私钥已经被重新加密(keytool显示更新的时间戳),但是与openssl的输出相比,这次除了迭代计数的变化之外,只有localKeyID发生了变化。
所有的东西都还在里面,而且是按原来的顺序。好多了!
这是否足够接近原始文件,同样,取决于您的用例。升级的迭代计数更好地保护了对键的暴力攻击,但如果您需要在旧的浏览器或操作系统上使用它们,而这些浏览器或操作系统无法处理如此高的迭代计数,则可能是致命的。(然而,由于这些都是IE 4.0和WinNT时代的,这在大多数情况下应该不是问题。)
通过对
keytool
使用这个过程,我可以用一种对我的应用程序仍然可用和有效的方式来更改PKCS#12密钥的密码。sqougxex2#
我刚刚偶然发现了this页面。它工作吗?
为了避免死链接这里是博客文章的内容:
通过以下步骤,您可以使用openssl更改.pfx证书上的密码。
将当前证书导出为无密码pem类型:[用户@主机名]〉openssl pkcs 12-输入mycert.pfx -输出tmpmycert.pem -节点输入导入密码:MAC验证正常
将无密码pem转换为新的pfx文件,密码为:[用户@主机名]openssl pkcs 12-导出-输出mycert2.pfx -输入tmpmycert.pem输入导出密码:验证-输入导出密码:
删除临时文件:[用户@主机名]rm tmpmycert.pem
现在您已经完成了,可以使用带有新密码的新mycert2.pfx文件了。
ljsrvy3e3#
不会有任何问题。
PFX是加密容器,更改容器的密码不会影响容器内的证书。
1tuwyuhd4#
使用
keytool
,不需要导出任何内容,也不会丢失任何信息。keytool
可用于更改两个密码(keystore和private key)。这里的关键(请原谅双关语)是首先更改为private key的密码。否则,如果keystore密码与private key不同,keytool
将无法更改private key的密码。首先更改私钥的密码:
keytool -keystore <your.p12> -keypasswd -alias <alias_of_private_key>
然后更改密钥库的密码:
keytool -keystore <your.p12> -storepasswd
这就是它的全部。
(Note:这个方法仍然会像@nyov的方法一样修改迭代次数。)
uwopmtnx5#
使用IKEYMAN工具更改.p12和密钥文件的密码。