Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W kodzie aplikacji możesz uzyskać dostęp do certyfikatów publicznych lub prywatnych dodanych do usługi Azure App Service. Kod aplikacji może działać jako klient i uzyskiwać dostęp do usługi zewnętrznej, która wymaga uwierzytelniania certyfikatu. Może być również konieczne wykonanie zadań kryptograficznych. W tym artykule pokazano, jak używać certyfikatów publicznych lub prywatnych w kodzie aplikacji.
Takie podejście do używania certyfikatów w kodzie korzysta z funkcji Transport Layer Security (TLS) w usłudze App Service, która wymaga, aby aplikacja znajdowała się w warstwie Podstawowa lub nowsza. Jeśli aplikacja znajduje się w warstwie Bezpłatna lub Współdzielona, możesz dołączyć plik certyfikatu do repozytorium aplikacji.
Gdy zezwolisz usłudze App Service na zarządzanie certyfikatami TLS/Secure Sockets Layer (SSL), możesz obsługiwać certyfikaty i kod aplikacji oddzielnie oraz chronić poufne dane.
Wymagania wstępne
Aby śledzić ten artykuł, zobacz:
Znajdowanie odcisku palca
W portalu Azure w okienku po lewej stronie wybierz App Services><nazwa-aplikacji>.
W lewym okienku aplikacji wybierz pozycję Certyfikaty. Następnie wybierz pozycję Bring your own certificates (pfx) lub Public key certificates (.cer).
Znajdź certyfikat, którego chcesz użyć, i skopiuj odcisk palca.
Udostępnianie certyfikatu
Aby uzyskać dostęp do certyfikatu w kodzie aplikacji, dodaj jego odcisk palca do WEBSITE_LOAD_CERTIFICATES
ustawienia aplikacji. Uruchom następujące polecenie w usłudze Azure Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>
Aby udostępnić wszystkie certyfikaty, ustaw wartość na *
.
Gdy WEBSITE_LOAD_CERTIFICATES
jest ustawiony na *
, wszystkie wcześniej dodane certyfikaty są dostępne w kodzie aplikacji. Jeśli później dodasz certyfikat do aplikacji, uruchom ponownie aplikację, aby nowy certyfikat był dostępny dla aplikacji. Aby uzyskać więcej informacji, zobacz Aktualizowanie lub odnawianie certyfikatu.
Ładowanie certyfikatów w aplikacjach systemu Windows
Ustawienie WEBSITE_LOAD_CERTIFICATES
aplikacji umożliwia dostęp do określonych certyfikatów dla aplikacji hostowanej na platformie Windows, w magazynie certyfikatów systemu Windows, w sekcji Bieżący Użytkownik\Mój.
W kodzie języka C# uzyskujesz dostęp do certyfikatu przy użyciu odcisku palca certyfikatu. Poniższy kod ładuje certyfikat z odciskiem E661583E8FABEF4C0BEF694CBC41C28FB81CD870
palca .
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
}
W kodzie Java uzyskujesz dostęp do certyfikatu z Windows-MY
magazynu, korzystając z pola Ogólna nazwa podmiotu. Aby uzyskać więcej informacji, zobacz Certyfikat klucza publicznego. Poniższy kod pokazuje, jak załadować certyfikat klucza prywatnego:
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
...
W przypadku języków, które nie obsługują magazynu certyfikatów systemu Windows lub oferują niewystarczającą obsługę, zobacz Ładowanie certyfikatu z pliku.
Ładowanie certyfikatu z pliku
Jeśli musisz załadować ręcznie przekazany plik certyfikatu, lepiej jest przekazać certyfikat przy użyciu protokołu Secure (FTPS) zamiast usługi Git. Zachowaj poufne dane, takie jak prywatny certyfikat, poza kontrolą źródła.
ASP.NET i ASP.NET Core w systemie Windows muszą uzyskiwać dostęp do magazynu certyfikatów, nawet jeśli załadujesz certyfikat z pliku. Aby załadować plik certyfikatu w aplikacji .NET systemu Windows, załaduj bieżący profil użytkownika za pomocą następującego polecenia w usłudze Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1
Takie podejście do używania certyfikatów w kodzie korzysta z funkcji TLS w usłudze App Service, która wymaga, aby aplikacja znajdowała się w warstwie Podstawowa lub wyższej.
Poniższy przykład w języku C# ładuje publiczny certyfikat ze względnej ścieżki w Twojej aplikacji.
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
Aby zobaczyć, jak załadować certyfikat TLS/SSL z pliku w Node.js, PHP, Python lub Java, zobacz dokumentację odpowiedniego języka lub platformy internetowej.
Ładowanie certyfikatów w kontenerach systemu Linux/Windows
Ustawienie WEBSITE_LOAD_CERTIFICATES
aplikacji sprawia, że określone certyfikaty są dostępne dla kontenerów niestandardowych systemu Windows lub Linux (w tym wbudowanych kontenerów systemu Linux) jako plików. Pliki znajdują się w następujących katalogach:
Platforma kontenerów | Certyfikaty publiczne | Certyfikaty prywatne |
---|---|---|
Kontener systemu Windows | C:\appservice\certificates\public |
C:\appservice\certificates\private |
Kontener systemu Linux | /var/ssl/certs |
/var/ssl/private |
Nazwy plików certyfikatów to odciski palca certyfikatu.
Uwaga
Usługa App Service wprowadza ścieżki certyfikatów do kontenerów systemu Windows jako następujące zmienne środowiskowe: WEBSITE_PRIVATE_CERTS_PATH
, , WEBSITE_INTERMEDIATE_CERTS_PATH
WEBSITE_PUBLIC_CERTS_PATH
i WEBSITE_ROOT_CERTS_PATH
. Lepiej jest odwoływać się do ścieżki certyfikatu za pomocą zmiennych środowiskowych, zamiast zakodować na stałe ścieżkę certyfikatu, na wypadek gdyby w przyszłości ścieżki certyfikatów się zmieniły.
Ponadto kontenery Windows Server Core i Windows Nano Server automatycznie ładują certyfikaty do magazynu certyfikatów, w LocalMachine\My
. Aby załadować certyfikaty, postępuj zgodnie z tym samym wzorcem, jak pokazano w temacie Ładowanie certyfikatów w aplikacjach systemu Windows. W przypadku kontenerów opartych na systemie Windows Nano użyj ścieżek plików, jak pokazano w temacie Ładowanie certyfikatu z pliku.
Poniższy kod w języku C# pokazuje, jak załadować certyfikat publiczny w aplikacji systemu 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
Poniższy kod w języku C# pokazuje, jak załadować certyfikat prywatny w aplikacji systemu 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
Aby zobaczyć, jak załadować certyfikat TLS/SSL z pliku w Node.js, PHP, Python lub Java, zobacz dokumentację odpowiedniego języka lub platformy internetowej.
Aktualizowanie lub odnawianie certyfikatu
Po odnowieniu certyfikatu i dodaniu go do aplikacji zostanie wyświetlony nowy odcisk palca, który również musi być dostępny. Sposób jego działania zależy od typu certyfikatu.
Jeśli ręcznie przekażesz certyfikat publiczny lub prywatny :
- Jeśli jawnie wyświetlisz odciski palca w programie
WEBSITE_LOAD_CERTIFICATES
, dodaj nowy odcisk palca do ustawienia aplikacji. - Jeśli
WEBSITE_LOAD_CERTIFICATES
ustawiono wartość*
, uruchom ponownie aplikację, aby udostępnić nowy certyfikat.
W przypadku odnowienia certyfikatu w usłudze Azure Key Vault, takiego jak certyfikat usługi App Service, codzienna synchronizacja z usługi Key Vault powoduje automatyczne zaktualizowanie niezbędnej aktualizacji, gdy aplikacja synchronizuje się z odnowionym certyfikatem.
- Jeśli
WEBSITE_LOAD_CERTIFICATES
zawiera stary odcisk palca odnowionego certyfikatu, codzienna synchronizacja automatycznie aktualizuje stary odcisk palca do nowego odcisku palca. - Jeśli
WEBSITE_LOAD_CERTIFICATES
ustawiono na*
, dzienna synchronizacja sprawia, że nowy certyfikat jest dostępny automatycznie.