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

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

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

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

参见:

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

 

   
      import java.io.File;   
      import java.io.FileInputStream;   
      import java.io.FileWriter;   
      import java.security.Key;   
      import java.security.KeyPair;   
      import java.security.KeyStore;   
      import java.security.KeyStoreException;   
      import java.security.NoSuchAlgorithmException;   
      import java.security.PrivateKey;  
      import java.security.PublicKey;  
      import java.security.UnrecoverableKeyException;  
      import java.security.cert.Certificate;
  
         
      import sun.misc.BASE64Encoder; 
  
      public class ExportPrivateKey {  
              private File keystoreFile;  
              private String keyStoreType;  
              private char[] password;  
              private String alias;  
              private File exportedFile;         
  
              public static KeyPair getPrivateKey(KeyStore keystore, String alias, char[] password) {  
                      try {  
                              Key key=keystore.getKey(alias,password);  
                              if(key instanceof PrivateKey) {  
                                      Certificate cert=keystore.getCertificate(alias);  
                                      PublicKey publicKey=cert.getPublicKey();  
                                      return new KeyPair(publicKey,(PrivateKey)key);  
                              }  
                      } catch (UnrecoverableKeyException e) {  
              } catch (NoSuchAlgorithmException e) {  
              } catch (KeyStoreException e) {  
              }  
              return null;  
              }
  
       
  
              public void export() throws Exception{  
                      KeyStore keystore=KeyStore.getInstance(keyStoreType);  
                      BASE64Encoder encoder=new BASE64Encoder();  
                      keystore.load(new FileInputStream(keystoreFile),password);  
                      KeyPair keyPair=getPrivateKey(keystore,alias,password);  
                      PrivateKey privateKey=keyPair.getPrivate();  
                      String encoded=encoder.encode(privateKey.getEncoded());  
                      FileWriter fw=new FileWriter(exportedFile);  
                      fw.write(“—–BEGIN PRIVATE KEY—–/n“);  
                      fw.write(encoded);  
                      fw.write(“/n“);  
                      fw.write(“—–END PRIVATE KEY—–”);  
                      fw.close();
  
              }
  
       
              public static void main(String args[]) throws Exception{  
                      ExportPrivateKey export=new ExportPrivateKey();  
                      export.keystoreFile=new File(args[0]);  
                      export.keyStoreType=args[1];  
                      export.password=args[2].toCharArray();  
                      export.alias=args[3];  
                      export.exportedFile=new File(args[4]);  
                      export.export();  
              }  
      }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值