2014-10-03 158 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}); 

感謝所有誰提出了任何解決方案或提出問題。