Protección de un nombre DNS personalizado con un enlace TLS/SSL en Azure App Service

En este artículo se muestra cómo proteger el dominio personalizado de la aplicación de App Service o de la aplicación de funciones mediante la creación de un enlace de certificado. Cuando haya terminado, podrá acceder a la aplicación de App Service en el punto de conexión https:// del nombre DNS personalizado (por ejemplo, https://www.contoso.com).

Aplicación web con certificado TLS/SSL personalizado

La protección de un dominio personalizado con un certificado implica dos pasos:

En este tutorial, aprenderá a:

  • Actualizar el plan de tarifa de la aplicación
  • Proteger un dominio personalizado con un certificado
  • Aplicación de HTTPS
  • Aplicación de TLS 1.1 y 1.2
  • Automatización de la administración de TLS con scripts

Prerrequisitos

Para completar esta guía paso a paso, debe:

Nota

La forma más fácil de agregar un certificado privado es crear un certificado administrado de App Service gratuito.

Preparar la aplicación web

Para crear enlaces de TLS o SSL personalizados o habilitar certificados de cliente para la aplicación de App Service, el plan de App Service debe ser de nivel Básico, Estándar, Premium o Aislado. En este paso, asegúrese de que la aplicación web se encuentra en el plan de tarifa compatible.

Inicio de sesión en Azure

Abra Azure Portal.

Busque y seleccione App Services.

Selección de App Services

En la página App Services, seleccione el nombre de la aplicación web.

Captura de pantalla de la página App Services de Azure Portal, en la que se muestra una lista de todas las aplicaciones web en ejecución en la que la primera está resaltada.

Ha llegado a la página de administración de la aplicación web.

Comprobar el plan de tarifa

En el panel de navegación izquierdo de la página de la aplicación web, desplácese a la sección Configuración y seleccione Escalar verticalmente (plan de App Service) .

Menú Escalar verticalmente

Asegúrese de que la aplicación web no está en el nivel F1 ni D1. El nivel actual de la aplicación web aparece resaltado con un cuadro azul oscuro.

Comprobar plan de tarifa

El SSL personalizado no es compatible con los niveles F1 y D1. Si tiene que escalar verticalmente, siga los pasos de la sección siguiente. De lo contrario, cierre la página Escalar verticalmente y omita la sección Scale up your App Service plan (Escalado vertical del plan de App Service).

Escalar verticalmente el plan de App Service

Seleccione cualquiera de los niveles no gratuitos (B1, B2, B3, o cualquier nivel de la categoría Producción). Para ver opciones adicionales, haga clic en Ver opciones adicionales.

Haga clic en Aplicar.

Elegir plan de tarifa

Cuando vea la siguiente notificación, significará que la operación de escalado se habrá completado.

Notificación de escalado vertical

Protección de un dominio personalizado

Siga estos pasos:

En Azure Portal, en el menú de la izquierda, seleccione App Services > <app-name> .

En el panel de navegación izquierdo de la aplicación, inicie el cuadro de diálogo Enlace TLS/SSL de la siguiente manera:

  • Seleccione Dominios personalizados > Agregar enlace
  • Seleccione Configuración de TLS/SSL > Agregar enlace TLS/SSL

Agregar enlace a un dominio

En Dominio personalizado, seleccione el dominio personalizado para el que desea agregar un enlace.

Si la aplicación ya tiene un certificado para el dominio personalizado seleccionado, vaya directamente a Crear enlace. De lo contrario, continúe.

Adición de un certificado para el dominio personalizado

Si la aplicación no tiene ningún certificado para el dominio personalizado seleccionado, tiene dos opciones:

Nota

También puede crear un certificado gratuito o importar un certificado de Key Vault, pero debe hacerlo por separado y después volver al cuadro de diálogo Enlace TLS/SSL.

Creación del enlace

Utilice la siguiente tabla como ayuda para configurar el enlace TLS en el cuadro de diálogo Enlace TLS/SSL y haga clic en Agregar enlace.

Configuración Descripción
Dominio personalizado Nombre de dominio para el que se agrega el enlace TLS/SSL.
Huella digital de certificado privado El certificado a enlazar.
Tipo de TLS/SSL
  • SSL SNI : se pueden agregar varios enlaces SSL SNI. Esta opción permite que varios certificados TLS/SSL protejan diferentes dominios de una misma dirección IP. La mayoría de los exploradores modernos (incluidos Internet Explorer, Chrome, Firefox y Opera) admiten SNI (para más información, consulte Server Name Indication [Indicación del nombre del servidor]).
  • SSL de IP: solo se puede agregar un enlace SSL de IP. Esta opción solo permite que un único certificado TLS/SSL proteja una dirección IP pública dedicada. Tras configurar el enlace, siga los pasos descritos en Reasignación de registros para IP SSL.
    SSL de IP solo se admite en el nivel Estándar o superior.

Una vez completada la operación, el estado TLS/SSL del dominio personalizado cambia a Seguro.

Enlace TLS/SSL correcto

Nota

Un estado Seguro en Dominios personalizados significa que está protegido con un certificado, pero App Service no comprueba si el certificado es autofirmado o ha expirado, por ejemplo, lo que también puede provocar que los exploradores muestren un error o una advertencia.

Reasignación de registros para SSL de IP

Si no usa SSL de IP en la aplicación, vaya directamente a Probar HTTPS para el dominio personalizado.

Puede realizar dos cambios:

  • De manera predeterminada, la aplicación usa una dirección IP pública compartida. Cuando se enlaza un certificado con SSL de IP, App Service crea una dirección IP dedicada nueva para la aplicación. Si asignó un registro D a la aplicación, actualice el registro de dominio con esta nueva dirección IP dedicada.

    La página Dominio personalizado de la aplicación se actualiza con la nueva dirección IP dedicada. Copie esta dirección IP y luego reasigne el registro D a esta nueva dirección IP.

  • Si tiene un enlace SNI SSL para <app-name>.azurewebsites.net, reasigne la asignación CNAME para que apunte a sni.<app-name>.azurewebsites.net en su lugar (agregue el prefijo sni).

Probar HTTPS

En varios exploradores, vaya a https://<your.custom.domain> para comprobar que da servicio a la aplicación.

Captura de pantalla que muestra un ejemplo de cómo navegar hasta el dominio personalizado, con la dirección URL de contoso.com resaltada.

El código de aplicación puede inspeccionar el protocolo mediante el encabezado "x-appservice-proto". El encabezado tendrá un valor de http o https.

Nota

Si la aplicación genera errores de validación del certificado, probablemente esté utilizando un certificado autofirmado.

Si no es así, puede que haya olvidado certificados intermedios cuando exportó el certificado al archivo PFX.

Prevención de cambios de IP

La dirección IP de entrada puede cambiar al eliminar un enlace, incluso si este es un enlace SSL de IP. Esto es especialmente importante al renovar un certificado que ya está en un enlace SSL de IP. Para evitar un cambio en la dirección IP de su aplicación, siga estos pasos en orden:

  1. Carga el nuevo certificado.
  2. Enlaza el nuevo certificado al dominio personalizado que desee sin eliminar el antiguo. Esta acción reemplaza el enlace en lugar de quitar el antiguo.
  3. Elimine el antiguo certificado.

Aplicación de HTTPS

De forma predeterminada, cualquier usuario puede acceder todavía a su aplicación mediante HTTP. Puede redirigir todas las solicitudes HTTP al puerto HTTPS.

En la página de la aplicación, en el panel de navegación de la izquierda, seleccione Configuración de TLS/SSL. A continuación, en Solo HTTPS, seleccione On.

Aplicación de HTTPS

Una vez completada la operación, vaya a cualquiera de las direcciones URL HTTP que apuntan a la aplicación. Por ejemplo:

  • http://<app_name>.azurewebsites.net
  • http://contoso.com
  • http://www.contoso.com

Exigencia de las versiones TLS

La aplicación permite TLS 1.2 de forma predeterminada, que es el nivel TLS recomendado por los estándares del sector, como PCI DSS. Para exigir versiones diferentes de TLS, siga estos pasos:

En la página de la aplicación, en el panel de navegación de la izquierda, seleccione Configuración de TLS/SSL. A continuación, en TLS version (Versión de TLS), seleccione la versión mínima de TLS que desee. Esta configuración controla solo las llamadas entrantes.

Exigir aplicación de TLS 1.1 o 1.2

Una vez completada la operación, la aplicación rechaza todas las conexiones con versiones inferiores de TLS.

Administración de terminaciones TLS

En App Service, la terminación TLS tiene lugar en los equilibradores de carga de red, por lo que todas las solicitudes HTTPS llegan a la aplicación en forma de solicitudes HTTP sin cifrar. Si su aplicación lógica necesita comprobar si las solicitudes de usuario están cifradas, inspeccione el encabezado X-Forwarded-Proto.

Guías de configuración específicas del lenguaje, como la guía Configuración de Node.js en Linux, que muestra cómo detectar una sesión HTTPS en el código de la aplicación.

Renovación del enlace con certificados

Nota

Para renovar un certificado de App Service que compró, consulte Exportar un certificado (de App Service). Los certificados de App Service se pueden renovar así como el enlace se puede sincronizar, todo de forma automática.

Para reemplazar un certificado que expira, la forma de actualizar el enlace de certificado con el nuevo certificado puede afectar negativamente a la experiencia del usuario. Por ejemplo, su dirección IP de entrada puede cambiar al eliminar un enlace, incluso si este se basa en IP. Esto es especialmente importante al renovar un certificado que ya está en un enlace basado en IP. Para evitar modificaciones en la dirección IP de la aplicación y que el tiempo de inactividad de la aplicación aumente, siga estos pasos en orden:

  1. Carga el nuevo certificado.
  2. Enlace el nuevo certificado al mismo dominio personalizado sin eliminar el certificado existente (que expira). Esta acción reemplaza el enlace en lugar de quitar el que ya existe.
  3. Elimine el certificado existente.

Automatizar con scripts

Azure CLI

#!/bin/bash

fqdn=<replace-with-www.{yourdomain}>
pfxPath=<replace-with-path-to-your-.PFX-file>
pfxPassword=<replace-with-your=.PFX-password>
resourceGroup=myResourceGroup
webappname=mywebapp$RANDOM

# Create a resource group.
az group create --location westeurope --name $resourceGroup

# Create an App Service plan in Basic tier (minimum required by custom domains).
az appservice plan create --name $webappname --resource-group $resourceGroup --sku B1

# Create a web app.
az webapp create --name $webappname --resource-group $resourceGroup \
--plan $webappname

echo "Configure a CNAME record that maps $fqdn to $webappname.azurewebsites.net"
read -p "Press [Enter] key when ready ..."

# Before continuing, go to your DNS configuration UI for your custom domain and follow the 
# instructions at https://aka.ms/appservicecustomdns to configure a CNAME record for the 
# hostname "www" and point it your web app's default domain name.

# Map your prepared custom domain name to the web app.
az webapp config hostname add --webapp-name $webappname --resource-group $resourceGroup \
--hostname $fqdn

# Upload the SSL certificate and get the thumbprint.
thumbprint=$(az webapp config ssl upload --certificate-file $pfxPath \
--certificate-password $pfxPassword --name $webappname --resource-group $resourceGroup \
--query thumbprint --output tsv)

# Binds the uploaded SSL certificate to the web app.
az webapp config ssl bind --certificate-thumbprint $thumbprint --ssl-type SNI \
--name $webappname --resource-group $resourceGroup

echo "You can now browse to https://$fqdn"

PowerShell

$fqdn="<Replace with your custom domain name>"
$pfxPath="<Replace with path to your .PFX file>"
$pfxPassword="<Replace with your .PFX password>"
$webappname="mywebapp$(Get-Random)"
$location="West Europe"

# Create a resource group.
New-AzResourceGroup -Name $webappname -Location $location

# Create an App Service plan in Free tier.
New-AzAppServicePlan -Name $webappname -Location $location `
-ResourceGroupName $webappname -Tier Free

# Create a web app.
New-AzWebApp -Name $webappname -Location $location -AppServicePlan $webappname `
-ResourceGroupName $webappname

Write-Host "Configure a CNAME record that maps $fqdn to $webappname.azurewebsites.net"
Read-Host "Press [Enter] key when ready ..."

# Before continuing, go to your DNS configuration UI for your custom domain and follow the 
# instructions at https://aka.ms/appservicecustomdns to configure a CNAME record for the 
# hostname "www" and point it your web app's default domain name.

# Upgrade App Service plan to Basic tier (minimum required by custom SSL certificates)
Set-AzAppServicePlan -Name $webappname -ResourceGroupName $webappname `
-Tier Basic

# Add a custom domain name to the web app. 
Set-AzWebApp -Name $webappname -ResourceGroupName $webappname `
-HostNames @($fqdn,"$webappname.azurewebsites.net")

# Upload and bind the SSL certificate to the web app.
New-AzWebAppSSLBinding -WebAppName $webappname -ResourceGroupName $webappname -Name $fqdn `
-CertificateFilePath $pfxPath -CertificatePassword $pfxPassword -SslState SniEnabled

Más recursos