【问题标题】:Creating a .p12 file with a KeyStore使用 KeyStore 创建 .p12 文件
【发布时间】:2016-09-30 16:33:00
【问题描述】:

我有一个为我创建证书的外部服务,我从中收到一个缓冲区(字符串)。我尝试将此缓冲区加载到 Java 中的 KeyStore 中,然后使用“存储”函数来创建一个 .p12 文件。但是,store 函数会引发异常 - “Given final block not proper padding”。

无论我如何尝试,我都无法使其正常工作或找到问题的原因。

我的代码是:

    public void createP12Certificate(String userName, String comment) throws KeyStoreException, AdminCertificateException, CertificateException, NoSuchAlgorithmException, IOException
{
    KeyStore store = KeyStore.getInstance("PKCS12");

    /* Some Code that gets 'buff' etc. */

    byte[] byteBuff = hexStringToByteArray(buff);
    Arrays.reverse(byteBuff);
    InputStream inputStream = new ByteArrayInputStream(byteBuff);
    store.load(inputStream, password.toCharArray());
    OutputStream outputStream = new FileOutputStream(userName+".p12");
    store.store(outputStream,anotherPassword); //Throws Exception
}

非常感谢!

【问题讨论】:

  • 您接收内容的格式是什么? hexStringToByteArray 和 Arrays.reverse 的组合很奇怪
  • 我正在尝试复制当前在 C# 上运行的代码,因此可以访问 Java 中的 .net 函数。 Java 和 C# 都使用提供缓冲区(证书内容)的外部 Web 服务。由于这是一个十六进制字符串并且 KeyStore 需要一个字节数组,因此我需要使用 hexStringToByteArray。如果我不反转字节数组,Java 会在“加载”方法中引发异常——数据不是 PKCS12 格式。 C# 反转字节数组,所以我也反转了它。 Java 不再在“加载”中抛出异常,但现在它在“存储”中抛出异常,正如我所描述的那样。
  • C# 和 java 中的十六进制转换 -> 字节 -> 反转可能不一样。我建议您确保服务器返回的格式,例如使用支持将十六进制字节转换为记事本 ++ 的文本编辑器。没有看到文件,我无能为力

标签: java encryption certificate pkcs#12


【解决方案1】:

问题就在这些地方

/* Some Code that gets 'buff' etc. */
byte[] byteBuff = hexStringToByteArray(buff);

因为其他发布的代码可以正常工作。

char[] passwordChars = "password".toCharArray();
String fileOne = "/tmp/output_1.p12";
String fileTwo = "/tmp/output_2.p12";

KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(null, null);
keyStore.store(new FileOutputStream(fileOne), passwordChars);

keyStore = KeyStore.getInstance("PKCS12");
byte[] byteBuff = Files.readAllBytes(Paths.get(fileOne));
InputStream inputStream = new ByteArrayInputStream(byteBuff);
keyStore.load(inputStream, passwordChars);
keyStore.store(new FileOutputStream(fileTwo), passwordChars);

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多