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.
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_PATH
prostředí , WEBSITE_INTERMEDIATE_CERTS_PATH
, , WEBSITE_PUBLIC_CERTS_PATH
a 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.