Uso de un certificado SSL en el código de aplicación de Azure App ServiceUse an SSL certificate in your application code in Azure App Service

Esta guía muestra cómo utilizar certificados públicos o privados en el código de aplicación.This how-to guide shows how to use public or private certificates in your application code. Un ejemplo de caso de uso se produce cuando la aplicación accede a un servicio externo que requiere la autenticación de certificados.An example of the use case is that your app accesses an external service that requires certificate authentication.

Este enfoque para el uso de certificados en el código usa la funcionalidad SSL de App Service, que requiere que la aplicación tenga el nivel Básico u otro superior.This approach to using certificates in your code makes use of the SSL functionality in App Service, which requires your app to be in Basic tier or above. Como alternativa, puede incluir el archivo de certificado en el repositorio de aplicación, pero no es un procedimiento recomendado para los certificados privados.Alternatively, you can include the certificate file in your app repository, but it's not a recommended practice for private certificates.

Cuando permite que App Service administre los certificados SSL, puede mantener por separado los certificados y el código de la aplicación y proteger así la información confidencial.When you let App Service manage your SSL certificates, you can maintain the certificates and your application code separately and safeguard your sensitive data.

Carga de un certificado privadoUpload a private certificate

Antes de cargar un certificado privado, asegúrese de que cumple todos los requisitos, salvo que no necesita ser configurado para la autenticación de servidor.Before uploading a private certificate, make sure it satisfies all the requirements, except that it doesn't need to be configured for Server Authentication.

Cuando esté preparado para la carga, ejecute el siguiente comando en Cloud Shell.When you're ready to upload, run the following command in the Cloud Shell.

az webapp config ssl upload --name <app-name> --resource-group <resource-group-name> --certificate-file <path-to-PFX-file> --certificate-password <PFX-password> --query thumbprint

Copie la huella digital del certificado y consulte Que el certificado sea accesible.Copy the certificate thumbprint and see Make the certificate accessible.

Carga de un certificado públicoUpload a public certificate

Se admiten certificados públicos en el formato .cer.Public certificates are supported in the .cer format. Para cargar un certificado público, vaya a Azure Portal y, después, a la aplicación.To upload a public certificate, the Azure portal, and navigate to your app.

Haga clic en Configuración SSL > Certificados públicos (.cer) > Cargar certificado público desde el panel de navegación izquierdo de la aplicación.Click SSL settings > Public Certificates (.cer) > Upload Public Certificate from the left navigation of your app.

En Nombre, escriba un nombre para el certificado.In Name, type a name for the certificate. En Archivo de certificado CER, seleccione el archivo CER.In CER Certificate file, select your CER file.

Haga clic en Cargar.Click Upload.

Carga de un certificado público

Una vez que el certificado se cargue, copie la huella digital del certificado y consulte Que el certificado sea accesible.Once the certificate is uploaded, copy the certificate thumbprint and see Make the certificate accessible.

Importación de un certificado de App ServiceImport an App Service certificate

Consulte Compra y configuración de un certificado SSL para Azure App Service.See Buy and configure an SSL certificate for Azure App Service.

Una vez que el certificado se importe, copie la huella digital del certificado y consulte Que el certificado sea accesible.Once the certificate is imported, copy the certificate thumbprint and see Make the certificate accessible.

Que el certificado sea accesibleMake the certificate accessible

Para usar un certificado cargado o importado en el código de aplicación, haga que su huella digital sea accesible con la opción de la aplicación WEBSITE_LOAD_CERTIFICATES; para ello, ejecute el comando siguiente en Cloud Shell:To use an uploaded or imported certificate in your app code, make its thumbprint accessible with the WEBSITE_LOAD_CERTIFICATES app setting, by running the following command in the Cloud Shell:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>

Para que todos los certificados sean accesibles, establezca el valor en *.To make all your certificates accessible, set the value to *.

Nota

Esta configuración coloca los certificados especificados en el almacén Current User\My para la mayoría de los niveles de precios, pero en el nivel aislado (es decir, la aplicación se ejecuta en un entorno App Service Environment) y coloca los certificados en el almacén Local Machine\My.This setting places the specified certificates in the Current User\My store for most pricing tiers, but in the Isolated tier (i.e. app runs in an App Service Environment), it places the certificates in the Local Machine\My store.

Configurar las opciones de la aplicación

Cuando termine, haga clic en Guardar.When finished, click Save.

Ahora, ya puede usar en su código los certificados configurados.The configured certificates are now ready to be used by your code.

Carga del certificado en el códigoLoad the certificate in code

Una vez que el certificado es accesible, puede acceder a él con código C# mediante la huella digital del certificado.Once your certificate is accessible, you access it in C# code by the certificate thumbprint. El código siguiente carga un certificado con la huella digital E661583E8FABEF4C0BEF694CBC41C28FB81CD870.The following code loads a certificate with the thumbprint E661583E8FABEF4C0BEF694CBC41C28FB81CD870.

using System;
using System.Security.Cryptography.X509Certificates;

...
X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = certStore.Certificates.Find(
                            X509FindType.FindByThumbprint,
                            // Replace below with your certificate's thumbprint
                            "E661583E8FABEF4C0BEF694CBC41C28FB81CD870",
                            false);
// Get the first cert with the thumbprint
if (certCollection.Count > 0)
{
    X509Certificate2 cert = certCollection[0];
    // Use certificate
    Console.WriteLine(cert.FriendlyName);
}
certStore.Close();
...

Carga del certificado desde el archivoLoad certificate from file

Si tiene que cargar un archivo de certificado desde el directorio de la aplicación, es mejor cargarlo mediante FTPS en lugar de Git, por ejemplo.If you need to load a certificate file from your application directory, it's better to upload it using FTPS instead of Git, for example. Debe mantener los datos confidenciales, como un certificado privado, fuera del control del código fuente.You should keep sensitive data like a private certificate out of source control.

Aunque el archivo se cargue directamente en el código. NET, la biblioteca sigue comprobando si el perfil de usuario actual se carga.Even though you're loading the file directly in your .NET code, the library still verifies if the current user profile is loaded. Para cargar el perfil de usuario actual, establezca la configuración de la aplicación WEBSITE_LOAD_USER_PROFILE con el siguiente comando en Cloud Shell.To load the current user profile, set the WEBSITE_LOAD_USER_PROFILE app setting with the following command in the Cloud Shell.

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1

Una vez se establece esta opción, el ejemplo de C# siguiente carga un certificado denominado mycert.pfx desde el directorio certs del repositorio de la aplicación.Once this setting is set, the following C# example loads a certificate called mycert.pfx from the certs directory of your app's repository.

using System;
using System.Security.Cryptography.X509Certificates;

...
// Replace the parameter with "~/<relative-path-to-cert-file>".
string certPath = Server.MapPath("~/certs/mycert.pfx");

X509Certificate2 cert = GetCertificate(certPath, signatureBlob.Thumbprint);
...