domingo, 29 de agosto de 2010

Tomcat y HTTPS

RESUMEN:

Vamos a configurar Tomcat para  poder acceder  a nuestras aplicaciones a través https.


Necesitaremos un certificado que vamos a crear usando la herramienta keytool. Una vez lo hayamos creado, configuraremos Tomcat para que lo tenga en cuenta.

Posteriormente vamos a configurar el Tomcat para que confíe en otros certificados; en este caso para que confíe en ese mismo certificado


1. - Creamos un certificado propio y configuramos Tomcat para que use el certificado

Usando la herramienta keytool generamos una clave RSA que llamaremos tomcat y la almacenamos en  el fichero /certificados/tomcat.keystore. El password para el almacén de claves será "miPassword"

$ keytool -genkey -alias tomcat -keypass miPassword -keyalg RSA -keystore /certificados/tomcat.keystore

Escriba la contraseña del almacén de claves:  // miPassword
Volver a escribir la contraseña nueva:        // miPassword
¿Cuáles son su nombre y su apellido?
    [Unknown]:
¿Cuál es el nombre de su unidad de organización?
    [Unknown]:
¿Cuál es el nombre de su organización?
    [Unknown]:
¿Cuál es el nombre de su ciudad o localidad?
    [Unknown]:
¿Cuál es el nombre de su estado o provincia?
    [Unknown]:
¿Cuál es el código de país de dos letras de la unidad?
    [Unknown]:
¿Es correcto CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown?
    [no]:  si


2. - Configuramos Tomcat para que use el certificado
Modificamos el fichero server.xml que está en $CATALINA_HOME/conf


< Connector
   protocol="org.apache.coyote.http11.Http11Protocol"
   SSLEnabled="true" 
   clientAuth="false"
   keystoreFile="/certificados/tomcat.keystore" 
   keystorePass="miPassword"
   maxThreads="150" 
   port="8443"
   scheme="https" 
   secure="true" 
   sslProtocol="TLS"  
   URIEncoding="UTF-8"
/>


3. - Generamos el fichero que almacenará los certificados en los que Tomcat debe confiar

Ahora vamos a especificar a Tomcat que confíe en ese mismo certificado. Para ello, primero necesitamos exportar el certificado tomcat almacenado en /certificados/tomcat.keystore al fichero  /certificados/server.crt

$ keytool -export -alias tomcat -keypass password -file /certificados/server.crt  -keystore /certificados/tomcat.keystore

Escriba la contraseña del almacén de claves:  // miPassword
Certificado almacenado en el archivo </certificados/server.crt>



Los certificados en los que confiará Tomcat se almacenarán en el fichero /certificados/cacerts. Por tanto iremos importando en este fichero  los diferentes certificados en los que queremos confiar.


$ keytool -import -file /certificados/server.crt -keypass password -keystore /certificados/cacerts


Escriba la contraseña del almacén de claves:  // miPassword
Volver a escribir la contraseña nueva:  //miPassword
Propietario: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
Emisor: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
Número de serie: 4c7a36e0
Válido desde: Sun Aug 29 11:30:56 WEST 2010 hasta: Sat Nov 27 10:30:56 WET 2010
Huellas digitales del certificado:
   MD5:  DB:E7:4F:42:89:39:58:31:F7:25:20:67:F8:60:54:D6
   SHA1: 85:83:94:D1:42:D6:4D:D9:FA:9A:D5:35:28:C5:A4:23:45:CE:CB:AC
   Nombre del algoritmo de firma: SHA1withRSA
   Versión: 3
¿Confiar en este certificado? [no]:  si
Se ha añadido el certificado al almacén de claves


4. - Configuramos Tomcat para que confíe en otros certificados


Modificamos el fichero server.xml para especificarle el fichero de certificados en los que queremos confiar:


< Connector
   protocol="org.apache.coyote.http11.Http11Protocol"
   SSLEnabled="true"
   clientAuth="false"
   keystoreFile="/certificados/tomcat.keystore"
   keystorePass="miPassword"
   truststoreFile="/certificados/cacerts"                                            
   maxThreads="150"
   port="8443"
   scheme="https"
   secure="true"
   sslProtocol="TLS"
   URIEncoding="UTF-8"
/>

2 comentarios:

  1. Esto me vino al pelo . Muchas gracias por la data

    ResponderEliminar
  2. esto me sirve para comunicar 2 app en 2 tomcat diferentes a traves de ssl?

    ResponderEliminar