2014-10-03 160 views
0

我是新的使用密钥库,有没有办法创建一个密钥库,当我有证书文件和PEM格式的私钥?请帮忙从私钥文件导入私钥到密钥库

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())); 
+0

你是在运行时创建一个keystore,还是一个相当静态的设置? – Hannes 2014-10-03 11:10:13

+0

它将是一种虚拟密钥库。我不知道我是否也正确导入了证书。 – 2014-10-03 11:12:02

+0

可能是因为我使用pkcs12而私钥被定义为pkcs8?但我不知道如何以编程方式执行此操作 – 2014-10-03 11:14:52

回答

1

OK,经过一番研究,我结束了这段代码,这是完全为我工作。所以,我把它张贴在这里,以防有人在寻找相同的解决方案。

 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}); 

感谢所有谁提出了任何解决方案或提出问题。