Activar SSL en Apache Tomcat (5.5, 6 y 7)
Secure Socket Layer (SSL) es un mecanismo que permite a los navegadores comunicarse con los servidores web a través de una conexión segura. Para activar SSL en Apache Tomcat es necesario utilizar un certificado del lado de servidor con el formato JKS, PKCS11 o PKCS12 <– este último es el estandar web.
Tomcat puede utilizar dos herramientas para SSL:
- Open SSL, utiliza este solo si tu servidor tiene instalado el APR (Apache Portable Runtime).
- Java Keystore, es el estandar de Java y es el que vamos a utilizar =).
Veamos lo que dice la documentación:
Tomcat can use two different implementations of SSL:
- the JSSE implementation provided as part of the Java runtime (since 1.4)
- the APR implementation, which uses the OpenSSL engine by default.
The exact configuration details depend on which implementation is being used. The implementation used by Tomcat is chosen automatically unless it is overriden as described below. If the installation uses APR – i.e. you have installed the Tomcat native library – then it will use the APR SSL implementation, otherwise it will use the Java JSSE implementation.
Al final del artículo están los links a la documentación oficial donde pueden encontrar más detalles.
Requisitos
- Tener instalado el Java keytool (está incluido en la JDK, dentro de bin)
- Generar un certificado para el servidor con el keytool (lo crearemos en la carpeta confdel Tomcat):
keytool -genkey -alias tomcat -keyalg RSA -keystore TOMCAT_HOME/conf/tomcat.jks
Nota: Después de ejecutar el comando hay que llenar los datos que aparecen en pantalla para crear el certificado en el almacén de llaves, el password es importante!!.
Procedimiento
Tomcat 6.0
Editar el archivo server.xml que esta en la carpeta conf del Tomcat, descomentas las siguientes líneas:
<!-- Define a SSL HTTP/1.1 Connector on port 8443 This connector uses the JSSE configuration, when using APR, the connector should be using the OpenSSL style configuration described in the APR documentation -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
Ahora editas ese tag con lo siguiente:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/tomcat.jks" keystorePass="MyPASS"/>
El keyStorePass es el password que creamos en el almacen de contraseñas del keytool.
Si al final del procedimiento tienes problemas puedes probar cambiando el protocolo por:
-
protocol="org.apache.coyote.http11.Http11Protocol"
-
protocol="org.apache.coyote.http11.Http11NioProtocol"
Nota: En la documentación puedes encontrar la descripción de cada uno.
Ahora solo hay que iniciar el servidor y entrar por el puerto indicado (8443) através de https y nos debe de aparecer algo como esto:
Nota: si tienes que modificar el puerto ten en cuenta lo siguiente:
If you change the port number here, you should also change the value specified for the redirectPort attribute on the non-SSL connector. This allows Tomcat to automatically redirect users who attempt to access a page with a security constraint specifying that SSL is required, as required by the Servlet Specification.
Después debes aceptar el certificado de forma temporal y posteriormente acceder a la misma página:
Tomcat 5.5
El proceso es el mismo, editas el archivo server.xml con las siguientes opciones:
<!-- Define a SSL HTTP/1.1 Connector on port 8443 --> <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/tomcat.jks" keystorePass="MyPASS"/>
Al levantar el servidor debes ver esto:
Tomcat 7.0
Hay que seguir el mismo procedimieto que el tomcat 6:
Enlaces
- Tomcat 7.0 (http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html)
- Tomcat 6.0 (http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html)
- Tomcat 5.5 (http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html)
- APR Apache Portable Runtime, 6.0 (http://tomcat.apache.org/tomcat-6.0-doc/apr.html)
- http://stackoverflow.com/questions/4277560/error-code-ssl-error-rx-record-too-long-tomcatopenssl
Saludos
Oyeeeeeeeeee que bien, hasta que alguien lo explica muy muy facil, latima que lo necesito para UNIX, tendras algo de eso, pero que buen trabajo sigue asi, Saludos
Ps todo lo hice sobre linux que esta basado en Unix, en realidad debe de funcionar igual.
Saludos
Cierto probado en mi Centos, bueno por lo menos la creacion, lamentablemente me manda error al levantar el servicio, alguna idea porque deja te platico, localmente (WinXP) si todo perfecto y a la primera, pero en el servidor me manda lo siguiente: «Error 102 (net::ERR_CONNECTION_REFUSED): El servidor ha rechazado la conexión.»