Protección de un nombre DNS personalizado con un enlace TLS/SSL en Azure App ServiceSecure a custom DNS name with a TLS/SSL binding in 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.This article shows you how to secure the custom domain in your App Service app or function app by creating a certificate binding. 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).When you're finished, you can access your App Service app at the https:// endpoint for your custom DNS name (for example, 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:Securing a custom domain with a certificate involves two steps:

En este tutorial, aprenderá a:In this tutorial, you learn how to:

  • Actualizar el plan de tarifa de la aplicaciónUpgrade your app's pricing tier
  • Proteger un dominio personalizado con un certificadoSecure a custom domain with a certificate
  • Aplicación de HTTPSEnforce HTTPS
  • Aplicación de TLS 1.1 y 1.2Enforce TLS 1.1/1.2
  • Automatización de la administración de TLS con scriptsAutomate TLS management with scripts

PrerrequisitosPrerequisites

Para completar esta guía paso a paso, debe:To follow this how-to guide:

Nota

La forma más fácil de agregar un certificado privado es crear un certificado administrado de App Service gratuito (versión preliminar).The easiest way to add a private certificate is to create a free App Service Managed Certificate (Preview).

Preparar la aplicación webPrepare your web app

Para crear enlaces de seguridad personalizados o habilitar certificados de cliente para la aplicación ggApp Service, el plan de App Service debe ser de nivel Básico, Estándar, Premium o Aislado.To create custom security bindings or enable client certificates for your App Service app, your App Service plan must be in the Basic, Standard, Premium, or Isolated tier. En este paso, asegúrese de que la aplicación web se encuentra en el plan de tarifa compatible.In this step, you make sure that your web app is in the supported pricing tier.

Inicio de sesión en AzureSign in to Azure

Abra Azure Portal.Open the Azure portal.

Busque y seleccione App Services.Search for and select App Services.

Selección de App Services

En la página App Services, seleccione el nombre de la aplicación web.On the App Services page, select the name of your web app.

Navegación en el portal a la aplicación de Azure

Ha llegado a la página de administración de la aplicación web.You have landed on the management page of your web app.

Comprobar el plan de tarifaCheck the pricing tier

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) .In the left-hand navigation of your web app page, scroll to the Settings section and select Scale up (App Service plan).

Menú Escalar verticalmente

Asegúrese de que la aplicación web no está en el nivel F1 ni D1.Check to make sure that your web app is not in the F1 or D1 tier. El nivel actual de la aplicación web aparece resaltado con un cuadro azul oscuro.Your web app's current tier is highlighted by a dark blue box.

Comprobar plan de tarifa

El SSL personalizado no es compatible con los niveles F1 y D1.Custom SSL is not supported in the F1 or D1 tier. Si tiene que escalar verticalmente, siga los pasos de la sección siguiente.If you need to scale up, follow the steps in the next section. 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).Otherwise, close the Scale up page and skip the Scale up your App Service plan section.

Escalar verticalmente el plan de App ServiceScale up your App Service plan

Seleccione cualquiera de los niveles no gratuitos (B1, B2, B3, o cualquier nivel de la categoría Producción).Select any of the non-free tiers (B1, B2, B3, or any tier in the Production category). Para ver opciones adicionales, haga clic en Ver opciones adicionales.For additional options, click See additional options.

Haga clic en Aplicar.Click Apply.

Elegir plan de tarifa

Cuando vea la siguiente notificación, significará que la operación de escalado se habrá completado.When you see the following notification, the scale operation is complete.

Notificación de escalado vertical

Protección de un dominio personalizadoSecure a custom domain

Siga estos pasos:Do the following steps:

En Azure Portal, en el menú de la izquierda, seleccione App Services > <nombre-de-aplicación> .In the Azure portal, from the left menu, select 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:From the left navigation of your app, start the TLS/SSL Binding dialog by:

  • Seleccione Dominios personalizados > Agregar enlaceSelecting Custom domains > Add binding
  • Seleccione Configuración de TLS/SSL > Agregar enlace TLS/SSLSelecting TLS/SSL settings > Add TLS/SSL binding

Agregar enlace a un dominio

En Dominio personalizado, seleccione el dominio personalizado para el que desea agregar un enlace.In Custom Domain, select the custom domain you want to add a binding for.

Si la aplicación ya tiene un certificado para el dominio personalizado seleccionado, vaya directamente a Crear enlace.If your app already has a certificate for the selected custom domain, go to Create binding directly. De lo contrario, continúe.Otherwise, keep going.

Adición de un certificado para el dominio personalizadoAdd a certificate for custom domain

Si la aplicación no tiene ningún certificado para el dominio personalizado seleccionado, tiene dos opciones:If your app has no certificate for the selected custom domain, then you have two options:

Nota

También puede crear un certificado gratuito (versión preliminar) o importar un certificado de Key Vault, pero debe hacerlo por separado y después volver al cuadro de diálogo Enlace TLS/SSL.You can also Create a free certificate (Preview) or Import a Key Vault certificate, but you must do it separately and then return to the TLS/SSL Binding dialog.

Creación del enlaceCreate binding

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.Use the following table to help you configure the TLS binding in the TLS/SSL Binding dialog, then click Add Binding.

ConfiguraciónSetting DescripciónDescription
Dominio personalizadoCustom domain Nombre de dominio para el que se agrega el enlace TLS/SSL.The domain name to add the TLS/SSL binding for.
Huella digital de certificado privadoPrivate Certificate Thumbprint El certificado a enlazar.The certificate to bind.
Tipo de TLS/SSLTLS/SSL Type
  • SSL SNI : se pueden agregar varios enlaces SSL SNI.SNI SSL - Multiple SNI SSL bindings may be added. Esta opción permite que varios certificados TLS/SSL protejan diferentes dominios de una misma dirección IP.This option allows multiple TLS/SSL certificates to secure multiple domains on the same IP address. 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]).Most modern browsers (including Internet Explorer, Chrome, Firefox, and Opera) support SNI (for more information, see Server Name Indication).
  • SSL de IP: solo se puede agregar un enlace SSL de IP.IP SSL - Only one IP SSL binding may be added. Esta opción solo permite que un único certificado TLS/SSL proteja una dirección IP pública dedicada.This option allows only one TLS/SSL certificate to secure a dedicated public IP address. Tras configurar el enlace, siga los pasos descritos en Reasignación de registros para IP SSL.After you configure the binding, follow the steps in Remap records for IP SSL.
    SSL de IP solo se admite en el nivel Estándar o superior.IP SSL is supported only in Standard tier or above.

Una vez completada la operación, el estado TLS/SSL del dominio personalizado cambia a Seguro.Once the operation is complete, the custom domain's TLS/SSL state is changed to Secure.

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.A Secure state in the Custom domains means that it is secured with a certificate, but App Service doesn't check if the certificate is self-signed or expired, for example, which can also cause browsers to show an error or warning.

Reasignación de registros para SSL de IPRemap records for IP SSL

Si no usa SSL de IP en la aplicación, vaya directamente a Probar HTTPS para el dominio personalizado.If you don't use IP SSL in your app, skip to Test HTTPS for your custom domain.

Puede realizar dos cambios:There are two changes you need to make, potentially:

  • De manera predeterminada, la aplicación usa una dirección IP pública compartida.By default, your app uses a shared public IP address. Cuando se enlaza un certificado con SSL de IP, App Service crea una dirección IP dedicada nueva para la aplicación.When you bind a certificate with IP SSL, App Service creates a new, dedicated IP address for your app. Si asignó un registro D a la aplicación, actualice el registro de dominio con esta nueva dirección IP dedicada.If you mapped an A record to your app, update your domain registry with this new, dedicated IP address.

    La página Dominio personalizado de la aplicación se actualiza con la nueva dirección IP dedicada.Your app's Custom domain page is updated with the new, dedicated IP address. Copie esta dirección IP y luego reasigne el registro D a esta nueva dirección IP.Copy this IP address, then remap the A record to this new IP address.

  • 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).If you have an SNI SSL binding to <app-name>.azurewebsites.net, remap any CNAME mapping to point to sni.<app-name>.azurewebsites.net instead (add the sni prefix).

Probar HTTPSTest HTTPS

En varios exploradores, vaya a https://<your.custom.domain> para comprobar que da servicio a la aplicación.In various browsers, browse to https://<your.custom.domain> to verify that it serves up your app.

Navegación en el portal a la aplicación de Azure

El código de aplicación puede inspeccionar el protocolo mediante el encabezado "x-appservice-proto".Your application code can inspect the protocol via the "x-appservice-proto" header. El encabezado tendrá un valor de http o https.The header will have a value of http or https.

Nota

Si la aplicación genera errores de validación del certificado, probablemente esté utilizando un certificado autofirmado.If your app gives you certificate validation errors, you're probably using a self-signed certificate.

Si no es así, puede que haya olvidado certificados intermedios cuando exportó el certificado al archivo PFX.If that's not the case, you may have left out intermediate certificates when you export your certificate to the PFX file.

Prevención de cambios de IPPrevent IP changes

La dirección IP de entrada puede cambiar al eliminar un enlace, incluso si este es un enlace SSL de IP.Your inbound IP address can change when you delete a binding, even if that binding is IP SSL. Esto es especialmente importante al renovar un certificado que ya está en un enlace SSL de IP.This is especially important when you renew a certificate that's already in an IP SSL binding. Para evitar un cambio en la dirección IP de su aplicación, siga estos pasos en orden:To avoid a change in your app's IP address, follow these steps in order:

  1. Carga el nuevo certificado.Upload the new certificate.
  2. Enlaza el nuevo certificado al dominio personalizado que desee sin eliminar el antiguo.Bind the new certificate to the custom domain you want without deleting the old one. Esta acción reemplaza el enlace en lugar de quitar el antiguo.This action replaces the binding instead of removing the old one.
  3. Elimine el antiguo certificado.Delete the old certificate.

Aplicación de HTTPSEnforce HTTPS

De forma predeterminada, cualquier usuario puede acceder todavía a su aplicación mediante HTTP.By default, anyone can still access your app using HTTP. Puede redirigir todas las solicitudes HTTP al puerto HTTPS.You can redirect all HTTP requests to the HTTPS port.

En la página de la aplicación, en el panel de navegación izquierdo, seleccione Configuración de SSL.In your app page, in the left navigation, select SSL settings. A continuación, en Solo HTTPS, seleccione On.Then, in HTTPS Only, select 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.When the operation is complete, navigate to any of the HTTP URLs that point to your app. Por ejemplo:For example:

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

Exigencia de las versiones TLSEnforce TLS versions

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.Your app allows TLS 1.2 by default, which is the recommended TLS level by industry standards, such as PCI DSS. Para exigir versiones diferentes de TLS, siga estos pasos:To enforce different TLS versions, follow these steps:

En la página de la aplicación, en el panel de navegación izquierdo, seleccione Configuración de SSL.In your app page, in the left navigation, select SSL settings. A continuación, en TLS version (Versión de TLS), seleccione la versión mínima de TLS que desee.Then, in TLS version, select the minimum TLS version you want. Esta configuración controla solo las llamadas entrantes.This setting controls the inbound calls only.

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.When the operation is complete, your app rejects all connections with lower TLS versions.

Administración de terminaciones TLSHandle TLS termination

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.In App Service, TLS termination happens at the network load balancers, so all HTTPS requests reach your app as unencrypted HTTP requests. Si su aplicación lógica necesita comprobar si las solicitudes de usuario están cifradas, inspeccione el encabezado X-Forwarded-Proto.If your app logic needs to check if the user requests are encrypted or not, inspect the X-Forwarded-Proto header.

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.Language specific configuration guides, such as the Linux Node.js configuration guide, shows you how to detect an HTTPS session in your application code.

Automatizar con scriptsAutomate with scripts

Azure CLIAzure 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"

PowerShellPowerShell

$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 recursosMore resources