Programación en castellano
-Tutoriales

Tomcat - Introducción


Tomcat y SSL

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
 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados