Een TLS/SSL-certificaat gebruiken in uw code in Azure App Service

In uw toepassingscode hebt u toegang tot de openbare of persoonlijke certificaten die u aan App Service toevoegt. Uw app-code kan fungeren als een client en toegang krijgen tot een externe service waarvoor certificaatverificatie is vereist, of het kan nodig zijn om cryptografische taken uit te voeren. Deze handleiding laat zien hoe u openbare of persoonlijke certificaten in uw toepassingscode gebruikt.

Deze benadering voor het gebruik van certificaten in uw code maakt gebruik van de TLS-functionaliteit in App Service. Hiervoor moet uw app zich in de Basic-laag of hoger bevinden. Als uw app zich in de gratis of gedeelde laag bevindt, kunt u het certificaatbestand opnemen in uw app-opslagplaats.

Wanneer u App Service uw TLS/SSL-certificaten laat beheren, kunt u de certificaten en uw toepassingscode afzonderlijk onderhouden en uw gevoelige gegevens beveiligen.

Vereisten

Voor het volgen van deze instructiegids:

De vingerafdruk zoeken

Selecteer<> in azure Portal in het linkermenu app-naam.>

Selecteer certificaten in de linkernavigatiebalk van uw app en selecteer vervolgens Bring Your Own Certificates (.pfx) of Public Key Certificates (.cer).

Zoek het certificaat dat u wilt gebruiken en kopieer de vingerafdruk.

Copy the certificate thumbprint

Het certificaat toegankelijk maken

Als u toegang wilt krijgen tot een certificaat in uw app-code, voegt u de vingerafdruk toe aan de WEBSITE_LOAD_CERTIFICATES app-instelling door de volgende opdracht uit te voeren in Cloud Shell:

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

Als u al uw certificaten toegankelijk wilt maken, stelt u de waarde in op *.

Notitie

Wanneer WEBSITE_LOAD_CERTIFICATES deze is ingesteld *, zijn alle eerder toegevoegde certificaten toegankelijk voor toepassingscode. Als u later een certificaat aan uw app toevoegt, start u de app opnieuw om het nieuwe certificaat toegankelijk te maken voor uw app. Zie Bij het bijwerken (vernieuwen) van een certificaat voor meer informatie.

Certificaat laden in Windows-apps

De WEBSITE_LOAD_CERTIFICATES app-instelling maakt de opgegeven certificaten toegankelijk voor uw door Windows gehoste app in het Windows-certificaatarchief, in Current User\My.

In C#-code opent u het certificaat met de vingerafdruk van het certificaat. Met de volgende code wordt een certificaat geladen met de vingerafdruk 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
}

In Java-code opent u het certificaat vanuit het archief 'Windows-MY' met behulp van het veld Algemene naam onderwerp (zie het openbare-sleutelcertificaat). De volgende code laat zien hoe u een certificaat met een persoonlijke sleutel laadt:

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

Zie Certificaat uit bestand laden voor talen die geen ondersteuning bieden of onvoldoende ondersteuning bieden voor het Windows-certificaatarchief.

Certificaat laden uit bestand

Als u een certificaatbestand moet laden dat u handmatig uploadt, is het beter om het certificaat te uploaden met BEHULP van FTPS in plaats van Git, bijvoorbeeld. U moet gevoelige gegevens, zoals een privécertificaat, buiten broncodebeheer houden.

Notitie

ASP.NET en ASP.NET Core in Windows moeten toegang hebben tot het certificaatarchief, zelfs als u een certificaat uit een bestand laadt. Als u een certificaatbestand in een Windows .NET-app wilt laden, laadt u het huidige gebruikersprofiel met de volgende opdracht in Cloud Shell:

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

Deze benadering voor het gebruik van certificaten in uw code maakt gebruik van de TLS-functionaliteit in App Service. Hiervoor moet uw app zich in de Basic-laag of hoger bevinden.

In het volgende C#-voorbeeld wordt een openbaar certificaat uit een relatief pad in uw app geladen:

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

Als u wilt zien hoe u een TLS/SSL-certificaat laadt vanuit een bestand in Node.js, PHP, Python of Java, raadpleegt u de documentatie voor de betreffende taal of het desbetreffende webplatform.

Certificaat laden in Linux-/Windows-containers

De WEBSITE_LOAD_CERTIFICATES app-instelling maakt de opgegeven certificaten toegankelijk voor uw aangepaste Windows- of Linux-containers (inclusief ingebouwde Linux-containers) als bestanden. De bestanden vindt u in de volgende mappen:

Containerplatform Openbare certificaten Persoonlijke certificaten
Windows-container C:\appservice\certificates\public C:\appservice\certificates\private
Linux-container /var/ssl/certs /var/ssl/private

De namen van certificaatbestanden zijn de vingerafdruk van het certificaat.

Notitie

App Service injecteert de certificaatpaden in Windows-containers als de volgende omgevingsvariabelen WEBSITE_PRIVATE_CERTS_PATH, WEBSITE_INTERMEDIATE_CERTS_PATH, WEBSITE_PUBLIC_CERTS_PATHen WEBSITE_ROOT_CERTS_PATH. Het is beter om te verwijzen naar het certificaatpad met de omgevingsvariabelen in plaats van het certificaatpad hardcoding te maken, voor het geval de certificaatpaden in de toekomst veranderen.

Bovendien laden Windows Server Core-containers de certificaten automatisch in het certificaatarchief, in LocalMachine\My. Als u de certificaten wilt laden, volgt u hetzelfde patroon als Het certificaat laden in Windows-apps. Voor Windows Nano-containers gebruikt u deze bestandspaden om het certificaat rechtstreeks vanuit het bestand te laden.

De volgende C#-code laat zien hoe u een openbaar certificaat in een Linux-app laadt.

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

De volgende C#-code laat zien hoe u een privécertificaat in een Linux-app laadt.

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

Als u wilt zien hoe u een TLS/SSL-certificaat laadt vanuit een bestand in Node.js, PHP, Python of Java, raadpleegt u de documentatie voor de betreffende taal of het desbetreffende webplatform.

Bij het bijwerken (vernieuwen) van een certificaat

Wanneer u een certificaat verlengt en aan uw app toevoegt, krijgt deze een nieuwe vingerafdruk, die ook toegankelijk moet worden gemaakt. Hoe het werkt, is afhankelijk van uw certificaattype.

Als u het openbare of persoonlijke certificaat handmatig uploadt:

  • Als u de vingerafdruk expliciet in WEBSITE_LOAD_CERTIFICATESeen lijst opgeeft, voegt u de nieuwe vingerafdruk toe aan de app-instelling.
  • Als WEBSITE_LOAD_CERTIFICATES dit is ingesteld *, start u de app opnieuw om het nieuwe certificaat toegankelijk te maken.

Als u een certificaat in Key Vault verlengt, zoals met een App Service-certificaat, wordt de dagelijkse synchronisatie vanuit Key Vault automatisch bijgewerkt wanneer u uw app synchroniseert met het vernieuwde certificaat.

  • Als WEBSITE_LOAD_CERTIFICATES deze de oude vingerafdruk van uw vernieuwde certificaat bevat, wordt de oude vingerafdruk automatisch bijgewerkt met de nieuwe vingerafdruk.
  • Als WEBSITE_LOAD_CERTIFICATES dit is ingesteld *op, maakt de dagelijkse synchronisatie het nieuwe certificaat automatisch toegankelijk.

Meer resources