Cómo configurar los protocolos SSL y TLS en Tomcat 5
La siguiente descripción utiliza la variable $CATALINA_HOME para hacer referencia al directorio de instalación de Tomcat 5, y la mayoría de los directorios se resuelven en función de este directorio. Sin embargo, si está ejecutando varias instancias de Tomcat 5 usando el directorio CATALINA_BASE, debe usar $CATALINA_BASE en lugar de estas referencias.
Para instalar y configurar SSL en Tomcat 5, haga lo siguiente y consulte el resto de la documentación si necesita más información.
1. Si está ejecutando JVM 1.3, descargue JSSE 1.0.3 (o más reciente) desde /products/jsse/ y extienda la instalación o configure la variable de entorno JSSE_HOME para que apunte al directorio de instalación.
2. Ejecute el siguiente comando para crear el almacén de claves del certificado:
Windows:
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
Unix:
$JAVA_ HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
y especifique la contraseña: "changeit".
3. Desmarque "Conector SSL HTTP/1.1" en $CATALINA_HOME/conf/server.xml y realice los ajustes necesarios.
2. Introducción a SSL
SSL (Secure Sockets Layer) es una tecnología que permite a los navegadores y servidores web comunicarse sobre la base de una conexión segura. Esto significa que los datos se cifran en un extremo, se envían, se transmiten y se descifran antes de procesarse en el otro extremo. Este es un proceso bidireccional, en el que el servidor y el cliente cifran todos los datos que se envían.
Otro aspecto importante es la autenticación. Esto significa que su comunicación inicial con el servidor web se realiza a través de una conexión segura. El servidor proporcionará a su navegador web una carta de confianza en forma de un conjunto de certificados que demuestran que el sitio web es quien dice ser. En algunos casos, el servidor también solicitará al navegador un certificado para acreditar su identidad. Esto se denomina "Autenticación de cliente", aunque en la práctica se utiliza principalmente para transacciones de empresa a empresa, no para usuarios individuales. La mayoría de los servidores web que utilizan SSL no requieren autenticación del cliente.
3.SSL y Tomcat
Tenga en cuenta que la configuración mediante sockets seguros generalmente solo es necesaria cuando Tomcat se ejecuta en modo independiente. Cuando Tomcat se utiliza principalmente como un contenedor Servlet/JSP que se ejecuta detrás de otros servidores web como Apache o Microsoft IIS, a menudo es necesario configurar el servidor web principal para manejar conexiones SSL de los usuarios. Normalmente, este servidor manejará todas las funciones relacionadas con SSL y luego reenviará las solicitudes a Tomcat después de descifrarlas. De manera similar, Tomcat devolverá respuestas no cifradas, que son cifradas por el servidor principal y enviadas al dispositivo del usuario. En este caso, Tomcat sabe que la comunicación entre el servidor maestro y el cliente se realiza a través de una conexión segura (porque su aplicación necesita saberlo), pero no participa en el cifrado o descifrado en sí.
4. Certificados
Para poder implementar SSL, el servidor web debe tener un certificado asociado a la aceptación de conexiones seguras para cada interfaz (dirección IP). La teoría detrás de este diseño es que el servidor debe proporcionar algún tipo de garantía de "quién crees que es el propietario", especialmente antes de aceptar cualquier información confidencial. Sin embargo, una explicación detallada de los certificados está fuera del alcance de este documento; considérelos como una "licencia de conducir digital" para direcciones de Internet. Indica qué empresa es propietaria del sitio, así como información de contacto básica del propietario o administrador del sitio.
La "licencia de conducir" está firmada criptográficamente por el propietario y es difícil de falsificar para otros.
La autenticación es una cuestión importante para los sitios web relacionados con el comercio electrónico o cualquier otra transacción comercial. Los certificados generalmente se compran a una autoridad certificadora (CA) acreditada como VeriSign o Thawte, quienes garantizan que los certificados que reconocen son válidos y pueden verificarse electrónicamente. Por lo tanto, si confía en un certificado respaldado por una CA, puede confiar en la validez del certificado.
Sin embargo, en muchos casos, la autenticación no es realmente un problema. Es posible que los administradores simplemente quieran asegurarse de que los datos transmitidos y recibidos por el servidor conectado permanezcan privados y no puedan ser escuchados por nadie más en la Web que quiera espiar. Afortunadamente, Java proporciona una herramienta de línea de comandos relativamente sencilla llamada keytool que facilita la creación de certificados "autofirmados". Un certificado autofirmado es simplemente un certificado generado por el usuario que no está registrado oficialmente con ninguna CA acreditada y, por lo tanto, no es una verdadera garantía de confiabilidad. Esto puede ser importante para usted o no, dependiendo de sus necesidades.
5. Consejos para ejecutar SSL
Cuando los usuarios visitan una página segura de su sitio por primera vez, normalmente reciben un certificado que contiene detalles del certificado, como la empresa y el nombre de contacto. cuadro de diálogo y preguntar si tienen la intención de aceptar la validez del certificado y continuar con la transacción. Algunos navegadores ofrecen la opción de aceptar permanentemente el certificado para que los usuarios no tengan que preocuparse de que se les solicite cada vez que visitan un sitio web. Una vez reconocido por el usuario, el certificado se considera válido durante toda la sesión del navegador.
Aunque el protocolo SSL está diseñado para ser suficientemente eficaz en materia de seguridad, el cifrado/descifrado es un proceso computacional costoso desde una perspectiva de rendimiento. No es necesario que toda la aplicación web se ejecute estrictamente sobre SSL; los desarrolladores pueden elegir qué páginas requieren una conexión segura y cuáles no. Para un sitio web moderadamente ocupado, la práctica común es ejecutar sólo ciertas páginas que puedan intercambiar información confidencial a través de SSL. Por lo general, esto incluye páginas de inicio de sesión, páginas de información personal y páginas de verificación del carrito de compras (donde se puede enviar la información de la tarjeta de crédito). Cualquier página de su aplicación se puede solicitar a través de un socket seguro descargando la versión 1.0.3 o posterior del paquete Java Secure Socket Extensions (JSSE) y anteponiendo la dirección con "/products/jsse/". Si instaló Tomcat desde la fuente, es posible que haya descargado este paquete. Si está ejecutando JDK 1.4.x, estas clases están integradas directamente en el JDK y puede omitir este paso.
Una vez descomprimido, hay dos formas de hacerlo funcionar con Tomcat (elija una):
1. Descomprimiendo los tres archivos JAR (jcert.jar, jnet.jar y jsse.jar) al directorio $JAVA_HOME/jre/lib/ext e instale JSSE como una extensión.
2. Cree una nueva variable de entorno JSSE_HOME y apúntela a la ruta absoluta al directorio JSSE extraído.
6.2 Preparar el almacén de claves de certificado
Por lo general, Tomcat solo se puede ejecutar en almacenes de claves en formato JKS o PKCS12, que es el formato estándar "Java KeyStore" de Java y también está incluido en el JDK. formato creado por la herramienta de línea de comando. PKCS12 es un estándar de Internet que puede ser operado por OpenSSL y Key Manager de Microsoft. Sin embargo, la compatibilidad con PKCS12 es generalmente limitada.
Para importar un certificado existente al almacén de claves JKS, lea la documentación de keytool (ubicada en el paquete de documentación de JDK).
Para utilizar OpenSSL para importar un certificado existente firmado por su propia CA en el almacén de claves PKCS12, ejecute el siguiente comando:
openssl pkcs12 -export -infile mycert.crt -inkey mykey .key \
-outfile mycert.p12 -name tomcat -CAfile myCA.crt \
-caname root -chain
Para un uso más avanzado, consulte la documentación de OpenSSL.
Para crear un certificado autofirmado temporal que contenga un certificado autofirmado independiente, ejecute el siguiente comando en la terminal:
Windows:
%JAVA_HOME %\bin\ keytool -genkey -alias tomcat -keyalg RSA
Unix:
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
(El algoritmo RSA es el algoritmo de seguridad preferido para garantizar la compatibilidad con otros servidores y componentes)
Este comando creará un nuevo archivo llamado ".keystore" en el directorio de ejecución. Para especificar una dirección de archivo, siga el parámetro -keystore con la ruta completa al archivo. Debe reflejar este cambio en el archivo de configuración server.xml que se describe más adelante. Ejemplo:
Windows:
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA \
-keystore \path\to\my\ almacén de claves
Unix:
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA\
-keystore /ruta/a/mi/almacén de claves
Después de ejecutar este comando, se le pedirá que ingrese la contraseña para el almacén de claves. La contraseña predeterminada utilizada por Tomcat es "changeit" (toda en minúsculas), pero puedes especificar la tuya propia. También debe especificar una contraseña personalizada en server.xml, como se describe más adelante.
A continuación, se le pedirá que proporcione una descripción del certificado, como empresa, nombre de contacto, etc. Esta información se mostrará a cualquier persona que desee acceder al certificado. Esta información se mostrará a los usuarios que visiten su página segura, así que asegúrese de que la información proporcionada aquí cumpla con las expectativas del usuario.
Finalmente, se le solicitará una contraseña clave, que es única para este certificado (a diferencia de otros certificados almacenados en el mismo archivo de almacén de claves). Debe utilizar la misma contraseña que el almacén de claves. (Normalmente, el mensaje de keytool le indicará que simplemente lo escriba y se hará automáticamente).
Si hace todo esto, ahora tendrá un archivo de almacén de claves que contiene un certificado que el servidor puede usar.
6.3 Editar el archivo de configuración de Tomcat
El último paso es configurar sockets seguros en $CATALINA_HOME/conf/server.xml. El server.xml predeterminado para una instalación de Tomcat ya contiene un elemento de conector SSL. Ejemplo.
Se ve así:
<-- Definiendo el conector SSL Coyote HTTP/1.1 en el puerto 8443 -->
port="8443" minProcessors="5" maxProcessors="75" enableLookups="true" enableUploadTimeout="true" AcceptCount="100" debug="0" Scheme=", thawte.com o trustcenter.de) para obtener e instalar el certificado. debería haber leído las secciones anteriores, ahora siga las instrucciones a continuación: 7.1 Cree una Solicitud de firma de certificado (CSR) local Para obtener un certificado de la CA de su elección, primero debe crear lo que se llama Solicitud de firma de certificado (CSR). La CA utilizará la CSR para crear un certificado que demuestre que su sitio web es seguro. Para crear una CSR, siga estos pasos: Cree un certificado local: keytool -genkey -alias tomcat -keyalg RSA -keystore NOTA: En algunos casos, para crear un certificado que funcione, debe agregar el dominio de su sitio web nombre en los campos "nombre y apellido" (por ejemplo, www.myside.org Luego cree el CSR: keytool -certreq -keyalg RSA -alias tomcat -file certreq. csr -keystore Ahora que tiene un archivo llamado certreq.csr, puede enviarlo a la CA (consulte el sitio web de la CA para obtener documentación sobre cómo enviarlo) y obtener el certificado. 7.2 Importación del certificado<. /p> Ahora que tiene el certificado, puede importarlo a su almacén de claves local. Primero, debe importar el llamado certificado de cadena o certificado raíz al almacén de claves. Obtenga el certificado desde 7.2.1. Descargue el certificado encadenado para su CA: Para Verisign.com, visite /support/install/intermediate.html. p> Para Trustcenter.de, visite /certs /trustmap.html 7.2.2 Importe el certificado de cadena al almacén de claves: keytool -import -alias root -keystore \ -trustcacerts -file 7.2.3 Finalmente, importe el nuevo certificado encadenado. 2.3 Finalmente, importe el nuevo certificado: keytool -import -alias tomcat -keystore\ -trustcacerts -file 8. Resuelva el problema Los siguientes son problemas y soluciones comunes al instalar SSL: 1. Aparece el error "java.security.NoSuchAlgorithmException" en el archivo de registro. La JVM no encontró el archivo JAR JSSE. Siga las instrucciones de la sección "Descarga e instalación de JSSE". 2. Se produjo el error "java.io.FileNotFoundException: {algún directorio}/{algún archivo} no encontrado" cuando se inició Tomcat. Una posible explicación es que Tomcat no encontró el archivo del almacén de claves. De forma predeterminada, Tomcat supone que el archivo está ubicado en el directorio de inicio donde se ejecuta Tomcat y se denomina .keystore; si el archivo está ubicado en otro lugar, debe agregar el atributo keystoreFile al elemento Factory. 3. El error "java.io.FileNotFoundException: el almacén de claves ha sido manipulado o la contraseña es incorrecta" aparecerá cuando se inicie Tomcat. Suponiendo que nadie haya manipulado el archivo del almacén de claves, la causa más probable es que Tomcat utilizó una contraseña diferente a la que creó cuando creó el archivo del almacén de claves. Para resolver este problema, vuelva a crear el archivo del almacén de claves o agregue el atributo keystorePass a la fábrica. Recuerde: las contraseñas distinguen entre mayúsculas y minúsculas.