Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
По состоянию на 28 июля 2025 г. изменения в управляемых сертификатах службы приложений (ASMC) влияют на выдачу и продление сертификатов в определенных сценариях. Хотя большинству клиентов не нужно принимать меры, рекомендуется ознакомиться с подробным блогом ASMC для получения дополнительных сведений.
В коде вашего приложения можно получить доступ как к сертификатам открытых ключей, так и к сертификатам, содержащим закрытый ключ, которые вы добавляете в Служба приложений Azure. Код приложения может выступать в качестве клиента и получить доступ к внешней службе, требующей проверки подлинности сертификата. Также может потребоваться выполнить криптографические задачи. В этой статье показано, как использовать общедоступные или закрытые подписанные сертификаты в коде приложения.
Этот подход к использованию сертификатов в коде использует функции TLS в службе приложений, которая требует, чтобы ваше приложение было на уровне "Базовый" или выше. Если приложение находится на уровне "Бесплатный" или "Общий", вы можете включить файл сертификата в репозиторий приложений.
Если служба приложений позволяет управлять сертификатами TLS/Secure Sockets Layer (SSL), вы можете поддерживать сертификаты и код приложения отдельно и защищать конфиденциальные данные.
Предпосылки
Чтобы следовать этой статье, см. следующее:
Найти отпечаток пальца
На портале Azure на левой панели выберите App Services><app-name>.
В левой области приложения выберите сертификаты. Затем выберите "Принести собственные сертификаты ( PFX) или сертификаты открытого ключа (.cer)".
Найдите сертификат, который вы хотите использовать, и скопируйте отпечаток.
Сделать сертификат доступным
Чтобы получить доступ к сертификату в коде приложения, добавьте его отпечаток пальца в WEBSITE_LOAD_CERTIFICATES настройку приложения. Выполните следующую команду в Azure Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>
Чтобы сделать все сертификаты доступными, задайте значение *.
Если WEBSITE_LOAD_CERTIFICATES задано значение *, все ранее добавленные сертификаты доступны для кода приложения. Если вы добавите сертификат в приложение позже, перезапустите приложение, чтобы сделать новый сертификат доступным для приложения. Дополнительные сведения см. в разделе "Обновление или продление сертификата".
Загрузка сертификатов в приложениях Windows
Параметр приложения WEBSITE_LOAD_CERTIFICATES делает указанные сертификаты доступными для вашего приложения на Windows-хостинг в хранилище сертификатов Windows в Current User\My.
В коде C# вы обращаетесь к сертификату с помощью отпечатка сертификата. Следующий код загружает сертификат с отпечатком 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
}
В коде Java, чтобы получить доступ к сертификату из хранилища Windows-MY, используется поле Subject Common Name. Дополнительные сведения см. в разделе "Сертификат открытого ключа". В следующем коде показано, как загрузить сертификат закрытого ключа:
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
...
Для языков, которые не поддерживают или ограниченно поддерживают хранилище сертификатов Windows, см. Загрузите сертификат из файла.
Загрузка сертификата из файла
Если вам нужно загрузить файл сертификата, который вы отправляете вручную, лучше отправить сертификат с помощью протокола FTPS вместо Git. Сохраняйте конфиденциальные данные, такие как закрытые ключи сертификата, вне системы управления исходным кодом.
ASP.NET и ASP.NET Core на Windows должен получить доступ к хранилищу сертификатов, даже если вы загружаете сертификат из файла. Чтобы загрузить файл сертификата в приложении Windows .NET, загрузите текущий профиль пользователя со следующей командой в Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1
Этот подход к использованию сертификатов в коде использует функции TLS в службе приложений, которая требует, чтобы ваше приложение было на уровне "Базовый" или выше.
Следующий пример C# загружает общедоступный сертификат из относительного пути в приложении:
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
...
var cert = X509CertificateLoader.LoadCertificateFromFile("~/<relative-path-to-cert-file>");
// Use the loaded certificate
Сведения о загрузке TLS/SSL-сертификата из файла в Node.js, PHP, Python или Java см. в документации по соответствующему языку или веб-платформе.
Загрузка сертификатов в контейнерах Linux/Windows
Параметр приложения WEBSITE_LOAD_CERTIFICATES делает указанные сертификаты доступными для пользовательских контейнеров Windows или Linux (включая встроенные контейнеры Linux) в виде файлов. Файлы находятся в следующих каталогах:
| Платформа контейнеров | Файлы открытых сертификатов (без закрытого ключа) | Файлы сертификатов, включающие закрытый ключ |
|---|---|---|
| контейнер Windows | C:\appservice\certificates\public |
C:\appservice\certificates\private |
| Контейнер Linux | /var/ssl/certs |
/var/ssl/private |
Имена файлов сертификата — это отпечатки сертификата.
Примечание.
Служба приложений внедряет пути к сертификатам в контейнеры Windows в виде следующих переменных среды: WEBSITE_PRIVATE_CERTS_PATH, WEBSITE_INTERMEDIATE_CERTS_PATH, WEBSITE_PUBLIC_CERTS_PATH и WEBSITE_ROOT_CERTS_PATH. Лучше ссылаться на путь сертификата с помощью переменных среды, а не жестко прописывать путь к сертификату, на случай, если пути к сертификату изменятся в будущем.
Кроме того, контейнеры Windows Server Core и Windows Nano Server автоматически загружают сертификаты в хранилище сертификатов в LocalMachine\My. Чтобы загрузить сертификаты, следуйте тому же шаблону, что и в Load certificates in Windows apps. Для контейнеров на основе Windows Nano используйте пути к файлам, как показано в Загрузить сертификат из файла.
В следующем коде C# показано, как загрузить общедоступный сертификат в приложении Linux.
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
...
var cert = X509CertificateLoader.LoadCertificateFromFile("/var/ssl/certs/<thumbprint>.der");
// Use the loaded certificate
В следующем коде C# показано, как загрузить частный сертификат в приложении Linux.
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
...
var cert = X509CertificateLoader.LoadCertificateFromFile("/var/ssl/private/<thumbprint>.p12");
// Use the loaded certificate
Сведения о загрузке TLS/SSL-сертификата из файла в Node.js, PHP, Python или Java см. в документации по соответствующему языку или веб-платформе.
Обновление или продление сертификата
При продлении сертификата и его добавлении в приложение он получает новый отпечаток, который также должен быть доступен. Принцип работы зависит от типа сертификата.
Если вы вручную отправите общедоступный или частный сертификат:
- Если вы явно перечисляете отпечатки
WEBSITE_LOAD_CERTIFICATES, добавьте новый отпечаток в параметр приложения. - Если
WEBSITE_LOAD_CERTIFICATESзадано значение*, перезапустите приложение, чтобы сделать новый сертификат доступным.
Если вы обновляете сертификат в Azure Key Vault, например, с сертификатом службы приложений (App Service), ежедневная синхронизация с Key Vault автоматически осуществляет необходимое обновление, когда ваше приложение синхронизируется с обновленным сертификатом.
- Если
WEBSITE_LOAD_CERTIFICATESсодержит старый отпечаток обновленного сертификата, ежедневная синхронизация обновляет старый отпечаток на новый отпечаток автоматически. - Если
WEBSITE_LOAD_CERTIFICATESзадано значение*, ежедневная синхронизация автоматически делает новый сертификат доступным автоматически.