Descarga de SSL/TLS de AWS CloudHSM en Windows usando IIS con CNG - AWS CloudHSM

Descarga de SSL/TLS de AWS CloudHSM en Windows usando IIS con CNG

En este tutorial, se proporcionan instrucciones paso a paso para configurar la descarga de SSL/TLS con AWS CloudHSM en un servidor web de Windows.

Información general

En Windows, la aplicación del servidor web Internet Information Services (IIS) para Windows Server admite HTTPS de forma nativa. El proveedor de almacenamiento de claves (KSP) de AWS CloudHSM para la API de criptografía de nueva generación (CNG) de Microsoft proporciona la interfaz que permite a IIS utilizar los HSM del clúster para la descarga criptográfica y el almacenamiento de claves. El KSP de AWS CloudHSM es el puente que conecta IIS con el clúster de AWS CloudHSM.

Este tutorial le enseña a realizar las siguientes tareas:

  • Instalar el software del servidor web en una instancia de Amazon EC2.

  • Configurar el software del servidor web para que sea compatible con HTTPS mediante el uso de una clave privada almacenada en su clúster de AWS CloudHSM.

  • (Opcional) Uso de Amazon EC2 para crear una segunda instancia de servidor web y Elastic Load Balancing para crear un equilibrador de carga. El uso de un equilibrador de carga puede mejorar el desempeño al distribuir la carga entre varios servidores. También puede proporcionar redundancia y una mayor disponibilidad si uno o más servidores funcionan mal.

Cuando esté listo para empezar, vaya al Paso 1: configurar los requisitos previos.

Paso 1: configurar los requisitos previos

Si desea configurar un servidor web para la descarga SSL/TLS con AWS CloudHSM, necesita lo siguiente:

  • Un clúster de AWS CloudHSM activo que tenga como mínimo un HSM.

  • Una instancia de Amazon EC2 en la que se ejecuta un sistema operativo Windows y que tenga instalado el siguiente software:

    • El software de cliente de AWS CloudHSM para Windows.

    • Internet Information Services (IIS) para Windows Server.

  • Un usuario de criptografía (CU) que sea el propietario y administre la clave privada del servidor web en el HSM.

nota

Este tutorial usa Microsoft Windows Server 2016. También es posible utilizar Microsoft Windows Server 2012, pero no Microsoft Windows Server 2012 R2.

Para configurar una instancia de Windows Server y crear un CU en el HSM
  1. Realice los pasos que se indican en Introducción. Cuando lance el cliente de Amazon EC2, seleccione una AMI de Windows Server 2016 o de Windows Server 2012. Cuando haya completado estos pasos, dispondrá de un clúster activo con al menos un HSM. También tendrá una instancia de cliente de Amazon EC2 que ejecuta Windows Server con el software de cliente de AWS CloudHSM para Windows instalado.

  2. (Opcional) Añada más HSM a su clúster. Para obtener más información, consulte Agregar un HSM a un clúster de AWS CloudHSM.

  3. Conéctese al servidor de Windows. Para obtener más información, consulte Conexión a su instancia en la Guía del usuario de Amazon EC2.

  4. Utilice la CLI de CloudHSM para crear un usuario de criptografía (CU). Realice un seguimiento del nombre de usuario y la contraseña del CU. Los necesitará para completar el paso siguiente.

    nota

    Para obtener información sobre la creación de un usuario, consulte Administrar usuarios de HSM con la CLI de CloudHSM.

  5. Establezca las credenciales de inicio de sesión del HSM, utilizando el nombre de usuario y la contraseña del CU que creó en el paso anterior.

  6. En el paso 5, si utilizó el Administrador de credenciales de Windows para configurar las credenciales de HSM, descargue psexec.exe de SysInternals para ejecutar el siguiente comando como NT Authority\SYSTEM:

    psexec.exe -s "C:\Program Files\Amazon\CloudHsm\tools\set_cloudhsm_credentials.exe" --username <USERNAME> --password <PASSWORD>

    Reemplace <NOMBRE DE USUARIO> y <CONTRASEÑA> por las credenciales de HSM.

Para instalar IIS en Windows Server
  1. Si aún no lo ha hecho, conéctese a su servidor de Windows. Para obtener más información, consulte Conexión a su instancia en la Guía del usuario de Amazon EC2.

  2. En su servidor de Windows, inicie Administrador del servidor.

  3. En el panel Administrador del servidor, elija Agregar roles y características.

  4. Lea la información de Antes de comenzar y, a continuación, elija Siguiente.

  5. En Installation Type, elija Instalación basada en características o en roles. A continuación, elija Next.

  6. En Selección de servidor, elija Seleccionar un servidor del grupo de servidores. A continuación, elija Next.

  7. En Roles de servidor, haga lo siguiente:

    1. Seleccione Servidor web (IIS).

    2. En Agregar características necesarias para Servidor web (IIS), elija Agregar características.

    3. Elija Siguiente para finalizar la selección de roles de servidor.

  8. En Features (Características), acepte los valores predeterminados. A continuación, elija Next.

  9. Lea la información sobre el Rol de servidor web (IIS). A continuación, elija Next.

  10. En Seleccionar servicios de rol, acepte los valores predeterminados o cambie la configuración como desee. A continuación, elija Next.

  11. En Confirmation (Confirmación), lea la información de confirmación. Después, seleccione Install (Instalar).

  12. Cuando finalice la instalación, elija Cerrar.

Después de completar estos pasos, vaya a Paso 2: crear una solicitud de firma de certificado (CSR) y un certificado.

Paso 2: crear una solicitud de firma de certificado (CSR) y un certificado

Para habilitar HTTPS, el servidor web necesita un certificado SSL/TLS y la clave privada correspondiente. Para utilizar la descarga SSL/TLS con AWS CloudHSM, debe almacenar la clave privada en el HSM del clúster de AWS CloudHSM. Para ello, utilice el proveedor de almacenamiento de claves (KSP) de AWS CloudHSM para la API de criptografía de nueva generación (CNG) de Microsoft si desea crear una solicitud de firma de certificado (CSR). A continuación, debe proporcionar la CSR a una entidad de certificación (CA), para que firme la CSR y genere un certificado.

Creación de una CSR

Utilice el KSP de AWS CloudHSM en Windows Server para crear una CSR.

Para crear una CSR
  1. Si aún no lo ha hecho, conéctese a su servidor de Windows. Para obtener más información, consulte Conexión a su instancia en la Guía del usuario de Amazon EC2.

  2. Utilice el siguiente comando para iniciar el daemon de cliente de AWS CloudHSM.

    Amazon Linux
    $ sudo start cloudhsm-client
    Amazon Linux 2
    $ sudo service cloudhsm-client start
    CentOS 7
    $ sudo service cloudhsm-client start
    CentOS 8
    $ sudo service cloudhsm-client start
    RHEL 7
    $ sudo service cloudhsm-client start
    RHEL 8
    $ sudo service cloudhsm-client start
    Ubuntu 16.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 18.04 LTS
    $ sudo service cloudhsm-client start
    Windows
    • Para la versión 1.1.2 y posteriores del cliente de Windows:

      C:\Program Files\Amazon\CloudHSM>net.exe start AWSCloudHSMClient
    • Para la versión 1.1.1 y anteriores de clientes de Windows:

      C:\Program Files\Amazon\CloudHSM>start "cloudhsm_client" cloudhsm_client.exe C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_client.cfg
  3. En Windows Server, utilice un editor de texto para crear un archivo de solicitud de certificado denominado IISCertRequest.inf. A continuación, se muestra el contenido de un archivo IISCertRequest.inf de ejemplo. Para obtener más información sobre las secciones, las claves y los valores que puede especificar en el archivo, consulte la documentación de Microsoft. No cambie el valor de ProviderName.

    [Version] Signature = "$Windows NT$" [NewRequest] Subject = "CN=example.com,C=US,ST=Washington,L=Seattle,O=ExampleOrg,OU=WebServer" HashAlgorithm = SHA256 KeyAlgorithm = RSA KeyLength = 2048 ProviderName = "Cavium Key Storage Provider" KeyUsage = 0xf0 MachineKeySet = True [EnhancedKeyUsageExtension] OID=1.3.6.1.5.5.7.3.1
  4. Utilice el comando certreq de Windows para crear una CSR a partir del archivo IISCertRequest.inf que creó en el paso anterior. En el siguiente ejemplo, se guarda la CSR en un archivo denominado IISCertRequest.csr. Si utilizó otro nombre para el archivo de solicitud de certificado, sustituya IISCertRequest.inf por el nombre del archivo. Si lo desea, puede sustituir IISCertRequest.csr por otro nombre de archivo para el archivo de la CSR.

    C:\>certreq -new IISCertRequest.inf IISCertRequest.csr SDK Version: 2.03 CertReq: Request Created

    El archivo IISCertRequest.csr contiene la CSR. Necesita esta CSR para obtener un certificado firmado.

Obtención e importación de un certificado firmado

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íe el archivo de la CSR (IISCertRequest.csr) a la CA para que cree un certificado SSL/TLS firmado.

Como alternativa al uso de una CA, puede utilizar una herramienta como OpenSSL para crear un certificado autofirmado.

aviso

Los navegadores no confían en certificados autofirmados y no deben utilizarse en entornos de producción. Se pueden usar en entornos de prueba.

Los siguientes procedimientos muestran cómo crear un certificado autofirmado y cómo utilizarlo para firmar la CSR del servidor web.

Para crear un certificado autofirmado
  1. Utilice el siguiente comando de OpenSSL para crear una clave privada. Si lo desea, puede sustituir SelfSignedCA.key por el nombre del archivo en que se va a guardar la clave privada.

    openssl genrsa -aes256 -out SelfSignedCA.key 2048 Generating RSA private key, 2048 bit long modulus ......................................................................+++ .........................................+++ e is 65537 (0x10001) Enter pass phrase for SelfSignedCA.key: Verifying - Enter pass phrase for SelfSignedCA.key:
  2. Utilice el siguiente comando de OpenSSL para crear un certificado autofirmado con la clave privada que ha creado en el paso anterior. Este es un comando interactivo. Lea las instrucciones que aparecen en pantalla y siga las indicaciones. Sustituya SelfSignedCA.key por el nombre del archivo que contiene la clave privada (si es distinto). Si lo desea, puede sustituir SelfSignedCA.crt por el nombre del archivo en que se va a guardar el certificado autofirmado.

    openssl req -new -x509 -days 365 -key SelfSignedCA.key -out SelfSignedCA.crt Enter pass phrase for SelfSignedCA.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []:
Para utilizar el certificado autofirmado para firmar la CSR del servidor web
  • Utilice el siguiente comando de OpenSSL para utilizar la clave privada y el certificado autofirmado para firmar la CSR. Sustituya los nombres de los archivos siguientes por los que contienen los datos correspondientes (si son distintos).

    • IISCertRequest.csr: nombre del archivo que contiene el CSR del servidor web

    • SelfSignedCA.crt: nombre del archivo que contiene el certificado autofirmado

    • SelfSignedCA.key: nombre del archivo que contiene la clave privada

    • IISCert.crt: nombre del archivo en que se va a guardar el certificado firmado del servidor web

    openssl x509 -req -days 365 -in IISCertRequest.csr \ -CA SelfSignedCA.crt \ -CAkey SelfSignedCA.key \ -CAcreateserial \ -out IISCert.crt Signature ok subject=/ST=IIS-HSM/L=IIS-HSM/OU=IIS-HSM/O=IIS-HSM/CN=IIS-HSM/C=IIS-HSM Getting CA Private Key Enter pass phrase for SelfSignedCA.key:

Una vez que haya completado el paso anterior, tendrá un certificado firmado para el servidor web (IISCert.crt) y un certificado autofirmado (SelfSignedCA.crt). Cuando tenga estos archivos, vaya al Paso 3: configurar el servidor web.

Paso 3: configurar el servidor web

Actualice la configuración del sitio web de IIS para que utilice el certificado HTTPS que creó al final del paso anterior. De este modo, concluirá la configuración del software del servidor web de Windows (IIS) para la descarga de SSL/TLS con AWS CloudHSM.

Si utilizó un certificado autofirmado para firmar la CSR, primero debe importar el certificado autofirmado en las entidades de certificación raíz de confianza de Windows.

Para importar el certificado autofirmado en las entidades de certificación raíz de confianza de Windows
  1. Si aún no lo ha hecho, conéctese a su servidor de Windows. Para obtener más información, consulte Conexión a su instancia en la Guía del usuario de Amazon EC2.

  2. Copie el certificado autofirmado en el servidor de Windows.

  3. En Windows Server, abra el Panel de control.

  4. En Buscar en el Panel de control, escriba certificates. A continuación, elija Administrar certificados de equipo.

  5. En la ventana Certificados (equipo local), haga doble clic en Entidades de certificación raíz de confianza.

  6. Haga clic con el botón derecho en Certificados y, a continuación, elija Todas las tareas, Importar.

  7. En el Asistente para importar certificados, elija Siguiente.

  8. Elija Examinar y, a continuación, busque y seleccione el certificado autofirmado. Si creó el certificado autofirmado siguiendo las instrucciones del paso anterior de este tutorial, el certificado autofirmado se llama SelfSignedCA.crt. Elija Open.

  9. Elija Siguiente.

  10. En Almacén de certificados, elija Colocar todos los certificados en el siguiente almacén. A continuación, asegúrese de que está seleccionada la opción Entidades de certificación raíz de confianza para Almacén de certificados.

  11. Elija Next y, a continuación, elija Finish.

Para actualizar la configuración del sitio web de IIS
  1. Si aún no lo ha hecho, conéctese a su servidor de Windows. Para obtener más información, consulte Conexión a su instancia en la Guía del usuario de Amazon EC2.

  2. Inicie el daemon de cliente de AWS CloudHSM.

  3. Copie el certificado firmado del servidor web (el que creó al final del paso anterior de este tutorial) en el servidor de Windows.

  4. En Windows Server, utilice el comando certreq de Windows para aceptar el certificado firmado, tal y como se muestra en el siguiente ejemplo. Sustituya IISCert.crt por el nombre del archivo que contiene el certificado firmado del servidor web.

    C:\>certreq -accept IISCert.crt SDK Version: 2.03
  5. En su servidor de Windows, inicie Administrador del servidor.

  6. En el panel Administrador del servidor, en la esquina superior derecha, elija Herramientas, Administrador de Internet Information Services (IIS).

  7. En la ventana Administrador de Internet Information Services (IIS), haga doble clic en el nombre del servidor. A continuación, haga doble clic en Sitios. Seleccione el sitio web.

  8. Seleccione Configuración de SSL. A continuación, en el lado derecho de la ventana, elija Enlaces.

  9. En la ventana Enlaces de sitios, elija Agregar.

  10. En Tipo, elija https. En Certificado SSL, elija el certificado HTTPS que creó al final del paso anterior de este tutorial.

    nota

    Si se produce un error durante la vinculación de este certificado, reinicie el servidor y vuelva a intentar este paso.

  11. Seleccione Aceptar.

Después de actualizar la configuración del sitio web, vaya al 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).