从Java Keystore文件中提取私钥、证书

转:http://blog.csdn.net/moreorless/article/details/4985940


Keystore是一个密码保护的文件,存放私钥和证书。可以通过JDK自带的keytool工具生成。

但是keytool工具,并没有提供方便的方法,从keystore文件中到处私钥和证书。

所以可以通过JDK提供的java.security.KeyStore 类来编码完成相关工作。

参见:

http://www.anandsekar.com/2006/01/19/exporting-the-private-key-from-a-jks-keystore/

 

[java]  view plain copy
  1. import java.io.File;     
  2. import java.io.FileInputStream;     
  3. import java.io.FileWriter;     
  4. import java.security.Key;     
  5. import java.security.KeyPair;     
  6. import java.security.KeyStore;     
  7. import java.security.KeyStoreException;     
  8. import java.security.NoSuchAlgorithmException;     
  9. import java.security.PrivateKey;    
  10. import java.security.PublicKey;    
  11. import java.security.UnrecoverableKeyException;    
  12. import java.security.cert.Certificate;  
  13.   
  14.      
  15. import sun.misc.BASE64Encoder;   
  16.   
  17. public class ExportPrivateKey {    
  18.         private File keystoreFile;    
  19.         private String keyStoreType;    
  20.         private char[] password;    
  21.         private String alias;    
  22.         private File exportedFile;           
  23.   
  24.         public static KeyPair getPrivateKey(KeyStore keystore, String alias, char[] password) {    
  25.                 try {    
  26.                         Key key=keystore.getKey(alias,password);    
  27.                         if(key instanceof PrivateKey) {    
  28.                                 Certificate cert=keystore.getCertificate(alias);    
  29.                                 PublicKey publicKey=cert.getPublicKey();    
  30.                                 return new KeyPair(publicKey,(PrivateKey)key);    
  31.                         }    
  32.                 } catch (UnrecoverableKeyException e) {    
  33.         } catch (NoSuchAlgorithmException e) {    
  34.         } catch (KeyStoreException e) {    
  35.         }    
  36.         return null;    
  37.         }  
  38.   
  39.    
  40.   
  41.         public void export() throws Exception{    
  42.                 KeyStore keystore=KeyStore.getInstance(keyStoreType);    
  43.                 BASE64Encoder encoder=new BASE64Encoder();    
  44.                 keystore.load(new FileInputStream(keystoreFile),password);    
  45.                 KeyPair keyPair=getPrivateKey(keystore,alias,password);    
  46.                 PrivateKey privateKey=keyPair.getPrivate();    
  47.                 String encoded=encoder.encode(privateKey.getEncoded());    
  48.                 FileWriter fw=new FileWriter(exportedFile);    
  49.                 fw.write(“—–BEGIN PRIVATE KEY—–/n“);    
  50.                 fw.write(encoded);    
  51.                 fw.write(“/n“);    
  52.                 fw.write(“—–END PRIVATE KEY—–”);    
  53.                 fw.close();  
  54.   
  55.         }  
  56.   
  57.    
  58.         public static void main(String args[]) throws Exception{    
  59.                 ExportPrivateKey export=new ExportPrivateKey();    
  60.                 export.keystoreFile=new File(args[0]);    
  61.                 export.keyStoreType=args[1];    
  62.                 export.password=args[2].toCharArray();    
  63.                 export.alias=args[3];    
  64.                 export.exportedFile=new File(args[4]);    
  65.                 export.export();    
  66.         }    
  67. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值