Configuración de Tomcat 5.5 para SSL

Dado que tengo CAS en un Tomcat 5.5 voy a configurar el conector SSL. Ésta es una tarea muy sencilla pero he tenido un problema y quiero resaltarlo en este post por si otro pringao como yo cae en el mismo agujero.
Más información en Apache.org

Asunciones

  • En este ejemplo voy a utilizar certificados self-signed; con esto quiero decir que van a ser certificados de prueba que no van a ser validados por ninguna entidad certificadora como VeriSign, Thawte, etc.
  • Utilizaré como servidor Tomcat 5.5
  • Utilizaré la herramienta keytool JDK keytool para generar los certificados

 

Paso 1: Generar certificado SSL

Paso 1.1: Generar el certificado

NOTA: Es muy importante que en nombre indiquéis el nombre del servidor, sino no se corresponderá el certificado con la dirección del servidor. En mi caso gammu.

C:\desarrollo\java\install\jdk1.6.0_14\bin>keytool -genkey -alias tomcat_cas -keypass clave_almacen -keyalg RSA
Escriba la contrase±a del almacÚn de claves:
Volver a escribir la contrase±a nueva:
┐Cußles son su nombre y su apellido?
  [Unknown]:  gammu
┐Cußl es el nombre de su unidad de organizaci¾n?
  [Unknown]:  c1nn
┐Cußl es el nombre de su organizaci¾n?
  [Unknown]:  uniovi
┐Cußl es el nombre de su ciudad o localidad?
  [Unknown]:  Oviedo
┐Cußl es el nombre de su estado o provincia?
  [Unknown]:  Asturias
┐Cußl es el c¾digo de paÝs de dos letras de la unidad?
  [Unknown]:  es
┐Es correcto CN=gammu, OU=c1nn, O=uniovi, L=Oviedo, ST=Asturias, C=es?
  [no]:  y

Se crea un almacén de claves en el directorio del perfil del usuario. En Windows es dentro de Documents and Settings. En mi caso: C:\Documents and Settings\Fer\.keystore

 Paso 1.2: Exportar el certificado

C:\desarrollo\java\install\jdk1.6.0_14\bin>keytool -export -alias tomcat_cas -keypass clave_almacen -file server.crt
Escriba la contrase±a del almacÚn de claves:
Certificado almacenado en el archivo <server.crt>

Paso 1.3: Añadir el certificado a la lista de certificados de confianza de las JRE

NOTA: La contraseña que tiene el almacen cacerts es changeit

C:\desarrollo\java\install\jdk1.6.0_14\bin>keytool -import -file server.crt -alias tomcat_cas -keypass clave_almacen
-keystore ..\jre\lib\security\cacerts

Escriba la contrase±a del almacÚn de claves:
Propietario: CN=gammu, OU=c1nn, O=uniovi, L=Oviedo, ST=Asturias, C=es
Emisor: CN=gammu, OU=c1nn, O=uniovi, L=Oviedo, ST=Asturias, C=es
N·mero de serie: 4a83f4f4
Vßlido desde: Thu Aug 13 13:11:48 CEST 2009 hasta: Wed Nov 11 12:11:48 CET 2009
Huellas digitales del certificado:
         MD5:  9A:7A:28:F9:20:08:94:8E:EF:CA:5B:87:7C:7D:57:CF
         SHA1: C6:4E:89:5B:68:D5:F0:3C:DD:52:4D:0F:EF:CA:C7:02:CF:62:F4:83
         Nombre del algoritmo de firma: SHA1withRSA
         Versi¾n: 3
┐Confiar en este certificado? [no]:  y
Se ha a±adido el certificado al almacÚn de claves

Otra forma de añadir el certificado a la lista de confianza

Si nuestro servidor Tomcat ya tiene instalado el certificado, podemos hacer uso de una utilidad desarrollada por Andreas Sterbenz utilidad InstallCert.
Invocaremos la utilidad indicando nombre de servidor y puerto.

C:\desarrollo>java -cp . InstallCert gammu:8444
Loading KeyStore C:\desarrollo\java\install\jdk1.6.0_14\jre\lib\security\cacerts…
Opening connection to gammu:8444…
Starting SSL handshake…

No errors, certificate is already trusted

Server sent 1 certificate(s):

 1 Subject CN=gammu, OU=c1nn, O=uniovi, L=Oviedo, ST=Asturias, C=es
   Issuer  CN=gammu, OU=c1nn, O=uniovi, L=Oviedo, ST=Asturias, C=es
   sha1    c6 4e 89 ……………………..
   md5     9a 7a 28 …………………….
Enter certificate to add to trusted keystore or ‘q’ to quit: [1]
………………………

]Added certificate to keystore ‘cacerts’ using alias ‘gammu-1’

 

Paso 2: Configurar el conector HTTPS en Tomcat

Tan sólo hay que descomentar el conector y poner los valores de keystore, truststore…
Hay que modificar el archivo server.xml para configurar el conector.

En mi caso este archivo está en: C:\desarrollo\java\install\tomcat-5.5\conf\server.xml
Asimismo he cambiado algunos puertos (por ejemplo el 8443 a 8444) ya que tengo varios Tomcat corriendo a la vez.

 NOTA: No olvidéis indicar la password del trustore porque la que tiene por defecto Tomcat no funciona. También recordad que si cambiais el puerto, tenéis que hacer lo mismo en el redirect port del conector no SSL.

Adjunto un ejemplo:

 ————————————- server.xml —————————————————-

<Connector port=»8444″ maxHttpHeaderSize=»8192″
               maxThreads=»150″ minSpareThreads=»25″ maxSpareThreads=»75″
               enableLookups=»false» disableUploadTimeout=»true»
               acceptCount=»100″ scheme=»https» secure=»true»
               clientAuth=»false» sslProtocol=»TLS»
               keystoreFile=»C:/Documents and Settings/Fer/.keystore»
      keystorePass=»clave_almacen»
      truststoreFile=»C:/desarrollo/java/install/jdk1.6.0_14/jre/lib/security/cacerts»
      truststorePass=»changeit«/>

2 comentarios

  1. Estoy tratando de configurar Pentaho-Liferay-tomcat con el CAS Jasig 3.3.3. Seguí estos pasos y generé el certificado pero cuando me loggueo en el CAS se me redirecciona para una página en blanco y en la consola del tomcat me muestra el error: unable to find valid certification path to requested target.

Deja un comentario