转: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/
- 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();
- }
- }