Použití certifikátu TLS nebo SSL v kódu ve službě Azure App Service

V kódu aplikace můžete přistupovat k veřejným nebo privátním certifikátům, které přidáte do služby App Service. Kód aplikace může fungovat jako klient a přistupovat k externí službě, která vyžaduje ověření certifikátu, nebo může potřebovat provádět kryptografické úlohy. Tento návod ukazuje, jak používat veřejné nebo privátní certifikáty v kódu aplikace.

Tento přístup k používání certifikátů ve vašem kódu využívá funkce TLS ve službě App Service, které vyžadují, aby vaše aplikace byla na úrovni Basic nebo vyšší. Pokud je vaše aplikace na úrovni Free nebo Shared , můžete soubor certifikátu zahrnout do úložiště aplikace.

Když službě App Service umožníte spravovat certifikáty TLS/SSL, můžete certifikáty a kód aplikace udržovat samostatně a chránit citlivá data.

Požadavky

Pokud chcete postupovat podle tohoto návodu:

Vyhledání kryptografického otisku

Na webu Azure Portal v nabídce vlevo vyberte název> aplikace App Services<>.

V levém navigačním panelu aplikace vyberte Certifikáty a pak vyberte Přineste si vlastní certifikáty (.pfx) nebo Certifikáty veřejných klíčů (.cer).

Vyhledejte certifikát, který chcete použít, a zkopírujte kryptografický otisk.

Zkopírování kryptografického otisku certifikátu

Zpřístupnění certifikátu

Pokud chcete získat přístup k certifikátu v kódu aplikace, přidejte jeho kryptografický otisk do WEBSITE_LOAD_CERTIFICATES nastavení aplikace spuštěním následujícího příkazu v Cloud Shellu:

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

Pokud chcete zpřístupnit všechny certifikáty, nastavte hodnotu na *hodnotu .

Poznámka:

Při WEBSITE_LOAD_CERTIFICATES nastavení *jsou všechny dříve přidané certifikáty přístupné pro kód aplikace. Pokud do aplikace později přidáte certifikát, restartujte aplikaci, aby byl nový certifikát přístupný pro vaši aplikaci. Další informace najdete v tématu Při aktualizaci (obnovení) certifikátu.

Načtení certifikátu v aplikacích pro Windows

Nastavení WEBSITE_LOAD_CERTIFICATES aplikace zpřístupňuje zadané certifikáty vaší aplikaci hostované ve Windows v úložišti certifikátů pro Windows v části Aktuální uživatel\My.

V kódu jazyka C# získáte přístup k certifikátu kryptografickým otiskem certifikátu. Následující kód načte certifikát s kryptografickým otiskem 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
}

V kódu Java přistupujete k certifikátu z úložiště Windows-MY pomocí pole Běžný název subjektu (viz certifikát veřejného klíče). Následující kód ukazuje, jak načíst certifikát privátního klíč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
...

Informace o jazycích, které nepodporují nebo nenabízely dostatečnou podporu úložiště certifikátů systému Windows, najdete v tématu Načtení certifikátu ze souboru.

Načtení certifikátu ze souboru

Pokud potřebujete načíst soubor certifikátu, který nahráváte ručně, je lepší certifikát nahrát pomocí FTPS místo Gitu. Citlivá data byste měli uchovávat jako soukromý certifikát mimo správu zdrojového kódu.

Poznámka:

ASP.NET a ASP.NET Core ve Windows musí přistupovat k úložišti certifikátů, i když načtete certifikát ze souboru. Pokud chcete načíst soubor certifikátu v aplikaci Windows .NET, načtěte aktuální profil uživatele pomocí následujícího příkazu v Cloud Shellu:

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

Tento přístup k používání certifikátů ve vašem kódu využívá funkce TLS ve službě App Service, které vyžadují, aby vaše aplikace byla na úrovni Basic nebo vyšší.

Následující příklad jazyka C# načte veřejný certifikát z relativní cesty v aplikaci:

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

Informace o načtení certifikátu TLS/SSL ze souboru v Node.js, PHP, Pythonu nebo Javě najdete v dokumentaci pro příslušný jazyk nebo webovou platformu.

Načtení certifikátu v kontejnerech Linuxu nebo Windows

Nastavení WEBSITE_LOAD_CERTIFICATES aplikace zpřístupňuje zadané certifikáty vašim vlastním kontejnerům Windows nebo Linuxu (včetně integrovaných kontejnerů Linuxu) jako souborů. Soubory jsou nalezeny v následujících adresářích:

Kontejnerová platforma Veřejné certifikáty Privátní certifikáty
Kontejner Windows C:\appservice\certificates\public C:\appservice\certificates\private
Kontejner Linuxu /var/ssl/certs /var/ssl/private

Názvy souborů certifikátu jsou kryptografické otisky certifikátu.

Poznámka:

Služba App Service vkládá cesty certifikátů do kontejnerů Windows jako následující proměnné WEBSITE_PRIVATE_CERTS_PATHprostředí , WEBSITE_INTERMEDIATE_CERTS_PATH, , WEBSITE_PUBLIC_CERTS_PATHa WEBSITE_ROOT_CERTS_PATH. Místo pevně zakódování cesty certifikátu je lepší odkazovat na cestu k certifikátu s proměnnými prostředí pro případ, že se cesty k certifikátu v budoucnu změní.

Kromě toho kontejnery Windows Server Core a Windows Nano Server načítají certifikáty do úložiště certifikátů automaticky v LocalMachine \My. Pokud chcete certifikáty načíst, postupujte podle stejného vzoru jako Načíst certifikát v aplikacích pro Windows. V případě kontejnerů založených na Windows Nano použijte tyto cesty k souborům, načtěte certifikát přímo ze souboru.

Následující kód jazyka C# ukazuje, jak načíst veřejný certifikát v aplikaci pro 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

Následující kód jazyka C# ukazuje, jak načíst privátní certifikát v aplikaci pro 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

Informace o načtení certifikátu TLS/SSL ze souboru v Node.js, PHP, Pythonu nebo Javě najdete v dokumentaci pro příslušný jazyk nebo webovou platformu.

Při aktualizaci (obnovení) certifikátu

Když prodloužíte certifikát a přidáte ho do aplikace, získá nový kryptografický otisk, který je také potřeba zpřístupnit. Jak to funguje, závisí na typu certifikátu.

Pokud ručně nahrajete veřejný nebo privátní certifikát:

  • Pokud vypíšete kryptografické otisky explicitně WEBSITE_LOAD_CERTIFICATES, přidejte nový kryptografický otisk do nastavení aplikace.
  • Pokud WEBSITE_LOAD_CERTIFICATES je nastavená hodnota *, restartujte aplikaci, aby byl nový certifikát přístupný.

Pokud obnovíte certifikát ve službě Key Vault, například pomocí certifikátu služby App Service, provede denní synchronizace ze služby Key Vault potřebnou aktualizaci automaticky při synchronizaci aplikace s obnoveným certifikátem.

  • Pokud WEBSITE_LOAD_CERTIFICATES obsahuje starý kryptografický otisk obnoveného certifikátu, denní synchronizace aktualizuje starý kryptografický otisk na nový kryptografický otisk automaticky.
  • Pokud WEBSITE_LOAD_CERTIFICATES je nastavená hodnota *, denní synchronizace automaticky zpřístupní nový certifikát.

Další materiály