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 Openbare-sleutelcertificaten (.cer).
Zoek het certificaat dat u wilt gebruiken en kopieer de vingerafdruk.
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_PATH
en 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- en Windows Nano Server-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_CERTIFICATES
een 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.