1 19 20 package com.sslexplorer.keystore.actions; 21 22 import java.io.File ; 23 import java.io.FileOutputStream ; 24 import java.security.KeyStore ; 25 import java.security.PrivateKey ; 26 import java.security.cert.X509Certificate ; 27 28 import javax.servlet.http.HttpServletRequest ; 29 import javax.servlet.http.HttpServletResponse ; 30 31 import org.apache.commons.logging.Log; 32 import org.apache.commons.logging.LogFactory; 33 import org.apache.struts.Globals; 34 import org.apache.struts.action.ActionForm; 35 import org.apache.struts.action.ActionForward; 36 import org.apache.struts.action.ActionMapping; 37 import org.apache.struts.action.ActionMessage; 38 import org.apache.struts.action.ActionMessages; 39 40 import com.sslexplorer.core.CoreAttributeConstants; 41 import com.sslexplorer.core.CoreEvent; 42 import com.sslexplorer.core.CoreEventConstants; 43 import com.sslexplorer.core.CoreServlet; 44 import com.sslexplorer.core.CoreUtil; 45 import com.sslexplorer.core.FileDownloadPageInterceptListener; 46 import com.sslexplorer.keystore.CSRDownload; 47 import com.sslexplorer.keystore.forms.ShowKeyStoreForm; 48 import com.sslexplorer.policyframework.Permission; 49 import com.sslexplorer.policyframework.PolicyConstants; 50 import com.sslexplorer.security.Constants; 51 import com.sslexplorer.security.LogonControllerFactory; 52 import com.sslexplorer.security.SessionInfo; 53 import com.sslexplorer.table.actions.AbstractPagerAction; 54 55 61 public class ShowKeyStoreDispatchAction extends AbstractPagerAction { 62 63 static Log log = LogFactory.getLog(ShowKeyStoreDispatchAction.class); 64 65 66 69 public ShowKeyStoreDispatchAction() { 70 super(PolicyConstants.KEYSTORE_RESOURCE_TYPE, new Permission[] { 71 PolicyConstants.PERM_CHANGE 72 }); 73 } 74 75 public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, 76 HttpServletResponse response) throws Exception { 77 return list(mapping, form, request, response); 78 } 79 80 88 public ActionForward selectKeyStore(ActionMapping mapping, ActionForm form, HttpServletRequest request, 89 HttpServletResponse response) throws Exception { 90 return list(mapping, form, request, response); 91 } 92 93 101 public ActionForward confirmRemove(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 102 throws Exception { 103 String sel = ((ShowKeyStoreForm)form).getSelectedItem(); 104 System.out.println(sel); 105 return mapping.findForward("confirmRemoveCertificate"); 106 } 107 108 116 public ActionForward remove(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 117 throws Exception { 118 ActionMessages msgs = new ActionMessages(); 119 String sel = ((ShowKeyStoreForm)form).getSelectedItem(); 120 ((ShowKeyStoreForm)form).getSelectedKeyStore().deleteCertificate(sel); 121 CoreServlet.getServlet().fireCoreEvent( 122 new CoreEvent(this, CoreEventConstants.KEYSTORE_CERTIFICATE_DELETED, sel, LogonControllerFactory.getInstance().getSessionInfo(request)) 123 .addAttribute(CoreAttributeConstants.EVENT_ATTR_CERTIFICATE_ALIAS, sel)); 124 msgs.add(Globals.MESSAGE_KEY, new ActionMessage("keyStore.certificates.remove.message.certificateRemoved", sel)); 125 saveMessages(request, msgs); 126 ActionForward fwd = mapping.findForward("reload"); 127 String orig = fwd.getPath(); 128 fwd = mapping.findForward("restartRequired"); 129 fwd = CoreUtil.addParameterToForward(fwd, "no", orig); 130 return fwd; 131 } 132 133 141 public ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 142 throws Exception { 143 144 response.setHeader("Cache-Control","no-cache"); 145 response.setHeader("Pragma","must-revalidate"); 146 CoreUtil.clearFlow(request); 147 148 ((ShowKeyStoreForm) form).initialize(request.getSession()); 149 return mapping.findForward("display"); 150 } 151 152 160 public ActionForward exportCertificate(ActionMapping mapping, ActionForm form, HttpServletRequest request, 161 HttpServletResponse response) throws Exception { 162 String sel = ((ShowKeyStoreForm) form).getSelectedItem(); 163 KeyStore systemClientStore = ((ShowKeyStoreForm) form).getSelectedKeyStore().getKeyStore(); 164 FileDownloadPageInterceptListener l = (FileDownloadPageInterceptListener) CoreUtil.getPageInterceptListenerById(request 165 .getSession(), "fileDownload"); 166 if (l == null) { 167 l = new FileDownloadPageInterceptListener(); 168 CoreUtil.addPageInterceptListener(request.getSession(), l); 169 } 170 File clientCertFile = new File (CoreUtil.getTempDownloadDirectory(getSessionInfo(request)), sel + ".cer"); 171 FileOutputStream out = new FileOutputStream (clientCertFile); 172 X509Certificate cert = (X509Certificate ) systemClientStore.getCertificate(sel); 173 out.write(cert.getEncoded()); 174 out.flush(); 175 out.close(); 176 l.addDownload(new CSRDownload(clientCertFile, clientCertFile.getName(), "application/octet-stream", mapping 177 .findForward("success"), "exportCertificate.message", "keystore", sel)); 178 return mapping.findForward("success"); 179 } 180 181 189 public ActionForward exportPrivate(ActionMapping mapping, ActionForm form, HttpServletRequest request, 190 HttpServletResponse response) throws Exception { 191 String sel = ((ShowKeyStoreForm) form).getSelectedItem(); 192 193 KeyStore systemClientStore = ((ShowKeyStoreForm) form).getSelectedKeyStore().getKeyStore(); 194 FileDownloadPageInterceptListener l = (FileDownloadPageInterceptListener) CoreUtil.getPageInterceptListenerById(request 195 .getSession(), "fileDownload"); 196 if (l == null) { 197 l = new FileDownloadPageInterceptListener(); 198 CoreUtil.addPageInterceptListener(request.getSession(), l); 199 } 200 File clientCertFile = new File (CoreUtil.getTempDownloadDirectory(getSessionInfo(request)), sel + ".p12"); 201 FileOutputStream out = new FileOutputStream (clientCertFile); 202 char[] password = ((ShowKeyStoreForm) form).getSelectedKeyStore().getKeyStorePassword().toCharArray(); 203 if (systemClientStore.isKeyEntry(sel)){ 204 PrivateKey keypair = ((ShowKeyStoreForm) form).getSelectedKeyStore().getPrivateKey(sel, 205 password); 206 KeyStore userStore = KeyStore.getInstance("PKCS12", "BC"); 207 userStore.load(null, null); 208 userStore.setKeyEntry(sel, keypair, ((ShowKeyStoreForm) form).getPassword().toCharArray(), ((ShowKeyStoreForm) form).getSelectedKeyStore().getCertificateChain(sel)); 209 userStore.store(out, ((ShowKeyStoreForm) form).getPassword().toCharArray()); 210 out.close(); 211 } 212 l.addDownload(new CSRDownload(clientCertFile, clientCertFile.getName(), "application/octet-stream", mapping.findForward("success"), 213 "exportPrivateKey.message", "keystore", sel)); 214 return mapping.findForward("success"); 215 } 216 217 public int getNavigationContext(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 218 return SessionInfo.MANAGEMENT_CONSOLE_CONTEXT; 219 } 220 221 228 public ActionForward displayPromptForPrivateKeyPassphrase(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 229 return mapping.findForward("displayPromptForPrivateKeyPassphrase"); 230 } 231 232 242 public ActionForward finished(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 243 throws Exception { 244 return mapping.findForward("cancel"); 245 } 246 247 } 248 | Popular Tags |