【问题标题】:How to convert the PKCS12 openssl keystore to JKS keytstore with Java Keytool如何使用 Java Keytool 将 PKCS12 openssl 密钥库转换为 JKS 密钥库
【发布时间】:2017-07-23 11:27:15
【问题描述】:

我制作钥匙的步骤:

  1. 创建私钥

    openssl genrsa -des3 -out client.key 2048
    
  2. 生成自签名证书

    openssl req -key client.key -new -x509 -days 365 -out client.crt -subj "/C=xxx/ST=yyy/L=zzz/O=aaa/CN=localhost"
    
  3. 将 PEM 转换为 PKCS12

    openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12
    
  4. 使用 Java Keytool 将 PKCS12 openssl 密钥库转换为 JKS 密钥库

    keytool -importkeystore -destkeystore client_keystore.jks -deststoretype jks -deststorepass 1234567abc -srckeystore client.p12 -srcstoretype pkcs12 -srcstorepass 1234567abc
    

我收到错误:

keytool error: java.io.IOException: failed to decrypt safe contents entry:
javax.crypto.BadPaddingException: Given final block not properly padded

如何解决,我哪里错了?

【问题讨论】:

    标签: java openssl keytool jsse


    【解决方案1】:

    一个问题是并非所有 PCKS12 提供程序都完全 100% 兼容。我遇到了同样的错误,我可以通过将 srcstoretype 从 'PKCS12' 更改为 'BCPKCS12' 来修复它

    这可能会有所帮助:https://cryptosense.com/bouncycastle-keystore-security/

    【讨论】:

      【解决方案2】:
       -srcstorepass 1234567abc
      

      您在创建 PKCS#12 文件时没有指定密码。 你从哪里得到这个?

      您可以使用keytool -genkey 选项作为单行符来完成整个过程。

      【讨论】:

      • 第一步:当命令行需要输入时,我创建了密码为 1234567abc 的 PKCS#12 文件
      • 我可以使用 keytool 创建 PKCS12 密钥文件,但我无法从该文件创建证书、信任库,您可以发布命令行来创建该文件吗??
      • (a) -genkey 创建密钥对和证书。 (b) 您可以使用keytool 直接创建JKS 文件。根本不需要使用 PKCS#12。 (c) 您可以使用keytool 从密钥库中导出证书,然后将其导入到信任库中。
      • 感谢您的回复,但我想从 PKCS12 创建证书、信任库,您能给我 cmd 吗???
      • 为什么来自 PKCS#12?注意步骤 1 不会创建 PKCS#12 文件。第 3 步就是这样做的。