Partager via


Utiliser des certificats TLS/SSL dans votre code d’application

Dans votre code d’application, vous pouvez accéder aux certificats publics ou privés que vous ajoutez à Azure App Service. Votre code d’application peut agir en tant que client et accéder à un service externe qui nécessite une authentification par certificat. Il peut également être nécessaire d’effectuer des tâches de chiffrement. Cet article explique comment utiliser des certificats publics ou privés dans votre code d’application.

Cette approche de l’utilisation de certificats dans votre code utilise la fonctionnalité TLS (Transport Layer Security) dans App Service, ce qui nécessite que votre application soit au niveau De base ou supérieur. Si votre application se trouve dans le niveau Gratuit ou Partagé, vous pouvez inclure le fichier de certificat dans votre référentiel d’applications.

Lorsque vous laissez App Service gérer vos certificats TLS/Secure Sockets Layer (SSL), vous pouvez conserver les certificats et le code de votre application séparément et protéger vos données sensibles.

Conditions préalables

Pour suivre cet article, consultez :

Trouver l’empreinte de pouce

  1. Dans le portail Azure, dans le volet gauche, sélectionnez App Services><app-name>.

  2. Dans le volet gauche de votre application, sélectionnez Certificats. Sélectionnez ensuite Importer vos propres certificats (.pfx) ou Certificats de clé publique (.cer).

  3. Recherchez le certificat que vous souhaitez utiliser et copiez l’empreinte numérique.

Capture d’écran montrant la copie de l’empreinte numérique du certificat.

Rendre le certificat accessible

Pour accéder à un certificat dans le code de votre application, ajoutez son empreinte numérique au paramètre de l’application WEBSITE_LOAD_CERTIFICATES . Exécutez la commande suivante dans Azure Cloud Shell :

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

Pour rendre tous vos certificats accessibles, définissez la valeur sur *.

Lorsqu’WEBSITE_LOAD_CERTIFICATES est défini sur *, tous les certificats précédemment ajoutés sont accessibles au code de l’application. Si vous ajoutez un certificat à votre application ultérieurement, redémarrez l’application pour rendre le nouveau certificat accessible à votre application. Pour plus d’informations, consultez Mettre à jour ou renouveler un certificat.

Charger des certificats dans les applications Windows

Le paramètre de l'application WEBSITE_LOAD_CERTIFICATES rend les certificats spécifiés accessibles à votre application hébergée sur Windows dans le magasin de certificats Windows, sous Utilisateur actuel\Mes.

Dans le code C#, vous accédez au certificat à l’aide de l’empreinte numérique du certificat. Le code suivant charge un certificat avec l’empreinte numérique E661583E8FABEF4C0BEF694CBC41C28FB81CD870.

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

string certThumbprint = "E661583E8FABEF4C0BEF694CBC41C28FB81CD870";
bool validOnly = false;

using (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
                              certThumbprint,
                              validOnly);
  // Get the first cert with the thumbprint
  X509Certificate2 cert = certCollection.OfType<X509Certificate2>().FirstOrDefault();

  if (cert is null)
      throw new Exception($"Certificate with thumbprint {certThumbprint} was not found");

  // Use certificate
  Console.WriteLine(cert.FriendlyName);
  
  // Consider to call Dispose() on the certificate after it's being used, available in .NET 4.6 and later
}

Dans le code Java, vous accédez au certificat à partir du Windows-MY dépôt en utilisant le champ Nom commun du sujet. Pour plus d’informations, consultez Certificat de clé publique. Le code suivant montre comment charger un certificat de clé privée :

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.PrivateKey;

...
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null); 
Certificate cert = ks.getCertificate("<subject-cn>");
PrivateKey privKey = (PrivateKey) ks.getKey("<subject-cn>", ("<password>").toCharArray());

// Use the certificate and key
...

Pour les langues qui ne prennent pas en charge ou offrent un soutien insuffisant pour le magasin de certificats Windows, consultez Charger un certificat à partir d’un fichier.

Charger un certificat à partir d’un fichier

Si vous devez charger un fichier de certificat que vous chargez manuellement, il est préférable de charger le certificat à l’aide du protocole FTPS (File Transfer Protocol Secure) au lieu de Git, par exemple. Conservez des données sensibles comme un certificat privé hors contrôle de code source.

ASP.NET et ASP.NET Core sur Windows doivent accéder au magasin de certificats même si vous chargez un certificat à partir d’un fichier. Pour charger un fichier de certificat dans une application Windows .NET, chargez le profil utilisateur actuel avec la commande suivante dans Cloud Shell :

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

Cette approche de l’utilisation de certificats dans votre code utilise la fonctionnalité TLS dans App Service, ce qui nécessite que votre application soit au niveau De base ou supérieur.

L’exemple C# suivant charge un certificat public à partir d’un chemin relatif dans votre application :

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

...
var bytes = File.ReadAllBytes("~/<relative-path-to-cert-file>");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Pour savoir comment charger un certificat TLS/SSL à partir d’un fichier dans Node.js, PHP, Python ou Java, consultez la documentation relative au langage ou à la plateforme web respectifs.

Charger des certificats dans des conteneurs Linux/Windows

Le WEBSITE_LOAD_CERTIFICATES paramètre d’application rend les certificats spécifiés accessibles à vos conteneurs personnalisés Windows ou Linux (y compris les conteneurs Linux intégrés) en tant que fichiers. Les fichiers se trouvent sous les répertoires suivants :

Plateforme de conteneurs Certificats publics Certificats privés
Conteneur Windows C:\appservice\certificates\public C:\appservice\certificates\private
Conteneur Linux /var/ssl/certs /var/ssl/private

Les noms de fichiers de certificat sont les empreintes numériques du certificat.

Remarque

App Service injecte les chemins de certificat dans les conteneurs Windows en tant que variables d’environnement suivantes : WEBSITE_PRIVATE_CERTS_PATH, , WEBSITE_INTERMEDIATE_CERTS_PATHWEBSITE_PUBLIC_CERTS_PATHet WEBSITE_ROOT_CERTS_PATH. Il est préférable de référencer le chemin du certificat avec les variables d’environnement au lieu de coder en dur le chemin du certificat, au cas où les chemins de certificat changent à l’avenir.

En outre, les conteneurs Windows Server Core et Windows Nano Server chargent automatiquement les certificats dans le magasin de certificats, dans LocalMachine\My. Pour charger les certificats, suivez le même modèle que celui indiqué dans Charger des certificats dans les applications Windows. Pour les conteneurs Windows Nano, utilisez les chemins d’accès aux fichiers, comme indiqué dans Charger un certificat à partir d’un fichier.

Le code C# suivant montre comment charger un certificat public dans une application Linux.

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

...
var bytes = File.ReadAllBytes("/var/ssl/certs/<thumbprint>.der");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Le code C# suivant montre comment charger un certificat privé dans une application Linux.

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
...
var bytes = File.ReadAllBytes("/var/ssl/private/<thumbprint>.p12");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Pour savoir comment charger un certificat TLS/SSL à partir d’un fichier dans Node.js, PHP, Python ou Java, consultez la documentation relative au langage ou à la plateforme web respectifs.

Mettre à jour ou renouveler un certificat

Lorsque vous renouvelez un certificat et que vous l’ajoutez à votre application, il obtient une nouvelle empreinte numérique, qui doit également être rendue accessible. Le fonctionnement dépend de votre type de certificat.

Si vous chargez manuellement le certificat public ou privé :

  • Si vous listez explicitement les empreintes dans WEBSITE_LOAD_CERTIFICATES, ajoutez la nouvelle empreinte au paramètre d’application.
  • Si WEBSITE_LOAD_CERTIFICATES est défini sur *, redémarrez l'application pour rendre le nouveau certificat accessible.

Si vous renouvelez un certificat dans Azure Key Vault, par exemple avec un certificat App Service, la synchronisation quotidienne à partir de Key Vault rend la mise à jour nécessaire automatiquement lorsque votre application se synchronise avec le certificat renouvelé.

  • Si WEBSITE_LOAD_CERTIFICATES contient l'ancienne empreinte de votre certificat renouvelé, la synchronisation quotidienne met automatiquement à jour l'ancienne empreinte vers la nouvelle.
  • Si WEBSITE_LOAD_CERTIFICATES est défini sur *, la synchronisation quotidienne rend le nouveau certificat accessible automatiquement.