簡體   English   中英

將私鑰從pem文件導入密鑰庫

[英]Import private key from pem file into keystore

我是使用密鑰庫的新手,當我擁有pem格式的cert文件和私鑰時,是否可以創建密鑰庫? 請幫忙

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM