privateKey直接导入到Keystore工具

JDK自带的Keytool不能直接导入私钥到keystore。一般情况下要转换再用portecle或其他工具导入,其实也可以自己写java程序导入,不过每次用命令行业不方便,所以做了个简陋的swing程序专门导入私钥和证书链到Keystore.现在把代码贴出来,要的自己可以打包:一共有两个类组成,一个是界面,一个是导入程序。我不是做java开发的,高手见了勿喷:下载地址http://download.csdn.net/detail/xtuxucj/4493013

package keyTools;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;

public class KeyToolGUI extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	String alias;
	File keystoreFile;
	String keysotreType;
	File privateKey;
	File certChain;
	KeyStore keyStore;
	CertificateFactory certificateFactory;
	char[] password;

	private JMenu fileMenu;
	private JMenu toolMenu;
	private JMenuBar jMenuBar;
	private JMenuItem newKeystoreMI;
	private JMenuItem saveKeyStoreMI;
	private JMenuItem exitMI;
	private JMenuItem importKeyMI;
	private JMenuItem importCertMI;
	private JFileChooser keyChooser;
	private FileNameExtensionFilter filter;
	private JRadioButton r1;
	private JRadioButton r2;
	private JTextField tx0;
	private JPasswordField tx1;
	private JPasswordField tx2;
	private JPanel jp2;
	private JPanel jp1;
	private Object[] options = { "OK", "CANCEL" };

	private void initComponents() {
		this.setTitle("key tool GUI");
		fileMenu = new JMenu("File");
		toolMenu = new JMenu("Tools");
		jMenuBar = new JMenuBar();
		newKeystoreMI = new JMenuItem("New Keystore");
		saveKeyStoreMI = new JMenuItem("Save Keystore");
		saveKeyStoreMI.setEnabled(false);
		exitMI = new JMenuItem("Exit");
		importKeyMI = new JMenuItem("ImportPrivateKey");
		importKeyMI.setEnabled(false);
		importCertMI = new JMenuItem("ImportCertChain");
		importCertMI.setEnabled(false);
		fileMenu.add(newKeystoreMI);
		fileMenu.add(saveKeyStoreMI);
		fileMenu.add(exitMI);

		toolMenu.add(importKeyMI);
		toolMenu.add(importCertMI);

		jMenuBar.add(fileMenu);
		jMenuBar.add(toolMenu);

		this.setJMenuBar(jMenuBar);

		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(600, 400);
		this.setLocationRelativeTo(null);
		this.setVisible(true);

		importKeyMI.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				importKeyMIActionPer();
			}
		});

		importCertMI.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				importCertMIMIActionPer();
			}
		});

		newKeystoreMI.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				newKeystoreMIActionPer();
			}
		});

		saveKeyStoreMI.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				saveKeystoreMIActionPer();
			}
		});

		exitMI.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				System.exit(0);
			}
		});

	}

	private void importKeyMIActionPer() {
		keyChooser = new JFileChooser(System.getProperty("user.dir"));
		filter = new FileNameExtensionFilter("der files(.der)", "der");
		keyChooser.setFileFilter(filter);
		int returnVal = keyChooser.showOpenDialog(this);
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			privateKey = keyChooser.getSelectedFile();
		}
	}

	private void importCertMIMIActionPer() {
		keyChooser = new JFileChooser(System.getProperty("user.dir"));
		filter = new FileNameExtensionFilter("Certifecations Chain(.p7b)",
				"p7b");
		keyChooser.setFileFilter(filter);
		int returnVal = keyChooser.showOpenDialog(this);
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			certChain = keyChooser.getSelectedFile();
		}
	}

	private void newKeystoreMIActionPer() {

		jp1 = new JPanel();
		jp1.setBorder(BorderFactory.createTitledBorder("Select Keystore Type"));
		jp1.setLayout(new BoxLayout(jp1, BoxLayout.Y_AXIS));
		r1 = new JRadioButton("JKS", true);
		r2 = new JRadioButton("JCEKS");
		ButtonGroup group = new ButtonGroup();
		group.add(r1);
		group.add(r2);
		jp1.add(r1);
		jp1.add(r2);

		int value = JOptionPane.showOptionDialog(this, jp1,
				"Set Keystore Type", JOptionPane.DEFAULT_OPTION,
				JOptionPane.PLAIN_MESSAGE, null, options, null);
		switch (value) {
		case JOptionPane.CLOSED_OPTION:
			break;
		case JOptionPane.OK_OPTION:
			this.getKeystoreType();
			importKeyMI.setEnabled(true);
			importCertMI.setEnabled(true);
			saveKeyStoreMI.setEnabled(true);
			
			break;
		case JOptionPane.CANCEL_OPTION:
			break;
		}

	}

	private void saveKeystoreMIActionPer() {
		jp2 = new JPanel();
		jp2.setLayout(new GridLayout(3, 3));
		JLabel lb0 = new JLabel("set alias:");
		JLabel lb1 = new JLabel("Enter new Password:");
		JLabel lb2 = new JLabel("Confirm new Password:");
		tx0 = new JTextField();
		tx1 = new JPasswordField();
		tx2 = new JPasswordField();
		jp2.add(lb0);
		jp2.add(tx0);
		jp2.add(lb1);
		jp2.add(tx1);
		jp2.add(lb2);
		jp2.add(tx2);

	int value = JOptionPane.showOptionDialog(this, jp2,
				"Set Keystore Type", JOptionPane.OK_CANCEL_OPTION,
				JOptionPane.PLAIN_MESSAGE,null,options,null);
		switch (value) {
		case JOptionPane.CLOSED_OPTION:
			break;
		case JOptionPane.OK_OPTION:
			getPassword();
			break;
		case JOptionPane.CANCEL_OPTION:
			break;
		}
	}

	private void getKeystoreType() {
		if (r1.isSelected()) {
			keysotreType = r1.getText();
		} else if (r2.isSelected()) {
			keysotreType = r2.getText();
		}
		 //System.out.println(keysotreType);
	}

	private void getPassword() {
		if (comparePass(tx1.getPassword(),tx2.getPassword())) {
			password = tx1.getPassword();
			alias = tx0.getText();
			if(alias.isEmpty()){
				alias = "alias";
			}
			keystoreFile();
			
		} else {
			JOptionPane.showMessageDialog(this, "The password is null or do not mach!",
					"Set key store password", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	private boolean comparePass(char[] p1,char[] p2){
		boolean flag = true;
		if(p1.length == p2.length){
			for(int i = 0; i < p1.length;i++){
				if(p1[i] != p2[i]){
					flag = false;
					break;	
				}
				flag = true;
			}
		}else{
			flag = false;
		}
		return flag;
		
	}
	
	
	private void keystoreFile(){
		keyChooser = new JFileChooser(System.getProperty("user.dir"));
		keyChooser.setDialogType(JFileChooser.SAVE_DIALOG );
		filter = new FileNameExtensionFilter("keystore files(.jks)", "jks");
		keyChooser.setFileFilter(filter);
		keyChooser.setDialogTitle("Save keysotre as");
				
		int returnVal = keyChooser.showSaveDialog(this);
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			keystoreFile = keyChooser.getSelectedFile();
		try {
			new CreateKeystore().createKeystoreFile(keysotreType, privateKey, certChain, password, keystoreFile,
					alias);
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, "some input is wrong",
					"Error", JOptionPane.ERROR_MESSAGE);
			
		}
		}
	}

	public KeyToolGUI() {
		initComponents();
	}

	public static void main(String[] args) {
		new KeyToolGUI();

	}

}


 

package keyTools;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.KeyFactory;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.CertificateFactory;
import java.security.spec.PKCS8EncodedKeySpec;

public class CreateKeystore {

	public CreateKeystore() {
		
	}

	 void createKeystoreFile(String keyStoreType, File keyFile,
			File certChainFile, char[] password, File keyStoreFile,String alias)
			throws Exception {

		KeyStore keyStore = KeyStore.getInstance(keyStoreType);
		keyStore.load(null, password);

		// Load the certificate chain (in X.509 DER encoding).
		FileInputStream certificateStream = new FileInputStream(certChainFile);
		CertificateFactory certificateFactory = CertificateFactory
				.getInstance("X.509");
				java.security.cert.Certificate[] chain = {};
		chain = certificateFactory.generateCertificates(certificateStream)
				.toArray(chain);
		certificateStream.close();

		byte[] encodedKey = new byte[(int) keyFile.length()];
		FileInputStream keyInputStream = new FileInputStream(keyFile);
		keyInputStream.read(encodedKey);
		keyInputStream.close();
		KeyFactory rSAKeyFactory = KeyFactory.getInstance("RSA");
		PrivateKey privateKey = rSAKeyFactory
				.generatePrivate(new PKCS8EncodedKeySpec(encodedKey));

		keyStore.setEntry(alias, new KeyStore.PrivateKeyEntry(
				privateKey, chain), new KeyStore.PasswordProtection(password));

		FileOutputStream keyStoreOutputStream = new FileOutputStream(
				keyStoreFile);
		keyStore.store(keyStoreOutputStream, password);
		keyStoreOutputStream.close();

	}

}


 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值