Generación de un certificado autofirmado de Azure Application Gateway con una entidad de certificación raíz personalizada

La SKU de Application Gateway v2 presenta el uso de certificados raíz de confianza para permitir conexiones TLS con los servidores back-end. Esta característica elimina la utilización de certificados de autenticación (certificados individuales de hoja) necesarios en la SKU v1. El certificado raíz es un certificado raíz en formato X.509 codificado en Base-64 (.CER) del servidor de certificados backend. Identifica la entidad de certificación raíz (CA) que emitió el certificado de servidor y el certificado de servidor se usa para la comunicación TLS/SSL.

Application Gateway confía en el certificado del sitio web de forma predeterminada si una ENTIDAD de certificación conocida (por ejemplo, GoDaddy o DigiCert) la firma. No es necesario cargar explícitamente el certificado raíz en ese caso. Para obtener más información, consulte Introducción a la terminación TLS y a TLS de extremo a extremo con Application Gateway. Sin embargo, si tiene un entorno de desarrollo y pruebas y no quiere comprar un certificado firmado por la ENTIDAD de certificación verificada, puede crear su propia CA raíz personalizada y un certificado hoja firmado por esa ENTIDAD de certificación raíz.

Note

Los certificados autogenerados no son de confianza de forma predeterminada y pueden ser difíciles de mantener. Además, pueden usar conjuntos de cifrado y hash obsoletos que no son seguros. Para mejorar la seguridad, compre un certificado firmado por una entidad de certificación conocida.

Use las siguientes opciones para generar el certificado privado para las conexiones TLS de back-end.

  1. Use la herramienta de generador de certificados privados. Con el nombre de dominio (nombre común) que se proporciona, esta herramienta realiza los mismos pasos que se documentan en este artículo para generar certificados raíz y servidor. Con los archivos de certificado generados, puede cargar inmediatamente el certificado raíz (. ARCHIVO CER) en la configuración de back-end de la puerta de enlace y la cadena de certificados correspondiente (. PFX) al servidor back-end. La contraseña del archivo PFX también se proporciona en el archivo ZIP descargado.

  2. Use comandos openSSL para personalizar y generar certificados según sus necesidades. Siga las instrucciones de este artículo si desea realizar este proceso por su cuenta.

En este artículo aprenderá a:

  • Creación de su propia entidad de certificación personalizada
  • Creación de un certificado autofirmado firmado por la entidad de certificación personalizada
  • Cargar un certificado raíz autofirmado en un Application Gateway para autenticar el servidor backend

Prerequisites

  • OpenSSL en un equipo que ejecuta Windows o Linux

    Aunque otras herramientas podrían estar disponibles para la administración de certificados, en este tutorial se usa OpenSSL. Puede encontrar OpenSSL agrupado con muchas distribuciones de Linux, como Ubuntu.

  • Un servidor web

    Por ejemplo, Apache, IIS o NGINX para probar los certificados.

  • SKU de Application Gateway v2

    Si no tiene una puerta de enlace de aplicaciones existente, consulte Inicio rápido: Tráfico web directo con Azure Application Gateway: Azure Portal.

Creación de un certificado de entidad de certificación raíz

Cree el certificado de entidad de certificación raíz mediante OpenSSL.

Creación de la clave raíz

  1. Inicie sesión en el equipo donde está instalado OpenSSL y ejecute el siguiente comando. Este comando crea la clave privada raíz. La clave no está cifrada ni protegida por contraseña, así que guarda el archivo contoso.key de forma segura.

    openssl ecparam -out contoso.key -name prime256v1 -genkey
    

Crear un certificado raíz y firmarlo automáticamente

  1. Use el comando siguiente para generar la solicitud de firma de certificado (CSR).

    openssl req -new -sha256 -key contoso.key -out contoso.csr
    
  2. Cuando se te lo pida, escribe la información organizativa de la CA personalizada, como país/región, estado, organización, OU y el dominio totalmente cualificado (este dominio es el emisor). Como la clave raíz no está protegida por contraseña, OpenSSL no te pide una contraseña.

    Captura de pantalla de la creación del certificado raíz.

  3. Use el comando siguiente para generar el certificado raíz.

    openssl x509 -req -sha256 -days 365 -in contoso.csr -signkey contoso.key -out contoso.crt
    

    Los comandos anteriores crean el certificado raíz. Use este certificado para firmar el certificado de servidor.

Crear un certificado de servidor

A continuación, creará un certificado de servidor mediante OpenSSL.

Creación de la clave del certificado

Use el siguiente comando para generar la clave para el certificado de servidor.

openssl ecparam -out fabrikam.key -name prime256v1 -genkey

Crear el CSR (solicitud de firma de certificados)

La CSR es una clave pública que se proporciona a una entidad de certificación al solicitar un certificado. La ENTIDAD de certificación emite el certificado para esta solicitud específica.

Note

El CN (nombre común) del certificado de servidor debe ser diferente del dominio del emisor. Por ejemplo, en este caso, el CN del emisor es www.contoso.com y el CN del certificado de servidor es www.fabrikam.com.

  1. Use el siguiente comando para generar el CSR:

    openssl req -new -sha256 -key fabrikam.key -out fabrikam.csr
    
  2. Cuando se lo solicite, escribe la información organizativa de la CA personalizada: País/Región, Estado, Organización, OU y el nombre de dominio totalmente cualificado. Este dominio es el dominio del sitio web y debe ser diferente del emisor. Al igual que la clave raíz, la clave del servidor no está protegida por contraseña, así que OpenSSL no te pide una contraseña.

    Captura de pantalla del certificado de servidor.

Generar el certificado con el CSR y la clave y firmarlo con la clave raíz de la entidad de certificación

  1. Use el comando siguiente para crear el certificado:

    openssl x509 -req -in fabrikam.csr -CA  contoso.crt -CAkey contoso.key -CAcreateserial -out fabrikam.crt -days 365 -sha256
    

Comprobación del certificado recién creado

  1. Use el siguiente comando para imprimir la salida del archivo CRT y comprobar su contenido:

    openssl x509 -in fabrikam.crt -text -noout
    

    Captura de pantalla de la comprobación del certificado.

  2. Compruebe los archivos del directorio y asegúrese de que tiene los archivos siguientes:

    • contoso.crt
    • contoso.key
    • fabrikam.crt
    • fabrikam.key

Configuración del certificado en la configuración de TLS del servidor web

En el servidor web, configure TLS mediante los archivos fabrikam.crt y fabrikam.key. Si el servidor web no puede tomar dos archivos, puede combinarlos en un único archivo .pem o .pfx mediante comandos OpenSSL.

IIS

Para obtener instrucciones sobre cómo importar el certificado y cargarlos como certificado de servidor en IIS, vea HOW TO: Install Imported Certificates on a Web Server in Windows Server 2003.

Para obtener instrucciones de enlace TLS, consulte Configuración de SSL en IIS 7.

Apache

La siguiente configuración es un host virtual de ejemplo configurado para SSL en Apache:

<VirtualHost www.fabrikam:443>
      DocumentRoot /var/www/fabrikam
      ServerName www.fabrikam.com
      SSLEngine on
      SSLCertificateFile /home/user/fabrikam.crt
      SSLCertificateKeyFile /home/user/fabrikam.key
</VirtualHost>

NGINX

La siguiente configuración es un bloque de servidor NGINX de ejemplo con la configuración de TLS:

Captura de pantalla de NGINX con TLS.

Acceso al servidor con el certificado autofirmado

  1. Agregue el certificado raíz al almacén raíz de confianza de su equipo. Al acceder al sitio web, asegúrese de que toda la cadena de certificados se ve en el explorador.

    Captura de pantalla de los certificados raíz de confianza.

    Note

    DNS debe configurarse para que apunte el nombre del servidor web (en este ejemplo, www.fabrikam.com) a la dirección IP del servidor web. Si no es así, puede editar el archivo de hosts para resolver el nombre.

  2. Vaya a su sitio web y haga clic en el icono de bloqueo en el cuadro de dirección del explorador para comprobar la información del sitio y el certificado.

Comprobación de la configuración con OpenSSL

O bien, puede usar OpenSSL para comprobar el certificado.

openssl s_client -connect localhost:443 -servername www.fabrikam.com -showcerts

Captura de pantalla de la comprobación de certificados openSSL.

Sube el certificado raíz a la configuración de backend de Application Gateway

La Pasarela de Aplicación acepta un certificado raíz confiable solo como un certificado X.509 codificado en Base-64 que utiliza la extensión de nombre de archivo .cer . La codificación X.509 en Base64 es una codificación de texto, y es la codificación que el comando openssl x509 ya generó anteriormente en este artículo para el archivo contoso.crt.

Como contoso.crt ya contiene la clave pública en formato codificado en Base-64, cambia el nombre de la extensión del nombre del archivo de .crt a .cer. Este cambio de nombre solo cambia la extensión del nombre del archivo. No convierte la codificación del certificado, y aquí no se necesita ninguna conversión. Un certificado que no esté ya codificado en Base-64 requiere una conversión real de codificación en lugar de un cambio de nombre.

Azure portal

Para cargar el certificado raíz de confianza desde el portal, seleccione Configuración de Backend y seleccione HTTPS en el Protocolo Backend.

Captura de pantalla de la adición de un certificado mediante el portal.

Azure PowerShell

O bien, use la CLI de Azure o Azure PowerShell para cargar el certificado raíz. Los siguientes pasos de Azure PowerShell añaden un certificado raíz confiable al gateway de aplicaciones, crean una sonda de salud, crean una configuración de backend, añaden una regla de enrutamiento y luego aplican los cambios al gateway.

Note

En estos pasos se da por hecho que la puerta de enlace de aplicaciones appgwv2 del grupo de recursos rgOne, el grupo de back-end testbackendpool y el agente de escucha basichttps ya existen. Ejecuta los pasos en orden en la misma sesión de PowerShell, porque cada paso utiliza el $gw objeto que recupera el primer paso.

Paso 1: Añadir el certificado raíz confiable

Este paso asume que la pasarela de aplicación appgwv2 ya existe en el grupo de recursos rgOne. Recupera la pasarela en la $gw variable que se usa en cada paso posterior y sube el archivo contoso.cer que renombraste antes.

## Add the trusted root certificate to the Application Gateway

$gw=Get-AzApplicationGateway -Name appgwv2 -ResourceGroupName rgOne

Add-AzApplicationGatewayTrustedRootCertificate `
   -ApplicationGateway $gw `
   -Name CustomCARoot `
   -CertificateFile "C:\Users\surmb\Downloads\contoso.cer"

$trustedroot = Get-AzApplicationGatewayTrustedRootCertificate `
   -Name CustomCARoot `
   -ApplicationGateway $gw

Paso 2: Crear la sonda de salud

Este paso asume que tienes la $gw variable del paso 1. Crea una sonda HTTPS para www.fabrikam.com y la almacena en la $probe variable.

Add-AzApplicationGatewayProbeConfig `
  -ApplicationGateway $gw `
  -Name testprobe `
  -Protocol Https `
  -HostName "www.fabrikam.com" `
  -Path "/" `
  -Interval 15 `
  -Timeout 20 `
  -UnhealthyThreshold 3

$probe = Get-AzApplicationGatewayProbeConfig `
  -Name testprobe `
  -ApplicationGateway $gw

Paso 3: Crear la configuración del backend

Este paso supone que tienes las variables $gw, $trustedroot y $probe de los pasos previos. Crea la configuración del backend que utiliza el certificado raíz de confianza y la sonda.

## Add the configuration to the HTTP Setting and don't forget to set the "hostname" field
## to the domain name of the server certificate as this will be set as the SNI header and
## will be used to verify the backend server's certificate. Note that TLS handshake will
## fail otherwise and might lead to backend servers being deemed as Unhealthy by the probes

Add-AzApplicationGatewayBackendHttpSettings `
  -ApplicationGateway $gw `
  -Name testbackend `
  -Port 443 `
  -Protocol Https `
  -Probe $probe `
  -TrustedRootCertificate $trustedroot `
  -CookieBasedAffinity Disabled `
  -RequestTimeout 20 `
  -HostName www.fabrikam.com

$backendhttp = Get-AzApplicationGatewayBackendHttpSettings `
  -Name testbackend `
  -ApplicationGateway $gw

Paso 4: Crear la regla de enrutamiento

Este paso asume que tienes la $gw variable del paso 1 y la $backendhttp variable del paso 3, y que el listener basichttps y el backend pool testbackendpool ya existen en la pasarela.

$listener = Get-AzApplicationGatewayHttpListener `
   -Name basichttps `
   -ApplicationGateway $gw

$bepool = Get-AzApplicationGatewayBackendAddressPool `
  -Name testbackendpool `
  -ApplicationGateway $gw

Add-AzApplicationGatewayRequestRoutingRule `
  -ApplicationGateway $gw `
  -Name testrule `
  -RuleType Basic `
  -BackendHttpSettings $backendhttp `
  -HttpListener $listener `
  -BackendAddressPool $bepool

Paso 5: Actualizar la pasarela de aplicaciones

Los pasos anteriores cambian el $gw objeto solo en la memoria. Este paso asume que tienes la $gw variable del paso 1 con todos los cambios previos aplicados, y confirma esos cambios en la puerta de enlace en Azure.

Set-AzApplicationGateway -ApplicationGateway $gw

Comprobación del estado del back-end de Application Gateway

  1. Seleccione la vista Estado de back-end de la instancia de Application Gateway para comprobar si el estado del sondeo es correcto.
  2. Debería ver que el estado es Saludable para el sondeo HTTPS.

Captura de pantalla del sondeo HTTPS.

Pasos siguientes

Para obtener más información sobre SSL\TLS en Application Gateway, consulte Introducción a la terminación TLS y a TLS de extremo a extremo con Application Gateway.