java - 将私钥从 pem 文件导入 keystore

标签 java keystore

我是使用 keystore 的新手,当我有证书文件和 pem 格式的私钥时,有没有办法创建 keystore ?请帮忙

   keyStore = KeyStore.getInstance("PKCS12");

   keyStore.load(null, pwd.toCharArray());

   String privKeyPEM= privateKey.replace("-----BEGIN RSA PRIVATE KEY-----\r\n","");
   privKeyPEM = privKeyPEM.replace("\r\n-----END RSA PRIVATE KEY-----","");
   byte [] encoded = Base64.decode(privKeyPEM);
   PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
   KeyFactory kf = KeyFactory.getInstance("RSA");
   PrivateKey privKey = kf.generatePrivate(keySpec);

这里失败kf.generatePrivate(keySpec)。 我得到了:

algid parse error, not a sequence.

其余代码:

   KeyStore.PrivateKeyEntry entry = new KeyStore.PrivateKeyEntry(privKey, new Certificate[ {certificate});
   keyStore.setEntry(keyStoreAlias,entry , new KeyStore.PasswordProtection(pwd.toCharArray()));

最佳答案

好吧,经过一番研究,我最终得到了这段代码,它对我来说非常有用。因此,我将其发布在这里,以防有人正在寻找相同的解决方案。

        KeyStore keystore;

        java.security.Security.addProvider(
                new org.bouncycastle.jce.provider.BouncyCastleProvider()
        );

        PEMParser pemParser = new PEMParser(new StringReader(privateKey));
        Object object = pemParser.readObject();
        PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(pwd.toCharArray());
        JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
        KeyPair kp;
        if (object instanceof PEMEncryptedKeyPair) {
            kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
        } else {
            kp = converter.getKeyPair((PEMKeyPair) object);
        }
        RSAPrivateKey result = (RSAPrivateKey)kp.getPrivate();

        keystore= KeyStore.getInstance("pkcs12");
        keystore.load(null, pwd.toCharArray());
        keystore.setKeyEntry(keyStoreAlias, result, pwd.toCharArray(), new Certificate[]{certificate});

感谢所有提出解决方案或提出问题的人。

关于java - 将私钥从 pem 文件导入 keystore ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26177874/

相关文章:

java - 为 HTTP 客户端请求模拟 HTTP 服务器超时

android - Android 中 keystore 有效性的含义是什么?

Java keytool 最大传递长度

java - 如何为 Hibernate 设置 HSQLDB?

java - 将列表内容从servlet发送到jsp

java - JPA CriteriaQuery 的简单 where 条件

尽管实现了 Comparable 接口(interface),但 Java ClassCastException 错误

java - 在gradle中生成 key

java - 带 SSL 的简单 RMI 服务器

ssl - Weblogic 自定义信任存储切换到 Java 标准信任