当前位置: 首页 > 知识库问答 >
问题:

通过java编程将java密钥库转换为PFX

柴瀚
2023-03-14

我需要支持Keytool的相同功能。exe通过使用KeyTool类编程将java密钥库转换为PFX文件。由于项目需求的限制,我无法从我的应用程序中使用命令提示符进程,因此通过编程,我也无法打开命令进程。

例如。

C:\keytool-importkeystore-srckeystore。k eystore-srcstoretype JKS-destkeystore-thekeystore。pfx-存储类型PKCS12

我可以通过使用上面的命令keytool.exe创建PFX文件,但我的要求是通过密钥库从我自己的应用程序生成PFX文件。我在谷歌上搜索了很多,我找不到任何有用的链接,可以提供任何参考或帮助关于这个问题。有一个类sun.security.tools.关键工具,我也搜索了这个,但我找不到这个类的任何一般编程帮助。如果有人有任何建议或想法,请分享。

共有1个答案

轩辕经国
2023-03-14

我不知道KeyTool类,因为它不是一个公共API,我不喜欢使用它,但是你可以自己使用KeyStore类读写KeyStore。根据文档,Java至少支持jkspkcs12密钥库类型,因此您可以执行以下操作:

public void convertKeystore(Path sourceKeystorePath,
                            char[] sourceKeystorePassword,
                            Path destKeystorePath,
                            char[] destKeystorePassword)
throws GeneralSecurityException, IOException {

    KeyStore sourceKeystore = KeyStore.getInstance("jks");
    try (InputStream stream =
            new BufferedInputStream(
                Files.newInputStream(sourceKeystorePath))) {
        sourceKeystore.load(stream, sourceKeystorePassword);
    }

    KeyStore destKeystore = KeyStore.getInstance("pkcs12");
    destKeystore.load(null, destKeystorePassword);

    // Assume each alias in a keystore has the same password
    // as the keystore itself.
    KeyStore.ProtectionParameter sourceAliasPassword =
        new KeyStore.PasswordProtection(sourceKeystorePassword);
    KeyStore.ProtectionParameter destAliasPassword =
        new KeyStore.PasswordProtection(destKeystorePassword);

    Enumeration<String> aliasList = sourceKeystore.aliases();
    while (aliasList.hasMoreElements()) {
        String alias = aliasList.nextElement();
        KeyStore.Entry entry =
            sourceKeystore.getEntry(alias, sourceAliasPassword);
        destKeystore.setEntry(alias, entry, destAliasPassword);
    }

    try (OutputStream stream =
            new BufferedOutputStream(
                Files.newOutputStream(destKeystorePath))) {
        destKeystore.store(stream, destKeystorePassword);
    }
}
 类似资料:
  • 我有作为字符串的公钥和私钥,它们是由Webcrypto API RSA-OAEP算法生成的。我想加密和解密一些纯文本,使用这些和获得异常时,试图转换字符串到字节数组 Java代码: 例外情况: 线程“main”Java.lang.IllegalArgumentException中出现异常:Java.util.base64$Decoder.Decode0(base64.:714)Java.util.

  • 在中,如何使用将2D转换为Map。如果键值已经存在,它也应该更新值。 我试过了 错误 错误:(38,45)java:不兼容类型:推理变量R的边界不兼容等式约束:java。util。映射上限:java。util。HashMap,java。lang.反对

  • 问:是否可以从Java密钥存储读取RSA密钥对可以从公钥捕获公钥主体标识? 我已经生成了一个带有SHA1 2048位密钥的RSA,使用Java密钥工具并将密钥对存储在JKS文件中。我可以从这里使用代码加载密钥:https://stackoverflow.com/a/26711907/1203182但是我得到的是RSAPublicKey,而不是X509证书。RSA公钥没有从公钥中查找主题标识或DN的

  • 问题内容: 如果我有: 我可以毫无问题地打开安全连接。 但是,我想将证书直接存储在战争中,因此我使用:(文件输入流最终将变成资源流,但是我正在这样做以使其正常工作。) 现在,如果我打开相同的连接,则会得到: 问题答案: 为了后代的缘故,所有这些都太复杂了,我们几乎只在静态块中进行了检查:

  • 问题内容: 我试图连接到SSL服务器,这需要我进行身份验证。为了在Apache MINA上使用SSL,我需要一个合适的JKS文件。但是,我只得到了一个.PEM文件。 如何从PEM文件创建JKS文件? 问题答案: 首先,将你的证书转换为DER格式: 然后,将其导入密钥库中:

  • 问题内容: 我需要签署Android应用程序()。 我有档案 我把它转化为通过Internet Explorer文件,然后转换到使用密钥工具。然后,我尝试用jarsigner 签名,但是它说.keystore不包含私钥。 我做错了什么? 问题答案: 使用JDK 1.6或更高版本 贾斯汀(Justin)在下面的评论中指出,仅keytool能够使用以下命令来执行此操作(尽管仅在JDK 1.6和更高版本