En otro artículo anterior ya hablamos acerca de SSL y de cómo activar su suporte en IIS para que las comunicaciones privadas de nuestros clientes viajaran a través de https utilizando un canal seguro que se conseguía encriptando los mensajes intercambiados.
¿Y cómo lo consigo si mi servidor es Apache – Tomcat?
Pues no hay ningún problema. Si utilizamos Tomcat en lugar del servidor web de Microsoft sólo tenemos que seguir los siguientes pasos:
- En primer lugar tendremos que conseguir nuestro certificado digital. Para generarlo utilizaremos la herramienta "keytool" que nos proporciona Java. Esta utilidad se puede encontrar en el directorio bin de la JDK y se utiliza de la siguiente forma desde línea de comandos:
keytool -genkey -alias tomcat -keyalg RSA
Una vez iniciado el proceso, tendremos que contestar a una serie de preguntas que se utilizarán para crear nuestro certificado digital.
- El fichero de claves ".keystore" que acabamos de generar debería encontrarse en el directorio raíz del usuario actual, es decir: C:\Documents and Settings\MiNombreDeUsuario.
- Paramos el servidor Tomcat.
- Ahora deberemos activar el conector para soporte SSL en el fichero "server.xml" que encontraremos en el directorio "conf" de Tomcat. Para ello tenemos que descomentar las líneas que se encuentran cuando buscamos "Define a SSL HTTP/1.1 Connector on port 8443".
- De esta forma, SSL se activará por defecto en el puerto 8443 pero podemos cambiar el puerto que aparece especificado en la definición del conector por el que nosotros queramos. El puerto por defecto para https es el 443, por lo que es recomendable cambiarlo si no tenemos ningún otro servicio que lo utilice. Si lo hemos cambiando, no hay que olvidarse de modificar también el valor del parámetro redirectPort en el resto de conectores que haya definidos.
- Podemos indicar la ubicación del fichero de claves si la hemos cambiado o si estamos utilizando Tomcat como un servicio indicándolo en la definición del conector SSL con la siguiente línea: keystoreFile="C:\miRuta\.keystore".
- Si al crear nuestro certificado hemos especificado otra clave diferente de la que Tomcat espera por defecto (changeit), lo indicaremos también en la definición del conector SSL de esta forma: keystorePass="miNuevaPassword".
- Arrancamos nuevamente el servidor y ya podemos acceder a él a través de https.
¡Estupendo! ¿Y cómo hago para que el acceso por https a una aplicación sea obligatorio?
Con los pasos previos se ha conseguido que nuestras aplicaciones sean visibles tanto por http como a través de https.
Para permitir únicamente el acceso por https a una de nuestras aplicaciones en concreto, e impedir el acceso a la misma a través de http, incluiremos las siguientes líneas en el fichero web.xml de la aplicación, indicando los directorios o archivos para los que vamos requerir la conexión segura mediante la etiqueta "url-pattern":
<security-constraint> <web-resource-collection> <web-resource-name>Entire Application</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
Con estos sencillos pasos ya deberíamos tener nuestro servidor Apache – Tomcat listo para las conexiones seguras. Sólo hay que recordar que, al igual que ocurría con el IIS, el certificado digital que hemos generado es de prueba, y por lo tanto a los clientes les aparecerá un mensaje de error indicando que el certificado del servidor no es válido que puede asustarles.
Por lo tanto, si tenemos intención de utilizar el certificado digital para algo más que pruebas tendremos que conseguir unoreal solicitándolo a una entidad certificadora..