package org.eparapher.rcp.wizards; import java.security.Key; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import org.apache.log4j.Logger; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchWindow; import org.eparapher.core.EParapherManager; import org.eparapher.core.crypto.EPKeystoreManager; import org.eparapher.core.crypto.keystore.KeystoreEntry; import org.eparapher.core.interfaces.IUserKeystore; import org.eparapher.rcp.EPReferences; import org.eparapher.rcp.tools.eParapherTools; public class ImportKeysCertificatesWizard extends Wizard implements INewWizard { private static Logger log = Logger.getLogger(NewCertificateWizard.class); /** The window */ private IWorkbenchWindow window; private ImportKeysCertificatesWizardPageOne one; private ImportKeysCertificatesWizardPageTwo two; //private ImportKeysCertificatesWizardPageThree three; //private ImportParameters cmssignatureparams; public ImportKeysCertificatesWizard() { super(); setWindowTitle("Import Keys and/or Certificates"); setNeedsProgressMonitor(true); } public void init(IWorkbench workbench, IStructuredSelection selection) { window = workbench.getActiveWorkbenchWindow(); } public void addPages() { one = new ImportKeysCertificatesWizardPageOne(); two = new ImportKeysCertificatesWizardPageTwo(); //three = new ImportKeysCertificatesWizardPageThree(); addPage(one); addPage(two); //addPage(three); } @Override public boolean performFinish() { IUserKeystore userKeystore = EPKeystoreManager.getInstance().getUserkeystore(); if (one.isCertChainFromCSR()) { KeystoreEntry[] kse2import = two.getKeystoreEntries(); for (KeystoreEntry keystoreEntry : kse2import) { //Verify (Paranoid) if alias is still here if (userKeystore.containsAlias(keystoreEntry.getKeystoreAlias())) { try { String alias = keystoreEntry.getKeystoreAlias(); char[] privkeysecret = null; //Ask the user for the Private Key Password if ( !EPKeystoreManager.isCAPICOMUsed() && !EPKeystoreManager.isPKCS11Used() && !EPKeystoreManager.isPKCS12Used() ) { String sSecret = EParapherManager.getInstance().getUI().askUserKeystoreSecret(false, true, alias); if ( sSecret == null || sSecret.equals("") ) { String msg = "User cancel private key PIN/Passphrase for " + alias; log.info(msg); eParapherTools.errorMessage(msg); return false; } else { privkeysecret = sSecret.toCharArray(); } } // Put the private key Key privkey = userKeystore.getKeystore().getKey(alias, privkeysecret); userKeystore.getKeystore().setKeyEntry(alias, privkey, privkeysecret, keystoreEntry.getCertificateChain()); userKeystore.saveKeyStore(); log.info("Certificate for alias " + alias + " has been changed. (issued by : " + keystoreEntry.getCertificateChain()[0].getIssuerDN().getName() + " )" ); EPReferences.getInstance().getUsercertview().refreshView(); if (EPReferences.getInstance().getTrustcertview()!=null) EPReferences.getInstance().getTrustcertview().refreshView(); } catch (UnrecoverableKeyException e) { log.error("Error while importing a certificate from csr.",e); } catch (KeyStoreException e) { log.error("Error while importing a certificate from csr.",e); } catch (NoSuchAlgorithmException e) { log.error("Error while importing a certificate from csr.",e); } } } } return true; } }