如何使用keytool更改PKCS12密钥库密码?

Tam*_*ath 8 keytool pkcs#12

我无法使用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
Run Code Online (Sandbox Code Playgroud)

这意味着无法为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)
Run Code Online (Sandbox Code Playgroud)

这意味着,我们必须一起更改密钥库密码和密钥密码.但是没有命令可以改变它们.我能做什么?

Saq*_*wan 15

您可以将PKCS12文件导入另一个PKCS12,您可以在其中为新PKCS12文件提供新密码.然后,您可以使用新的PKCS12文件或删除上一个文件,并使用旧文件名重命名新文件名.它不是一个直接的方式,但它实现了目标.给出了一个示例代码

keytool -importkeystore -srckeystore DocCA.p12 -srcstoretype PKCS12 -srcstorepass 123456 -destkeystore DocCA2.p12 -deststoretype PKCS12 -deststorepass 11223344 
Run Code Online (Sandbox Code Playgroud)

在这里,DoCA.p12是现有的密码为123456的PKCS12,它在DocCA2.p12文件中导出,密码为11223344.

  • 我们发现他导致腐败PKCS12文件,按:http://www.herongyang.com/PKI/Intermediate-CA-OpenSSL-pkcs12-Decrypt-Error.html,加入"-destkeypass 11223344"纠正德问题. (3认同)

Yaj*_*ajo 5

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

  1. 在没有密码保护的情况下,将证书和密钥导出到temp.pem文件中。这将以交互方式要求您提供解密密码:

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

    openssl pkcs12 -export -in temp.pem -out keystore-new.p12
    
    Run Code Online (Sandbox Code Playgroud)
  3. 删除临时文件:

    rm temp.pem
    
    Run Code Online (Sandbox Code Playgroud)

?? 在没有其他人有权读取的文件夹中执行此操作很重要,因为只要temp.pem文件存在,就可以读取其中的密钥。