Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Начиная с 28 июля 2025 г. изменения в управляемых сертификатах службы приложений (ASMC) повлияют на выдачу и продление сертификатов в определенных сценариях. Хотя большинству клиентов не нужно принимать меры, рекомендуется ознакомиться с подробным блогом ASMC для получения дополнительных сведений.
В коде приложения вы можете получить доступ к общедоступным или частным сертификатам, добавленным в службу приложений Azure. Код приложения может выступать в качестве клиента и получить доступ к внешней службе, требующей проверки подлинности сертификата. Также может потребоваться выполнить криптографические задачи. В этой статье показано, как использовать общедоступные или частные сертификаты в коде приложения.
Этот подход к использованию сертификатов в коде использует функции TLS в службе приложений, которая требует, чтобы ваше приложение было на уровне "Базовый" или выше. Если приложение находится на уровне "Бесплатный" или "Общий", вы можете включить файл сертификата в репозиторий приложений.
Если служба приложений позволяет управлять сертификатами TLS/Secure Sockets Layer (SSL), вы можете поддерживать сертификаты и код приложения отдельно и защищать конфиденциальные данные.
Предпосылки
Чтобы следовать этой статье, см. следующее:
Найти отпечаток пальца
На портале Azure на левой панели выберите Службы приложений><имя приложения>.
В левой области приложения выберите сертификаты. Затем выберите "Принести собственные сертификаты ( 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
хранилища с помощью поля "Общее имя субъекта ". Дополнительные сведения см. в разделе "Сертификат открытого ключа". В следующем коде показано, как загрузить сертификат закрытого ключа:
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 bytes = File.ReadAllBytes("~/<relative-path-to-cert-file>");
var cert = new X509Certificate2(bytes);
// 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
сертификатов. Чтобы загрузить сертификаты, следуйте тому же шаблону, что и в разделе Загрузка сертификатов в приложениях Windows. Для контейнеров на основе Windows Nano используйте пути к файлам, как показано в разделе "Загрузка сертификата из файла".
В следующем коде C# показано, как загрузить общедоступный сертификат в приложении 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
В следующем коде C# показано, как загрузить частный сертификат в приложении 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
Сведения о загрузке TLS/SSL-сертификата из файла в Node.js, PHP, Python или Java см. в документации по соответствующему языку или веб-платформе.
Обновление или продление сертификата
При продлении сертификата и его добавлении в приложение он получает новый отпечаток, который также должен быть доступен. Принцип работы зависит от типа сертификата.
Если вы вручную отправите общедоступный или частный сертификат:
- Если вы явно перечисляете отпечатки
WEBSITE_LOAD_CERTIFICATES
, добавьте новый отпечаток в параметр приложения. - Если
WEBSITE_LOAD_CERTIFICATES
задано значение*
, перезапустите приложение, чтобы сделать новый сертификат доступным.
При продлении сертификата в Azure Key Vault, например с сертификатом службы приложений, ежедневная синхронизация из Key Vault автоматически обновляется при синхронизации приложения с обновленным сертификатом.
- Если
WEBSITE_LOAD_CERTIFICATES
содержит старый отпечаток обновленного сертификата, ежедневная синхронизация обновляет старый отпечаток на новый отпечаток автоматически. - Если
WEBSITE_LOAD_CERTIFICATES
задано значение*
, ежедневная синхронизация автоматически делает новый сертификат доступным автоматически.