KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > geronimo > console > ca > ConfirmCAHandler


1 /**
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one or more
4  * contributor license agreements. See the NOTICE file distributed with
5  * this work for additional information regarding copyright ownership.
6  * The ASF licenses this file to You under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with
8  * the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18 package org.apache.geronimo.console.ca;
19
20 import java.io.IOException JavaDoc;
21 import java.math.BigInteger JavaDoc;
22 import java.net.URI JavaDoc;
23 import java.text.DateFormat JavaDoc;
24 import java.text.SimpleDateFormat JavaDoc;
25 import java.util.Date JavaDoc;
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 /**
52  * Handler for the CA confirmation screen.
53  *
54  * @version $Rev: 476291 $ $Date: 2006-11-17 15:05:24 -0500 (Fri, 17 Nov 2006) $
55  */

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 JavaDoc actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException JavaDoc {
63         String JavaDoc[] 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 JavaDoc 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 JavaDoc {
72         String JavaDoc[] 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 JavaDoc value = request.getParameter(params[i]);
75             if(value != null) request.setAttribute(params[i], value);
76         }
77     }
78
79     public String JavaDoc actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException JavaDoc {
80         String JavaDoc caCN = request.getParameter("caCN");
81         String JavaDoc caOU = request.getParameter("caOU");
82         String JavaDoc caO = request.getParameter("caO");
83         String JavaDoc caL = request.getParameter("caL");
84         String JavaDoc caST = request.getParameter("caST");
85         String JavaDoc caC = request.getParameter("caC");
86         String JavaDoc alias = request.getParameter("alias");
87         String JavaDoc password = request.getParameter("password");
88         String JavaDoc keyAlgorithm = request.getParameter("keyAlgorithm");
89         String JavaDoc keySize = request.getParameter("keySize");
90         String JavaDoc algorithm = request.getParameter("algorithm");
91         String JavaDoc validFrom = request.getParameter("validFrom");
92         String JavaDoc validTo = request.getParameter("validTo");
93         String JavaDoc sNo = request.getParameter("sNo");
94         String JavaDoc errorMsg = null;
95         
96         try {
97             // Generate keypair
98
// Check if the key algorithm is same as defaultKeyAlgorithm (which is "RSA")
99
if(!defaultKeyAlgorithm.equalsIgnoreCase(keyAlgorithm)) {
100                 throw new Exception JavaDoc("Key Algorithm '"+keyAlgorithm+"' is not supported.");
101             }
102             // Create a KeystoreInstance and generate keypair
103
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             // Create CertificationAuthority, CertificateStore and CertificateRequestStore GBeans
110
createCARelatedGBeans(request, (GeronimoManagedBean)caKeystore, defaultCAStoreDir, defaultCSRStoreDir);
111
112             CertificationAuthority ca = getCertificationAuthority(request);
113             ca.unlock(password.toCharArray());
114
115             // Certificate validity and serial number.
116
// Validity of these have been checked before loading the confirmation page.
117
Date JavaDoc validFromDate = null, validToDate = null;
118             DateFormat JavaDoc df = new SimpleDateFormat JavaDoc("MM/dd/yyyy");
119             validFromDate = df.parse(validFrom);
120             validToDate = df.parse(validTo);
121             BigInteger JavaDoc serialNum = new BigInteger JavaDoc(sNo);
122             
123             // Instruct the CA to issue a self-signed certificate.
124
ca.issueOwnCertificate(serialNum, validFromDate, validToDate, algorithm);
125             // Publish the CA's certificate to CertificateStore.
126
getCertificateStore(request).storeCACertificate(ca.getCertificate());
127             
128             // CA Setup is succeessful.
129
// Load a page to show CA details.
130
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 JavaDoc e) {
135             errorMsg = e.toString();
136             log.error("Errors in CA Setup process.", e);
137         }
138         
139         // An error occurred. Go back to CA details entry page so that user can correct the errors.
140
if(errorMsg != null) response.setRenderParameter(ERROR_MSG, errorMsg);
141         return SETUPCA_MODE+BEFORE_ACTION;
142     }
143     
144     /**
145      * This method creates CerificationAuthority, CertificateStore and CertificateRequestStore GBeans. The GBeans are
146      * created and added to the same configuration containing the caKeystore GBean.
147      * @param request PortletRequest to execute any kernel api's
148      * @param caKeystore Keystore to be used by the CA
149      * @param certStorePath Path for CertificateStore directory. Note: This CA uses FileCertificateStore
150      * @param certReqStorePath Path for CertificateRequestStore directory: Note: This CA uses FileCertificateRequestStore
151      */

152     private void createCARelatedGBeans(PortletRequest request, GeronimoManagedBean caKeystore, String JavaDoc certStorePath, String JavaDoc certReqStorePath) {
153         // Get hold of configuration containing caKeystore GBean
154
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         // Add a CertificateStore GBean
161
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         // Add a CertificateRequestStore GBean
168
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         // Add a CertificationAuthority GBean
175
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