Använda ett TLS-/SSL-certifikat i koden i Azure App Service
I programkoden kan du komma åt de offentliga eller privata certifikat som du lägger till i App Service. Din appkod kan fungera som en klient och komma åt en extern tjänst som kräver certifikatautentisering, eller så kan den behöva utföra kryptografiska uppgifter. Den här instruktionsguiden visar hur du använder offentliga eller privata certifikat i programkoden.
Den här metoden för att använda certifikat i koden använder TLS-funktionerna i App Service, vilket kräver att din app är på Basic-nivå eller högre. Om din app är på den kostnadsfria eller delade nivån kan du inkludera certifikatfilen i din applagringsplats.
När du låter App Service hantera dina TLS/SSL-certifikat kan du underhålla certifikaten och programkoden separat och skydda känsliga data.
Förutsättningar
Så här följer du den här guiden:
Hitta tumavtrycket
I Azure-portalen går du till den vänstra menyn och väljer App Services-appnamn>><.
I det vänstra navigeringsfältet i appen väljer du Certifikat och sedan Ta med egna certifikat (.pfx) eller Offentliga nyckelcertifikat (.cer).
Leta reda på det certifikat som du vill använda och kopiera tumavtrycket.
Gör certifikatet tillgängligt
Om du vill komma åt ett certifikat i din appkod lägger du till tumavtrycket i appinställningen WEBSITE_LOAD_CERTIFICATES
genom att köra följande kommando i Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>
Om du vill göra alla certifikat tillgängliga anger du värdet till *
.
Kommentar
När WEBSITE_LOAD_CERTIFICATES
har angetts *
är alla tidigare tillagda certifikat tillgängliga för programkod. Om du lägger till ett certifikat i appen senare startar du om appen för att göra det nya certifikatet tillgängligt för din app. Mer information finns i När du uppdaterar (förnyar) ett certifikat.
Läs in certifikat i Windows-appar
Appinställningen WEBSITE_LOAD_CERTIFICATES
gör de angivna certifikaten tillgängliga för din Windows-värdbaserade app i Windows-certifikatarkivet i Aktuell användare\Min.
I C#-kod får du åtkomst till certifikatet med certifikatets tumavtryck. Följande kod läser in ett certifikat med tumavtrycket 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
}
I Java-kod får du åtkomst till certifikatet från arkivet "Windows-MY" med hjälp av fältet Ämnesnamn (se Certifikat för offentlig nyckel). Följande kod visar hur du läser in ett certifikat för privat nyckel:
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
...
Språk som inte stöder eller inte har otillräckligt stöd för Windows-certifikatarkivet finns i Läsa in certifikat från fil.
Läsa in certifikat från fil
Om du behöver läsa in en certifikatfil som du laddar upp manuellt är det bättre att ladda upp certifikatet med FTPS i stället för Git, till exempel. Du bör hålla känsliga data som ett privat certifikat utom källkontroll.
Kommentar
ASP.NET och ASP.NET Core i Windows måste komma åt certifikatarkivet även om du läser in ett certifikat från en fil. Om du vill läsa in en certifikatfil i en Windows .NET-app läser du in den aktuella användarprofilen med följande kommando i Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1
Den här metoden för att använda certifikat i koden använder TLS-funktionerna i App Service, vilket kräver att din app är på Basic-nivå eller högre.
I följande C#-exempel läses ett offentligt certifikat in från en relativ sökväg i din app:
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
Information om hur du läser in ett TLS/SSL-certifikat från en fil i Node.js, PHP, Python eller Java finns i dokumentationen för respektive språk eller webbplattform.
Läs in certifikat i Linux-/Windows-containrar
Appinställningen WEBSITE_LOAD_CERTIFICATES
gör de angivna certifikaten tillgängliga för dina anpassade Windows- eller Linux-containrar (inklusive inbyggda Linux-containrar) som filer. Filerna finns under följande kataloger:
Containerplattform | Offentliga certifikat | Privata certifikat |
---|---|---|
Windows-container | C:\appservice\certificates\public |
C:\appservice\certificates\private |
Linux-container | /var/ssl/certs |
/var/ssl/private |
Certifikatfilens namn är certifikatets tumavtryck.
Kommentar
App Service matar in certifikatsökvägarna i Windows-containrar som följande miljövariabler WEBSITE_PRIVATE_CERTS_PATH
, WEBSITE_INTERMEDIATE_CERTS_PATH
, WEBSITE_PUBLIC_CERTS_PATH
och WEBSITE_ROOT_CERTS_PATH
. Det är bättre att referera till certifikatsökvägen med miljövariablerna i stället för att hårdkoda certifikatsökvägen, om certifikatsökvägarna ändras i framtiden.
Dessutom läser Windows Server Core- och Windows Nano Server-containrar in certifikaten automatiskt i certifikatarkivet i LocalMachine\My. Om du vill läsa in certifikaten följer du samma mönster som Läs in certifikat i Windows-appar. För Windows Nano-baserade containrar använder du dessa filsökvägar Läs in certifikatet direkt från filen.
Följande C#-kod visar hur du läser in ett offentligt certifikat i en Linux-app.
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
Följande C#-kod visar hur du läser in ett privat certifikat i en Linux-app.
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
Information om hur du läser in ett TLS/SSL-certifikat från en fil i Node.js, PHP, Python eller Java finns i dokumentationen för respektive språk eller webbplattform.
När du uppdaterar (förnyar) ett certifikat
När du förnyar ett certifikat och lägger till det i din app får det ett nytt tumavtryck som också måste göras tillgängligt. Hur det fungerar beror på din certifikattyp.
Om du laddar upp det offentliga eller privata certifikatet manuellt:
- Om du listar tumavtryck explicit i
WEBSITE_LOAD_CERTIFICATES
lägger du till det nya tumavtrycket i appinställningen. - Om
WEBSITE_LOAD_CERTIFICATES
är inställt på*
startar du om appen för att göra det nya certifikatet tillgängligt.
Om du förnyar ett certifikat i Key Vault, till exempel med ett App Service-certifikat, gör den dagliga synkroniseringen från Key Vault den nödvändiga uppdateringen automatiskt när du synkroniserar appen med det förnyade certifikatet.
- Om
WEBSITE_LOAD_CERTIFICATES
innehåller det gamla tumavtrycket för det förnyade certifikatet uppdaterar den dagliga synkroniseringen det gamla tumavtrycket till det nya tumavtrycket automatiskt. - Om
WEBSITE_LOAD_CERTIFICATES
är inställt på*
gör den dagliga synkroniseringen det nya certifikatet automatiskt tillgängligt.