Dela via


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.

Kopiera certifikatets tumavtryck

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_PATHoch 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_CERTIFICATESlä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.

Fler resurser