Descarga de SSL/TLS de AWS CloudHSM en Linux usando Tomcat con JSSE - AWS CloudHSM

Descarga de SSL/TLS de AWS CloudHSM en Linux usando Tomcat con JSSE

En este tema se proporcionan instrucciones paso a paso para configurar la descarga de SSL/TLS mediante la extensión Java Secure Socket Extension (JSSE) con el SDK de JCE de AWS CloudHSM.

Información general

En AWS CloudHSM, los servidores web de Tomcat funcionan en Linux para admitir HTTPS. El SDK de JCE de AWS CloudHSM proporciona una interfaz que se puede utilizar con JSSE (Java Secure Socket Extension) para permitir el uso de HSM en dichos servidores web. AWS CloudHSM JCE es el puente que conecta JSSE con su clúster de AWS CloudHSM. JSSE es una API de Java para los protocolos Capa de conexión segura (SSL) y Seguridad de la capa de transporte (TLS).

Paso 1: configurar los requisitos previos

Siga estos requisitos previos para utilizar un servidor web Tomcat con AWS CloudHSM para descarga de SSL/TLS en Linux. Estos requisitos previos deben cumplirse para configurar la descarga de SSL/TLS en un servidor web con el SDK 5 de cliente y un servidor web Tomcat.

nota

Las diferentes plataformas requieren requisitos previos diferentes. Siga siempre los pasos de instalación adecuados para su plataforma.

Requisitos previos

Cómo cumplir los requisitos previos
  1. Instale y configure el JCE para AWS CloudHSM en un clúster de AWS CloudHSM activo con al menos dos módulos de seguridad de hardware (HSM). Para obtener más información sobre la instalación, consulte JCE para SDK 5 de cliente.

  2. En una instancia de Linux EC2 que tenga acceso a su clúster de AWS CloudHSM, siga las instrucciones de Apache Tomcat para descargar e instalar el servidor web Tomcat.

  3. Utilice la CLI de CloudHSM para crear un usuario de criptografía (CU). Para obtener más información sobre la administración de los usuarios de HSM, consulte Administrar a los usuarios de HSM con la CLI de CloudHSM.

    sugerencia

    Realice un seguimiento del nombre de usuario y la contraseña del CU. Los necesitará más adelante cuando genere o importe el certificado y la clave privada de HTTPS para el servidor web.

  4. Para configurar JCE con Java Keytool, siga las instrucciones de Use Client SDK 5 para integrar AWS CloudHSM con Java Keytool y Jarsigner..

Después de completar estos pasos, vaya a Paso 2: generar o importar una clave privada y un certificado SSL/TLS.

Notas
  • Para usar Linux con seguridad mejorada (SELinux) y servidores web, debe permitir las conexiones TCP salientes en el puerto 2223, que es el puerto que el SDK 5 de cliente utiliza para comunicarse con el HSM.

  • Para crear y activar un clúster y permitir que una instancia EC2 acceda al clúster, complete los pasos que se indican en Introducción a AWS CloudHSM. En esta sección se ofrecen instrucciones paso a paso para crear un clúster activo con un HSM y una instancia de cliente de Amazon EC2. Puede utilizar esta instancia de cliente como su servidor web.

  • Para evitar deshabilitar la durabilidad de la clave de cliente, agregue más de un HSM a su clúster. Para obtener más información, consulte Agregar un HSM a un clúster de AWS CloudHSM.

  • Para conectarse a su instancia de cliente, puede utilizar SSH o PuTTY. Para obtener más información, consulte Conectarse a la instancia de Linux mediante SSH o Conectarse a la instancia de Linux desde Windows mediante PuTTY en la documentación de Amazon EC2.

Paso 2: generar o importar una clave privada y un certificado SSL/TLS

Para habilitar HTTPS, su aplicación de servidor web Tomcat necesita una clave privada y un certificado SSL/TLS correspondiente. Si desea utilizar un servidor web para la descarga SSL/TLS con AWS CloudHSM, debe almacenar la clave privada en un HSM del clúster de AWS CloudHSM.

nota

Si todavía no dispone de una clave privada y un certificado correspondiente, genere una clave privada en un HSM. Use la clave privada para crear una solicitud de firma de certificado (CSR), la cual utilizará para crear un certificado SSL/TLS.

Cree un archivo de KeyStore local de AWS CloudHSM que contenga una referencia a su clave privada en el HSM y el certificado asociado. El servidor web utiliza el archivo de KeyStore de AWS CloudHSM para identificar la clave privada en el HSM durante la descarga de SSL/TLS.

Generación de una clave privada

En esta sección le indicamos cómo generar un par de claves con la KeyTool de JDK. Una vez que haya generado un par de claves en el HSM, puede exportarlo como un archivo de KeyStore y generar el certificado correspondiente.

Según su caso de uso, puede generar un par de claves RSA o EC. Los siguientes pasos muestran cómo generar un par de claves de RSA.

Utilice el comando genkeypair de KeyTool para generar un par de claves RSA.
  1. Tras sustituir las siguientes <VARIABLES> por sus datos específicos, utilice el siguiente comando para generar un archivo de almacén de claves denominado jsse_keystore.keystore, que tendrá una referencia a su clave privada en el HSM.

    $ keytool -genkeypair -alias <UNIQUE ALIAS FOR KEYS> -keyalg <KEY ALGORITHM> -keysize <KEY SIZE> -sigalg <SIGN ALGORITHM> \ -keystore <PATH>/<JSSE KEYSTORE NAME>.keystore -storetype CLOUDHSM \ -dname CERT_DOMAIN_NAME \ -J-classpath '-J'$JAVA_LIB'/*:/opt/cloudhsm/java/*:./*' \ -provider "com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider" \ -providerpath "$CLOUDHSM_JCE_LOCATION" \ -keypass <KEY PASSWORD> -storepass <KEYSTORE PASSWORD>
    • <PATH>: la ruta en la que desea generar su archivo de almacén de claves.

    • <UNIQUE ALIAS FOR KEYS>: se usa para identificar de forma exclusiva su clave en el HSM. Este alias se establecerá como atributo LABEL de la clave.

    • <KEY PASSWORD>: almacenamos la referencia de su clave en el archivo de almacén de claves local. Esta contraseña protege la referencia local.

    • <KEYSTORE PASSWORD>: esta es la contraseña del archivo del almacén de claves local.

    • <JSSE KEYSTORE NAME>: nombre del archivo de almacén de claves.

    • <CERT DOMAIN NAME>: nombre distintivo X.500.

    • <KEY ALGORITHM>: algoritmo clave para generar un par de claves (por ejemplo, RSA y EC).

    • <KEY SIZE>: tamaño de clave para generar el par de claves (por ejemplo, 2048, 3072 y 4096).

    • <SIGN ALGORITHM>: tamaño de la clave para generar el par de claves (por ejemplo, SHA1withRSA, SHA224withRSA, SHA256withRSA, SHA384withRSA y SHA512withRSA).

  2. Para confirmar que el comando se ha utilizado correctamente, introduzca el siguiente comando y compruebe que ha generado correctamente un par de claves RSA.

    $ ls <PATH>/<JSSE KEYSTORE NAME>.keystore

Generación de un certificado autofirmado

Una vez que haya generado una clave privada junto con el archivo del almacén de claves, puede usar este archivo para generar una solicitud de firma de certificado (CSR) y un certificado.

En un entorno de producción, normalmente se usa una entidad de certificación (CA) para crear un certificado de una CSR. No es necesaria una CA para un entorno de prueba. Si utiliza una CA, envíele el archivo CSR y utilice el certificado SSL/TLS firmado que le proporcione en su servidor web para HTTPS.

Como alternativa al uso de una CA, puede utilizar KeyTool para crear un certificado autofirmado. Los navegadores no confían en certificados autofirmados y no deben utilizarse en entornos de producción. Se pueden usar en entornos de prueba.

aviso

Los certificados autofirmados deben utilizarse únicamente en entornos de prueba. En entornos de producción, utilice un método más seguro como, por ejemplo, una entidad de certificación para crear un certificado.

Temas
    Generación de un certificado
    1. Obtenga una copia del archivo de almacén de claves generado en un paso anterior.

    2. Ejecute el siguiente comando si desea utilizar KeyTool a fin de crear una solicitud de firma de certificado (CSR).

      $ keytool -certreq -keyalg RSA -alias unique_alias_for_key -file certreq.csr \ -keystore <JSSE KEYSTORE NAME>.keystore -storetype CLOUDHSM \ -J-classpath '-J$JAVA_LIB/*:/opt/cloudhsm/java/*:./*' \ -keypass <KEY PASSWORD> -storepass <KEYSTORE PASSWORD>
      nota

      El archivo de salida de la solicitud de firma de certificado es certreq.csr.

    Firma de un certificado
    • Tras sustituir las siguientes <VARIABLES> por sus datos específicos, ejecute el siguiente comando para firmar su CSR con su clave privada en su HSM. Esto creará un certificado autofirmado.

      $ keytool -gencert -infile certreq.csr -outfile certificate.crt \ -alias <UNIQUE ALIAS FOR KEYS> -keypass <KEY_PASSWORD> -storepass <KEYSTORE_PASSWORD> -sigalg SIG_ALG \ -storetype CLOUDHSM -J-classpath '-J$JAVA_LIB/*:/opt/cloudhsm/java/*:./*' \ -keystore jsse_keystore.keystore
      nota

      certificate.crt es el certificado firmado que usa la clave privada del alias.

    Importación de un certificado en KeyStore
    • Tras sustituir las siguientes <VARIABLES> por sus datos específicos, ejecute el siguiente comando para importar un certificado firmado como certificado de confianza. Este paso almacenará el certificado en la entrada del almacén de claves identificada por un alias.

      $ keytool -import -alias <UNIQUE ALIAS FOR KEYS> -keystore jsse_keystore.keystore \ -file certificate.crt -storetype CLOUDHSM \ -v -J-classpath '-J$JAVA_LIB/*:/opt/cloudhsm/java/*:./*' \ -keypass <KEY PASSWORD> -storepass <KEYSTORE_PASSWORD>
    Conversión de un certificado en un PEM
    • Ejecute el siguiente comando para convertir el archivo de certificado firmado (.crt) en un PEM. El archivo PEM se utilizará para enviar la solicitud desde el cliente http.

      $ openssl x509 -inform der -in certificate.crt -out certificate.pem

    Después de completar estos pasos, vaya al Paso 3: configurar el servidor web.

    Paso 3:cConfigurar el servidor web Tomcat

    Actualice la configuración de software del servidor web para utilizar el certificado HTTPS y el archivo PEM correspondiente que ha creado en el paso anterior. Recuerde hacer una copia de seguridad de sus certificados y claves existentes antes de empezar. De este modo, concluirá la configuración del software del servidor web de Linux para la descarga SSL/TLS con AWS CloudHSM. Para obtener más información, consulte Referencia de configuración de Apache Tomcat 9.

    Detención del servidor
    • Tras sustituir las siguientes <VARIABLES> por sus datos específicos, ejecute el siguiente comando para detener Tomcat Server antes de actualizar la configuración.

      $ /<TOMCAT DIRECTORY>/bin/shutdown.sh
      • <TOMCAT DIRECTORY>: el directorio de su instalación de Tomcat.

    Actualización del classpath de Tomcat
    1. Conéctese a su instancia de cliente.

    2. Localice la carpeta de instalación de Tomcat.

    3. Tras sustituir las siguientes <VARIABLES> por sus datos específicos, ejecute el siguiente comando para añadir la biblioteca de Java y la ruta de Java de Cloudhsm en el classpath de Tomcat, ubicado en el archivo Tomcat/bin/catalina.sh.

      $ sed -i 's@CLASSPATH="$CLASSPATH""$CATALINA_HOME"\/bin\/bootstrap.jar@CLASSPATH="$CLASSPATH""$CATALINA_HOME"\/bin\/bootstrap.jar:'" <JAVA LIBRARY>"'\/*:\/opt\/cloudhsm\/java\/*:.\/*@' <TOMCAT PATH> /bin/catalina.sh
      • <JAVA LIBRARY>: ubicación de la biblioteca de Java JRE.

      • <TOMCAT PATH>: carpeta de instalación de Tomcat.

    Añada un conector HTTPS a la configuración del servidor.
    1. Acceda a la carpeta de instalación de Tomcat.

    2. Tras sustituir las siguientes <VARIABLES> por sus datos específicos, ejecute el siguiente comando para añadir un conector HTTPS y usar los certificados generados como requisitos previos:

      $ sed -i '/<Connector port="8080"/i <Connector port=\"443\" maxThreads=\"200\" scheme=\"https\" secure=\"true\" SSLEnabled=\"true\" keystoreType=\"CLOUDHSM\" keystoreFile=\" <CUSTOM DIRECTORY>/<JSSE KEYSTORE NAME>.keystore\" keystorePass=\"<KEYSTORE PASSWORD>\" keyPass=\"<KEY PASSWORD> \" keyAlias=\"<UNIQUE ALIAS FOR KEYS>" clientAuth=\"false\" sslProtocol=\"TLS\"/>' <TOMCAT PATH>/conf/server.xml
      • <CUSTOM DIRECTORY>: directorio en el que se encuentra el almacén de claves.

      • <JSSE KEYSTORE NAME>: nombre del archivo de almacén de claves.

      • <KEYSTORE PASSWORD>: esta es la contraseña del archivo del almacén de claves local.

      • <KEY PASSWORD>: almacenamos la referencia de su clave en el archivo de almacén de claves local. Esta contraseña protege la referencia local.

      • <UNIQUE ALIAS FOR KEYS>: se usa para identificar de forma exclusiva su clave en el HSM. Este alias se establecerá como atributo LABEL de la clave.

      • <TOMCAT PATH>: ruta de la carpeta de Tomcat.

    Inicio del servidor
    • Tras sustituir las <VARIABLES> por sus datos específicos, ejecute el siguiente comando para detener el servidor Tomcat antes de actualizar la configuración

      $ /<TOMCAT DIRECTORY>/bin/startup.sh
      nota

      <TOMCAT DIRECTORY> es el nombre del directorio de instalación de Tomcat.

    Después de actualizar la configuración del servidor web, vaya a Paso 4: habilitar el tráfico HTTPS y verificar el certificado.

    Paso 4: habilitar el tráfico HTTPS y verificar el certificado

    Después de configurar el servidor web para la descarga de SSL/TLS con AWS CloudHSM, añada la instancia del servidor web a un grupo de seguridad que permita el tráfico HTTPS entrante. Esto permite a los clientes, como, por ejemplo, navegadores web, establecer una conexión HTTPS con su servidor web. A continuación, establezca una conexión HTTPS con su servidor web y compruebe que usa el certificado que configuró para la descarga de SSL/TLS con AWS CloudHSM.

    Habilitación de las conexiones HTTPS entrantes

    Para conectarse a su servidor web desde un cliente (como, por ejemplo, un navegador web), cree un grupo de seguridad que permita conexiones HTTPS entrantes. En concreto, debería permitir conexiones TCP entrantes en el puerto 443. Asigne este grupo de seguridad a su servidor web.

    Para crear un grupo de seguridad para HTTPS y asignarlo a su servidor web
    1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

    2. Elija Security Groups en el panel de navegación.

    3. Elija Crear grupo de seguridad.

    4. En Create Security Group (Crear grupo de seguridad), haga lo siguiente:

      1. Para Security group name (Nombre del grupo de seguridad), escriba un nombre para el grupo de seguridad que está creando.

      2. De manera opcional, escriba una descripción del grupo de seguridad que está creando.

      3. Para VPC, elija la VPC que contiene la instancia de su servidor web Amazon EC2.

      4. Seleccione Add Rule (Añadir regla).

      5. Para tipo, seleccione HTTPS en la ventana desplegable.

      6. Para Origen, introduzca una ubicación de origen.

      7. Elija Crear grupo de seguridad.

    5. En el panel de navegación, seleccione Instances (Instancia[s]).

    6. Seleccione la casilla de verificación junto a la instancia del servidor web.

    7. Seleccione las Acciones en el menú desplegable que se encuentra en la parte superior de la página. Seleccione Seguridad, a continuación, Cambiar grupos de seguridad.

    8. Para Grupos de seguridad asociados, seleccione el cuadro de búsqueda y elija el grupo de seguridad que creó para HTTPS. A continuación, elija Añadir grupos de seguridad.

    9. Seleccione Guardar.

    Verificación del uso del certificado configurado por parte de HTTPS

    Después de añadir el servidor web a un grupo de seguridad, puede verificar que la descarga de SSL/TLS utiliza su certificado autofirmado. Puede hacerlo mediante un navegador web o con una herramienta como OpenSSL s_client.

    Para verificar la descarga de SSL/TLS con un navegador web
    1. Utilice un navegador web para conectarse a su servidor web mediante el nombre de DNS público o la dirección IP del servidor. Asegúrese de que la dirección URL en la barra de direcciones comienza con https://. Por ejemplo, https://ec2-52-14-212-67.us-east-2.compute.amazonaws.com/.

      sugerencia

      Puede utilizar un servicio DNS como, por ejemplo, Amazon Route 53, para dirigir el nombre de dominio de su sitio web (por ejemplo, https://www.ejemplo.com/) a su servidor web. Para obtener más información, consulte Direccionamiento del tráfico a una instancia de Amazon EC2 en la Guía para desarrolladores de Amazon Route 53 o en la documentación para su servicio DNS.

    2. Utilice el navegador web para ver el certificado del servidor web. Para más información, consulte los siguientes temas:

      Otros navegadores web pueden tener características similares que puede utilizar para ver el certificado del servidor web.

    3. Asegúrese de que el certificado SSL/TLS es el que ha configurado para que utilice el servidor web.

    Para verificar la descarga de SSL/TLS con OpenSSL s_client
    1. Ejecute el siguiente comando OpenSSL para conectarse a su servidor web a través de HTTPS. Sustituya <server name> por el nombre de DNS público o la dirección IP de su servidor web.

      openssl s_client -connect <server name>:443
      sugerencia

      Puede utilizar un servicio DNS como, por ejemplo, Amazon Route 53, para dirigir el nombre de dominio de su sitio web (por ejemplo, https://www.ejemplo.com/) a su servidor web. Para obtener más información, consulte Direccionamiento del tráfico a una instancia de Amazon EC2 en la Guía para desarrolladores de Amazon Route 53 o en la documentación para su servicio DNS.

    2. Asegúrese de que el certificado SSL/TLS es el que ha configurado para que utilice el servidor web.

    Ahora tiene un sitio web que se protege con HTTPS. La clave privada del servidor web está almacenada en un HSM en su clúster de AWS CloudHSM.

    Para agregar un equilibrador de carga, consulte Agregar un equilibrador de carga con Elastic Load Balancing para AWS CloudHSM (opcional).