Tomcat - Introducción

Tomcat puede usar SSL directamente (mediante un conector HTTP soportanto SSL) o mediante un Apache capaz-SSL (Apache-SSL o apache+mod_ssl) con el conector mod_jk.

.�Construir Tomcat con Soporte SSL

Si queremos reconstruir Tomcat con SSL, debemos tener cuidado con nuestro CLASSPATH. Yo utilizo la variable de entorno CLASSPATH para evitar conflictos con los jars. Una causa com�n de conflictos es con los analizadores XML (xerces & jaxp). Tomcat necesita un analizador XML reciente como xerces 1.1.2 de Apache o jaxp 1.0.1 de Sun.

En el momento de la construcci�n, (mediante ant), Tomcat chequear� algunas libs y luego incluir� varias opciones, posiblemente incluyendo SSL. Si tenemos los jars JSSE 1.0.2 en nuestro CLASSPATH, Tomcat se construir� con SSL (SSLSocketFactory). Tomcat usar� los jars de JSSE (jcert.jar, jsse.jar, jnet.jar). Este software podr�a no est�r incluido en Tomcat. Tendremos que ir a la home page de jsse y descargar el archivo necesario desde all�. Luego copiamos los tres ficheros jar dentro del classpath de librer�as en tiempo de ejecuci�n de Tomcat ($TOMCAT_HOME/lib).

.�Tomcat con Apache y mod_jk

Si utilizamos Apache con SSL (Apache-SSL o apache+mod_ssl) y la directiva JkExtractSSL en httpd.conf, el conector apache mod_jk podr� pasar alguna informaci�n SSL a Tomcat. Esta informaci�n es:

Informacion Comentario
HTTPS apache redirecciona a tomcat desde un �rea SSL
SSL_SESSION_ID ID de sesi�n SSL
SSL_CIPHER SSL CIPHER usado
SSL_CLIENT_CERT Certificado de cliente SSL

Como Apache-SSL y apache+mod_ssl usan diferentes variables de entorno, podemos seleccionar las variables SSL desde las siguientes variables JK:

  • JkExtractSSL
  • JkHTTPSIndicator
  • JkSESSIONIndicator
  • JkCIPHERIndicator
  • JkCERTSIndicator

Aqu� tenemos un ejemplo de directivas para incluir en httpd.conf para usar con mod_ssl:

# Should mod_jk send SSL information to Tomcat (default is On)
JkExtractSSL On
# What is the indicator for SSL (default is HTTPS)
JkHTTPSIndicator HTTPS
# What is the indicator for SSL session (default is SSL_SESSION_ID)
JkSESSIONIndicator SSL_SESSION_ID
# What is the indicator for client SSL cipher suit (default is SSL_CIPHER)
JkCIPHERIndicator SSL_CIPHER
# What is the indicator for the client SSL certificated (default is SSL_CLIENT_CERT)
JkCERTSIndicator SSL_CLIENT_CERT

Cuando usamos mod_jk con Apache & mod_ssl es esencial especificar "SSLOptions +StdEnvVars +ExportCertData" en el fichero httpd.conf.
De otro modo mod_ssl no producir� las variables de entorno necesarias para mod_jk.

Cuidado: incluso si mod_jk soporta ajp12 (la vieja versi�n de Apache JServ) y ajp13, s�lo ajp13 puede enviar informaci�n SSL a Tomcat.

.�SSL via Apache

mod_jk parece soportar la directiva VirtualHost de Apache. Es especialmente �til cuando usamos apache+mod_ssl con tomcat.
Esta configuraci�n asegurar� f�cilmente nuestras aplicaciones web mediante soporte de Apache SSL. Solo hay que tener cuidado de configurar estas variables JK fuera de las directivas VirtualHost:

JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel warn

La redirecci�n JK podr�a configurarse en host virtuales: <virtualhost_default_:443>

<VirtualHost _default_:443>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL 
# other SSL stuff
Alias /alesia "/var/tomcat/webapps/alesia"

<Directory "/var/tomcat/webapps/alesia"> 
  <Directory "/var/tomcat/webapps/alesia"></Directory>
  <Directory "/var/tomcat/webapps/alesia">Options Indexes FollowSymLinks </Directory>
</Directory>

JkMount /alesia/servlet/* ajp13
JkMount /alesia/*.jsp ajp13

<Location "/alesia/WEB-INF/">
</Location>

<Location "/alesia/WEB-INF/">
  AllowOverride None
  Deny from all
</Location>

</VirtualHost>
<!--

<virtualhost _default_:443></virtualhost>
-->

.�SSL Directo

Si queremos que Tomcat sirva directamente HTTP/SSL (https), necesitamos crear un certificado SSL. Para m�s informaci�n sobre SSL y los certificados, te sugiero que eches un vistazo a OpenSSL (Implementaci�n Open Source SSL) y a mod_ssl (soporte de SSL para Apache).

.�Verificar el Fichero de Configuraci�n server.xml de Tomcat

Para usar HTTP con el conector SSL en Tomcat, verificamos que est� activado en server.xml:

<Connector className="org.apache.tomcat.service.PoolTcpConnector">
<Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
<Parameter name="port" value="8443"/>
<Parameter name="socketFactory" value="org.apache.tomcat.net.SSLSocketFactory"/>
<Parameter name="keystore" value="/var/tomcat/conf/keystore" />
<Parameter name="keypass" value="changeit"/>
<Parameter name="clientAuth" value="true"/>
</Connector>

En este ejemplo hemos indicado que el keystore es el fichero /var/tomcat/conf/keystore. La password del keystore es changeit y queremos que los clientes se autentifiquen.

.�Generar un Certificado SSL (RSA) para Tomcat

Lo consegu� (al final) con mi IBM JDK 1.3 despu�s de :

  • Los jars de jsse deben estar en el CLASSPATH y en $JAVA_HOME/jre/lib/ext (JAVA > 1.2)
  • Desde el documento server.xml. Necesitamos_configurar un certificado de servidor si queremos que esto funcione, y necesitamos JSSE.
    • A�adimos los jars de JSSE al CLASSPATH
    • Editamos $JAVA_HOME/jre/lib/security/java.security
      A�adimos security.provider.2=com.sun.net.ssl.internal.ssl.Provider
    • Hacemos: keytool -genkey -alias tomcat -keyalg RSA
      RSA es esencial para trabajar con Netscape e IIS. Usamos "changeit" como password (o a�adimos atributos de keypass). No necesitamos firmar el certificado. Podemos configurar los par�metros del keystore y keypass si queremos cambiar el valor por defecto ($HOME/.keystore with changeit)
  • Sugiero que instalemos jcert.jar, jnet.jar y jsse.jar en $JAVA_HOME/jre/lib/ext y luego los a�adamos a nuestro CLASSPATH export
    CLASSPATH=$JAVA_HOME/jre/lib/ext/jcert.jar:$CLASSPATH 
    export CLASSPATH=$JAVA_HOME/jre/lib/ext/jnet.jar:$CLASSPATH
    export CLASSPATH=$JAVA_HOME/jre/lib/ext/jsse.jar:$CLASSPATH
    
    Tambi�n deber�amos copiar los ficheros jar en $TOMCAT_HOME/lib/ para que est�n bajo el CLASSPATH existente en la arrancada de Tomcat (tomcat.sh).

.�Importar Certificados SSL

Es posible importar certificados con OpenSSL. Aqu� est�n los pasos necesarios para generar dichos certificados con OpenSSL:

  • Para generar una nueva petici�n y una nueva clave:
    openssl req -new -out REQ.pem -keyout KEY.pem
    
  • Para generar un certificado x509 auto-firmado desde una petici�n de certificado usando una clave suministrada, y ver el texto desde la salida del certificado (que se pondr� en el fichero selfSign.pem;
    openssl req -x509 -in REQ.pem -key KEY.pem -out	CERT.pem
    
  • Verificar que la firma es correcta sobre una petici�n de certificado:
    openssl req -verify -in REQ.pem
    
  • Verificar que la firma se hizo usando una clave p�blica especificada:
    openssl req -verify -in REQ.pem -key KEY.pem
    
  • Imprimir el contenido de una petici�n de certificado:
    openssl req -text -in REQ.pem
    
  • Importar el CERT en el keystore:
    keytool -import -v -trustcacerts -alias tomcat -file CERT.pem

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR