簡體   English   中英

如何提取PKCS12密鑰庫(包含pkcs#8的密鑰對和證書)

[英]How to extract PKCS12 keystore(containing a keypair of pkcs#8 and a certificate)

當用戶提供密鑰庫時,通常密鑰庫包含密鑰對(RSA加密的私鑰,x.509證書)和CA證書。 我想提取密鑰庫的內容並將它們寫入另一個文件中。

我能夠讀取證書的內容而沒有任何問題,但是當嘗試讀取密鑰並寫入文件時,內容是未加密的形式。

如何從自身加密寫入私鑰文件的內容?

我已經獲取了密鑰和證書,如下所示:

key = (PrivateKey)keyStore.getKey(keyAlias, password.toCharArray());
cert = keyStore.getCertificate(keyAlias);

我也嘗試過使用Bouncycastle。

使用Java庫:

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(key.getEncoded());
byte[] privatekey = encoder.encode(pkcs8EncodedKeySpec.getEncoded());

使用bouncycastle:

 JceOpenSSLPKCS8EncryptorBuilder encryptorBuilder = new JceOpenSSLPKCS8EncryptorBuilder(PKCS8Generator.PBE_SHA1_RC2_128);  
 encryptorBuilder.setRandom(new SecureRandom());  
 encryptorBuilder.setPasssword("abcde".toCharArray()); // password  
 OutputEncryptor encryptor = encryptorBuilder.build();  

 JcaPKCS8Generator gen2 = new JcaPKCS8Generator(key, encryptor);  
 PemObject obj2 = gen2.generate();  
 StringWriter sw2 = new StringWriter();  
 try (JcaPEMWriter pw = new JcaPEMWriter(sw2)) {  
   pw.writeObject(obj2);  
 }  
 String pkcs8Key2 = sw2.toString();  
 FileOutputStream fos2 = new FileOutputStream(privateKeyLocation);  
 fos2.write(pkcs8Key2.getBytes());  
 fos2.flush();  
 fos2.close();  

當使用純Java庫時,內容將被解密,我可能想附加header和footer標簽。

當使用充氣城堡時,我在-----BEGIN ENCRYPTED PRIVATE KEY----------END ENCRYPTED PRIVATE KEY-----得到了一些數據,但內容與原始文件不同。 我也嘗試過使用其他PKCS8Gnerator.algorithms無效。

使用庫org.apache.commons.codec.binary.Base64並執行以下操作。

String encodedValue = Base64.encodeBase64String(certificate.getEncoded());

並解碼,將上述字符串傳遞給

bytes = Base64.decode(encodedValue, Base64.DEFAULT);

暫無
暫無

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

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