1 18 package org.apache.geronimo.console.ca; 19 20 import java.io.IOException ; 21 import java.math.BigInteger ; 22 import java.net.URI ; 23 import java.text.DateFormat ; 24 import java.text.SimpleDateFormat ; 25 import java.util.Date ; 26 27 import javax.portlet.ActionRequest; 28 import javax.portlet.ActionResponse; 29 import javax.portlet.PortletException; 30 import javax.portlet.PortletRequest; 31 import javax.portlet.RenderRequest; 32 import javax.portlet.RenderResponse; 33 34 import org.apache.commons.logging.Log; 35 import org.apache.commons.logging.LogFactory; 36 import org.apache.geronimo.console.MultiPageModel; 37 import org.apache.geronimo.console.util.PortletManager; 38 import org.apache.geronimo.gbean.AbstractName; 39 import org.apache.geronimo.gbean.GBeanData; 40 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 41 import org.apache.geronimo.kernel.Naming; 42 import org.apache.geronimo.kernel.proxy.GeronimoManagedBean; 43 import org.apache.geronimo.kernel.repository.Artifact; 44 import org.apache.geronimo.management.geronimo.CertificationAuthority; 45 import org.apache.geronimo.management.geronimo.KeystoreInstance; 46 import org.apache.geronimo.security.ca.FileCertificateRequestStore; 47 import org.apache.geronimo.security.ca.FileCertificateStore; 48 import org.apache.geronimo.security.ca.GeronimoCertificationAuthority; 49 import org.apache.geronimo.system.serverinfo.ServerInfo; 50 51 56 public class ConfirmCAHandler extends BaseCAHandler { 57 private final static Log log = LogFactory.getLog(ConfirmCAHandler.class); 58 public ConfirmCAHandler() { 59 super(CONFIRM_CA_MODE, "/WEB-INF/view/ca/confirmCA.jsp"); 60 } 61 62 public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException { 63 String [] params = {ERROR_MSG, INFO_MSG, "caCN", "caOU", "caO", "caL", "caST", "caC", "alias", "keyAlgorithm", "keySize", "algorithm", "validFrom", "validTo", "sNo", "password"}; 64 for(int i = 0; i < params.length; ++i) { 65 String value = request.getParameter(params[i]); 66 if(value != null) response.setRenderParameter(params[i], value); 67 } 68 return getMode(); 69 } 70 71 public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException { 72 String [] params = {ERROR_MSG, INFO_MSG, "caCN", "caOU", "caO", "caL", "caST", "caC", "alias", "keyAlgorithm", "keySize", "algorithm", "validFrom", "validTo", "sNo", "password"}; 73 for(int i = 0; i < params.length; ++i) { 74 String value = request.getParameter(params[i]); 75 if(value != null) request.setAttribute(params[i], value); 76 } 77 } 78 79 public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException { 80 String caCN = request.getParameter("caCN"); 81 String caOU = request.getParameter("caOU"); 82 String caO = request.getParameter("caO"); 83 String caL = request.getParameter("caL"); 84 String caST = request.getParameter("caST"); 85 String caC = request.getParameter("caC"); 86 String alias = request.getParameter("alias"); 87 String password = request.getParameter("password"); 88 String keyAlgorithm = request.getParameter("keyAlgorithm"); 89 String keySize = request.getParameter("keySize"); 90 String algorithm = request.getParameter("algorithm"); 91 String validFrom = request.getParameter("validFrom"); 92 String validTo = request.getParameter("validTo"); 93 String sNo = request.getParameter("sNo"); 94 String errorMsg = null; 95 96 try { 97 if(!defaultKeyAlgorithm.equalsIgnoreCase(keyAlgorithm)) { 100 throw new Exception ("Key Algorithm '"+keyAlgorithm+"' is not supported."); 101 } 102 KeystoreInstance caKeystore = createCAKeystoreInstance(request, password); 104 caKeystore.unlockKeystore(password.toCharArray()); 105 caKeystore.generateKeyPair(alias, password.toCharArray(), password.toCharArray(), keyAlgorithm, Integer.parseInt(keySize), 106 algorithm, 365, caCN, caOU, caO, caL, caST, caC); 107 caKeystore.unlockPrivateKey(alias, password.toCharArray(), password.toCharArray()); 108 109 createCARelatedGBeans(request, (GeronimoManagedBean)caKeystore, defaultCAStoreDir, defaultCSRStoreDir); 111 112 CertificationAuthority ca = getCertificationAuthority(request); 113 ca.unlock(password.toCharArray()); 114 115 Date validFromDate = null, validToDate = null; 118 DateFormat df = new SimpleDateFormat ("MM/dd/yyyy"); 119 validFromDate = df.parse(validFrom); 120 validToDate = df.parse(validTo); 121 BigInteger serialNum = new BigInteger (sNo); 122 123 ca.issueOwnCertificate(serialNum, validFromDate, validToDate, algorithm); 125 getCertificateStore(request).storeCACertificate(ca.getCertificate()); 127 128 response.setRenderParameter(INFO_MSG, "CA Setup is successful!"); 131 log.info("CA Setup is successful."); 132 133 return CADETAILS_MODE+BEFORE_ACTION; 134 } catch(Exception e) { 135 errorMsg = e.toString(); 136 log.error("Errors in CA Setup process.", e); 137 } 138 139 if(errorMsg != null) response.setRenderParameter(ERROR_MSG, errorMsg); 141 return SETUPCA_MODE+BEFORE_ACTION; 142 } 143 144 152 private void createCARelatedGBeans(PortletRequest request, GeronimoManagedBean caKeystore, String certStorePath, String certReqStorePath) { 153 AbstractName caKeystoreName = PortletManager.getNameFor(request, caKeystore); 155 Artifact configurationId = PortletManager.getConfigurationFor(request, caKeystoreName); 156 ServerInfo serverInfo = PortletManager.getCurrentServer(request).getServerInfo(); 157 AbstractName serverInfoName = PortletManager.getNameFor(request, serverInfo); 158 Naming naming = PortletManager.getManagementHelper(request).getNaming(); 159 160 AbstractName certStoreName = naming.createSiblingName(caKeystoreName, "geronimo-ca-cert-store", NameFactory.CERTIFICATE_STORE); 162 GBeanData certStore = new GBeanData(certStoreName, FileCertificateStore.GBEAN_INFO); 163 certStore.setAttribute("directoryPath", URI.create(certStorePath)); 164 certStore.setReferencePattern("ServerInfo", serverInfoName); 165 PortletManager.addGBeanToConfiguration(request, configurationId, certStore, true); 166 167 AbstractName certReqStoreName = naming.createSiblingName(caKeystoreName, "geronimo-ca-cert-req-store", NameFactory.CERTIFICATE_REQUEST_STORE); 169 GBeanData certReqStore = new GBeanData(certReqStoreName, FileCertificateRequestStore.GBEAN_INFO); 170 certReqStore.setAttribute("directoryPath", URI.create(certReqStorePath)); 171 certReqStore.setReferencePattern("ServerInfo", serverInfoName); 172 PortletManager.addGBeanToConfiguration(request, configurationId, certReqStore, true); 173 174 AbstractName caName = naming.createSiblingName(caKeystoreName, "geronimo-ca", NameFactory.CERTIFICATION_AUTHORITY); 176 GBeanData ca = new GBeanData(caName, GeronimoCertificationAuthority.GBEAN_INFO); 177 ca.setReferencePattern("ServerInfo", serverInfoName); 178 ca.setReferencePattern("KeystoreInstance", caKeystoreName); 179 ca.setReferencePattern("CertificateStore", certStoreName); 180 ca.setReferencePattern("CertificateRequestStore", certReqStoreName); 181 PortletManager.addGBeanToConfiguration(request, configurationId, ca, true); 182 } 183 } 184 | Popular Tags |