[英]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.