[Struts] - Comunicaciones seguras: SSL
Es posible que nuestra aplicación web requiera comunicaciones seguras. Para ello se utiliza https como protocolo de transporte en lugar del conocido http; es decir se cifran las comunicaciones a nivel de la capa de transporte mediante Secure Sockets Layer (SSL).
Como es lógico, cifrar las comunicaciones requiere más recursos (tiempo de cifrar / descifrar, mensajes más pesados…), y normalmente las aplicaciones no necesitan comunicaciones seguras más que en algunas acciones. Por tanto construir toda la aplicación bajo https no es tan eficiente como delimitar zonas no seguras (transporte http) y zonas seguras (transporte htpps) dentro de la misma aplicación.
Para ello utilizaremos un plug-in de código abierto, la extensión de Struts SSL Extension (SSLEXT).
- La distribución, sslext.jar y sslext.tld, consiste en un clase para la inicialización, SecurePlugIn, una clase para el procesado de peticiones, SecureRequestProcessor, y una clase para los mapeos de actions, SecureActionMapping.
- Necesita Java Secure Socket Extension (JSSE) que se distribuye con el JDK 1.4 o posteriores.
- Lógicamente es necesario que el servidor de aplicaciones que estemos utilizando tenga habilitado SSL.
Paso a Paso
Para utilizar la extensión por tanto, debemos
- incluir sslext.jar y sslext.tld en nuestra aplicación
- [struts-config.xml] - Personalizar los mapeos de las clases actio
<action-mappings type="org.apache.struts.config.SecureActionConfig">
- [struts-config.xml] - Personalizar el procesador de peticiones
<controller processorClass="org.apache.struts.action.SecureRequestProcessor" />
- [struts-config.xml] - Declarar el plug-in
<plug-in className="org.apache.struts.action.SecurePlugIn">
<set-property property="httpPort" value="80"/>
<set-property property="httpsPort" value="443"/>
<set-property property="enable" value="true"/>
<set-property property="addSession" value="true"/>
</plug-in>
- [struts-config.xml] - Marcar las acciones seguras mediante la propiedad secure a TRUE
<action path="/inicio*" type="es.mec.accionesintegradas.control.actions.InicioAction" parameter="inicio{1}" >
<!– Obligamos a esta acción a utilizar https : segura –>
<set-property property="secure" value="true"/>
<forward name="success" path="/iniciaLogin{1}.mec" />
</action>
- [struts-config.xml] - Marcamos las acciones no seguras mediante la propiedad secure a FALSE
<action path="/salir*" type="es.mec.accionesintegradas.control.actions.LogoutAction" parameter="logout{1}">
<!– Obligamos a esta acción a utilizar http : NO segura –>
<set-property property="secure" value="false"/>
<forward name="success" path="/iniciaLogin{1}.mec" />
</action>
- Si queremos especificar que una página JSP sea segura (o no segura) :
<%@ taglib uri="http://www.ebuilt.com/taglib" prefix="sslext"%>
<sslext:pageScheme secure="true"/>
Crítico : Cambio http <-> https
Realizar un cambio de http a https y viceversa implica cambiar el protocolo de transporte y el puerto de comunicación (8080 a 8443 ó 443). Puede influir en los CortaFuegos de los sistemas de comunicaciones de la empresa (hay que habilitar esos puertos también!). Internamente es importante saber que internamente este cambio de protocolo implica realizar un redirect.
Finalmente cambiar de una comunicación segura a no segura puede exponer datos críticos seguros a un usuario malicioso que suplante la personalidad del usuario legítimo. Normalmente una vez que se establece una conexión segura no se debe voler a una no segura.
Más información
- Extensión de SSL para Struts, de adictosaltrabajo.com




























Lycka Bonita » [Struts] - Extendiendo el Framework dijo
8 de March del 2008 a las 1:33 pm
[...] después añadir piezas para completar el puzzle, como Struts Validator, Tiles, Log4J, SSLExt… Y a su vez le permitirá sobrevivir como una pieza dentro de otros frameworks [...]