【问题标题】:how to change PKCS12 keystore password using keytool?如何使用 keytool 更改 PKCS12 密钥库密码?
【发布时间】:2015-09-22 13:46:04
【问题描述】:

我无法使用 keytool (java 8) 更改 PKCS 密钥库密码。当我尝试更改密钥密码时:

keytool -keypasswd -keystore keystore.p12 -storetype PKCS12 -storepass oldpass -keypass oldpass -new newpass
keytool error: java.lang.UnsupportedOperationException: -keypasswd commands not supported if -storetype is PKCS12

这意味着不能更改 PKCS12 密钥库的密钥密码。然后我尝试更改密钥库密码:

keytool -storepasswd -keystore keystore.p12 -storetype PKCS12 -storepass oldpass -new newpass
Warning:  Different store and key passwords not supported for PKCS12 KeyStores. Ignoring user-specified -new value.
keytool error: java.io.FileNotFoundException: keystore.p12 (Access is denied)

这意味着,我们必须同时更改 keystore 密码和 keypassword。但是没有命令可以改变两者。我能做什么?

【问题讨论】:

    标签: keytool pkcs#12


    【解决方案1】:

    您可以将 PKCS12 文件导入另一个 PKCS12,您可以在其中为新的 PKCS12 文件提供新密码。然后可以使用新的 PKCS12 文件或删除之前的文件并将新文件名重命名为旧文件名。这不是一个直截了当的方法,但它实现了目标。下面给出了示例代码

    keytool -importkeystore -srckeystore DocCA.p12 -srcstoretype PKCS12 -srcstorepass 123456 -destkeystore DocCA2.p12 -deststoretype PKCS12 -deststorepass 11223344 
    

    这里,DocCA.p12 是现有的 PKCS12,密码为 123456,导出到 DocCA2.p12 文件中,密码为 11223344。

    【讨论】:

    • 这是一种解决方法。由于没有其他选择,我暂时实施了。
    • 是的,如果我找到合适的解决方案,我会通知您。请为我做同样的事情。干杯:)
    • 我们发现他导致 pkcs12 文件损坏,按照:herongyang.com/PKI/…,添加“-destkeypass 11223344”可以解决问题。
    • 发帖之前,我自己测试了上面的命令行。它工作正常(用新密码打开新的 pkcs12)。不知道,它是否损坏,但感谢您指出新点。干杯!!!
    • 如果您指定的密码包含任何特殊字符或空格,请确保将它们包含在“”中。例如:-deststorepass "Abc23344&"
    【解决方案2】:

    我知道问题是关于使用keytool,但如果这不是严格要求,您可以改用openssl

    1. 将证书和密钥导出到没有密码保护的 temp.pem 文件。这会以交互方式询问您解密密码:

      openssl pkcs12 -in keystore.p12 -out temp.pem -nodes
      
    2. 从 temp.pem 文件导出到新的 PKCS#12 文件。这会以交互方式询问您新的加密密码:

      openssl pkcs12 -export -in temp.pem -out keystore-new.p12
      
    3. 删除临时文件:

      rm temp.pem
      

    ⚠️ 请务必在其他人无权读取的文件夹中执行此操作,因为只要 temp.pem 文件存在,就可以读取其中的密钥。

    【讨论】:

      最近更新 更多