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 aprovisionamiento quita el uso de certificados de autenticación (certificados hoja individuales) necesarios en la SKU v1. El certificado raíz es un certificado raíz en formato X.509 (.CER) codificado en base 64 del servidor de certificados de back-end. Identifica la entidad de certificación raíz que emitió el certificado de servidor que, a continuación, se usa para la comunicación TLS/SSL.

Application Gateway confía en el certificado del sitio web de forma predeterminada si está firmado por una entidad de certificación conocida (por ejemplo, GoDaddy o DigiCert). En ese caso, no es necesario cargar explícitamente el certificado raíz. 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.

Nota:

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

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

  1. Use la herramienta generador de certificados privados con un solo clic. 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 hacerlo por su cuenta.

En este artículo, aprenderá a:

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

Requisitos previos

  • OpenSSL en un equipo con Windows o Linux

    Aunque podría haber otras herramientas disponibles para la administración de certificados, en este tutorial se usa OpenSSL. Puede encontrar OpenSSL incluido en 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 con 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 una clave cifrada.

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

Creación de un certificado raíz y autofirmado

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

    openssl req -new -sha256 -key contoso.key -out contoso.csr
    
  2. Cuando se le solicite, escriba la contraseña de la clave raíz y la información de la organización de la entidad de certificación personalizada, como país o región, estado, organización, unidad organizativa y nombre de dominio completo (es decir, el dominio del emisor).

    create root certificate

  3. Utilice el siguiente comando 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. Lo usará para firmar el certificado de servidor.

Crear un certificado de servidor

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

Crear 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

Cree la CSR (solicitud de firma de certificados).

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

Nota:

El nombre común (CN) 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 comando siguiente para generar la CSR:

    openssl req -new -sha256 -key fabrikam.key -out fabrikam.csr
    
  2. Cuando se le solicite, escriba la contraseña de la clave raíz y la información de la organización de la entidad de certificación personalizada: país o región, estado, organización, unidad organizativa y nombre de dominio completo. Este es el dominio del sitio web y debe ser diferente del emisor.

    Server certificate

Generación del certificado con la CSR y la clave y firma con la clave raíz de la entidad de certificación

  1. Use el siguiente comando 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 el resultado del archivo CRT y comprobar su contenido:

    openssl x509 -in fabrikam.crt -text -noout
    

    Certificate verification

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

    • 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 con los archivos fabrikam.crt y fabrikam.key. Si el servidor web no puede recibir dos archivos, puede combinarlos en un único archivo .pem o .pfx mediante comandos de OpenSSL.

IIS

Para obtener instrucciones sobre cómo importar el certificado y cargarlo como un certificado de servidor en IIS, consulte Procedimiento: Instalación de certificados importados en un servidor web en Windows Server 2003.

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

Apache

La configuración siguiente es un ejemplo de host virtual 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 configuración siguiente es un ejemplo de bloque de servidor NGINX con configuración de TLS:

NGINX with TLS

Acceso al servidor para comprobar la configuración

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

    Trusted root certificates

    Nota:

    Se da por supuesto que se ha configurado DNS 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 host para resolver el nombre.

  2. Vaya a su sitio web y haga clic en el icono de candado situado 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

OpenSSL certificate verification

Carga del certificado raíz en la configuración HTTP de Application Gateway

Para cargar el certificado en Application Gateway, debe exportar el certificado .crt con un formato .cer codificado en base 64. Dado que .crt ya contiene la clave pública en el formato codificado en base 64, solo tiene que cambiar el nombre de la extensión del archivo de .crt a .cer.

Azure portal

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

Screenshot of adding a certificate using the portal.

Azure PowerShell

O bien, puede usar CLI de Azure o Azure PowerShell para cargar el certificado raíz. El código siguiente es un ejemplo de Azure PowerShell.

Nota:

En el ejemplo siguiente se agrega un certificado raíz de confianza a Application Gateway, se crea una nueva configuración de HTTP y se agrega una nueva regla, suponiendo que el grupo de back-end y el cliente de escucha ya existen.

## 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

## Get the listener, backend pool and probe

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

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

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

## 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

## Get the configuration and update the Application Gateway

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

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

Set-AzApplicationGateway -ApplicationGateway $gw

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

  1. Haga clic en 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 Correcto para el sondeo HTTPS.

HTTPS probe

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.