您的位置:首页 > 编程语言 > Java开发

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

2016-06-16 11:57 621 查看
Keystore是一个密码保护的文件,存放私钥和证书。可以通过JDK自带的keytool工具生成。

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

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

[java] view
plain copy

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

        }    

}  

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: