Гид по технологиям

Let's Encrypt на Azure App Service — автоматизация SSL для веб‑приложений

9 min read DevOps Обновлено 06 Nov 2025
Let's Encrypt на Azure App Service — автоматизация SSL
Let's Encrypt на Azure App Service — автоматизация SSL

  • Этот материал показывает, как настроить бесплатные SSL‑сертификаты Let’s Encrypt для Azure App Service и автоматизировать их продление с помощью WebJobs и Service Principal.
  • Ключевые шаги: создать Storage Account для WebJobs, зарегистрировать Service Principal в Azure AD, установить расширение Let’s Encrypt в App Service и настроить привязки сертификатов.
  • Содержит контрольные списки, план действий, тесты приёмки и рекомендации по безопасности.

Логотип Let's Encrypt.

Быстрые ссылки

  • Что такое Let’s Encrypt?

  • Необходимые условия для настройки

  • Шаг 1: Storage Account для WebJobs

  • Шаг 2: Автоматизация через Service Principal

  • Шаг 3: Расширение Let’s Encrypt для App Service

  • Возможные проблемы и отладка

Что такое Let’s Encrypt?

Let’s Encrypt — это автоматизированный и бесплатный центр сертификации (Certificate Authority), который выдаёт SSL/TLS‑сертификаты, используемые для шифрования трафика HTTPS.
Ключевая особенность: сертификаты действуют 90 дней, поэтому автоматизация продления критична.
Определение: ACME — протокол автоматической выдачи и валидации у доменной зоны; HTTP‑01 — один из методов проверки владения доменом через размещение токена по HTTP.

Важно: короткий срок действия сертификата служит безопасности — он уменьшает риск компрометации ключей и стимулирует автоматическое обновление.

Необходимые условия для настройки

  1. Аккаунт Azure с правами создавать ресурсы (подписка).
  2. Веб‑приложение, размещённое в App Service (стек не имеет значения).
  3. Пользовательский DNS‑запись (CNAME/А) указывает на ваш Web App.
  4. Доступ по HTTP к корню домена: /.well‑known/acme‑challenge/ должен быть доступен для валидации.

Примечание: App Service и App Service Plan удобнее держать в одном Resource Group, но это не обязательно — в конфигурации можно указать разные группы.

Шаг 1: Storage Account для WebJobs

Создайте Storage Account в той же подписке. Важно: тип BlobStorage не подойдёт для WebJobs, используйте типы “Storage” или “StorageV2”.

Создание аккаунта хранения Azure.

После создания добавьте в App Service двe переменные приложения (Application Settings):

  • AzureWebJobsDashboard
  • AzureWebJobsStorage

Значением каждой переменной должна быть строка подключения к Storage Account. Пример строки:

DefaultEndpointsProtocol=https;AccountName=[youraccount];AccountKey=[yourkey];

Подключение AzureWebJobsDashboard и AzureWebJobsStorage.

Совет: храните строку подключения в секрете — используйте секреты Key Vault или защищённые переменные в CI/CD.

Шаг 2: Автоматизация через Service Principal

Для автоматического создания и привязки сертификатов расширению нужно право управлять ресурсами. Создайте Service Principal в нужной директории Azure AD и выдайте ему роль с правами на Resource Group.

Пошагово:

  1. В Azure Portal откройте Azure Active Directory → App registrations.
  2. Создайте новое приложение (регистрацию) и сохраните его Client ID.
  3. В разделе Certificates & secrets создайте Client secret и скопируйте значение сразу — позже его не показать в явном виде.

Создание нового приложения в App Registrations.

  1. Перейдите в Resource Group, где находятся App Service и/или Service Plan, и назначьте роль “Contributor” (Contributor — Участник) для созданного Service Principal.

Назначение роли Contributor для Service Principal.

Пояснение ролей: роль Contributor даёт возможность управлять ресурсами в Resource Group, но не даёт прав над подпиской (подписка остаётся под контролем владельца).

Совет: если вы хотите минимизировать привилегии, назначайте роль только на уровень конкретной Resource Group, а не на подписку.

Шаг 3: Расширение Let’s Encrypt для App Service

  1. В Azure Portal откройте ваш App Service и найдите в панели Site Extensions раздел “Advanced Tools” (Kudu). Обычно доступно по адресу: https://yourdomain.scm.azurewebsite.net.
  2. Нажмите “Site Extensions” → установите расширение Azure Let’s Encrypt (автор SJKP или аналог).
  3. Запустите расширение (Launch). На странице конфигурации заполните поля:
  • Tenant: директория Azure AD (Tenant ID).
  • ClientID: идентификатор приложения (Client ID).
  • ClientSecret: секретный ключ, который вы сгенерировали.
  • ResourceGroupName: имя Resource Group, где находится App Service.
  • SubscriptionID: идентификатор подписки.
  • Update Application Settings: установите True, иначе WebJobs не получат настроек.
  • ServicePlanResourceGroupName: имя Resource Group, где размещён Service Plan (если отличается).

После заполнения появится обзор: Certificates, SSL Bindings и Custom Domains. Выберите домены и выполните Get Request для получения сертификатов.

Важно: укажите адрес электронной почты — LetsEncrypt использует его для уведомлений об ошибках и истечении сертификатов.

Возможные проблемы и способы их решения

  1. Доступ к /.well‑known/acme‑challenge/ заблокирован.

    • Проверьте web.config, маршрутизацию на уровне приложения и правила URL Rewrite.
    • Убедитесь, что правило не перенаправляет HTTP → HTTPS для этой папки во время проверки.
  2. Принудительный HTTPS в App Service.

    • Временно отключите “HTTPS Only” в настройках App Service на время валидации или настройте исключение для пути /.well‑known.
  3. Неправильные Application Settings.

    • Убедитесь, что AzureWebJobsStorage и AzureWebJobsDashboard содержат корректную строку подключения и доступны для WebJobs.
  4. Недостаточные права Service Principal.

    • Проверьте, что Service Principal имеет роль Contributor в нужной Resource Group.
  5. DNS не указывает на App Service.

    • Убедитесь, что CNAME/A‑запись указывает на ваш Web App (или используйте IP‑адрес и проверку сопоставления имен).

Контрольный список перед запуском

  • DNS‑запись настроена и видна по всему Интернету (проверка через dig/nslookup).
  • App Service доступен по HTTP и возвращает 200 для /.well‑known/acme‑challenge/.
  • Storage Account создан с типом Storage или StorageV2.
  • Переменные AzureWebJobsStorage и AzureWebJobsDashboard добавлены и корректны.
  • Service Principal зарегистрирован; ClientID и ClientSecret сохранены.
  • Service Principal имеет роль Contributor на целевой Resource Group.
  • Расширение Let’s Encrypt установлено и заполнены все поля конфигурации.

Мини‑методика: быстрый план действий

  1. Создать Storage Account (StorageV2).
  2. Добавить строки подключения в Application Settings (AzureWebJobsStorage, AzureWebJobsDashboard).
  3. Зарегистрировать приложение в Azure AD и создать Client Secret.
  4. Назначить рол на Resource Group (Contributor).
  5. Установить и настроить расширение Let’s Encrypt в Kudu.
  6. Запросить сертификат для перечисленных доменов и проверить SSL‑binding.

Ролевые контрольные списки

Для DevOps:

  • Подготовить инфраструктуру: Storage Account, Resource Group.
  • Проверить работоспособность WebJobs и доступность переменных окружения.

Для разработчика приложения:

  • Убедиться, что маршрутизация и web.config не блокируют /.well‑known.
  • Тестировать поведение при принудительном HTTPS на локальном окружении.

Для администратора безопасности:

  • Контролировать доступ к Client Secret и строкам подключения.
  • Настроить аудит действий Service Principal.

Критерии приёмки

  • Сертификат выдан для домена и установлен в SSL Bindings.
  • HTTPS-запросы к сайту проходят с валидным сертификатом (Brwoser доверяет панелью).
  • Автоматическое продление срабатывает в течение цикла (WebJob успешно обновил сертификат при тестовом запуске).
  • Логи расширения и WebJobs не содержат ошибок авторизации или доступа.

Тестовые случаи и проверка работоспособности

  1. Позитивный сценарий: после установки сертификата https://yourdomain/ доступен и выдаёт цепочку сертификатов Let’s Encrypt.
  2. Сценарий принудительного HTTPS: включить HTTPS Only и проверить, что валидация не ломается (при необходимости временно отключать и тестировать).
  3. Отказ прав: отозвать роль Service Principal и убедиться, что расширение выдаёт понятную ошибку об отсутствии прав.
  4. Тест обновления: вручную инициировать процесс продления и проверить, что WebJob успешно обновляет сертификат.

Альтернативные подходы и когда они лучше

  • Azure App Service Managed Certificates (бесплатно, но с ограничениями): проще в настройке, но не поддерживает wildcard и не всегда покрывает все сценарии.
  • Azure Key Vault + Azure Automation: если требуется централизованное хранение ключей и сложная политика ротации.
  • Azure Front Door / Application Gateway: полезно, если вы хотите терминировать TLS на уровне CDN/балансировщика — можно использовать готовые сертификаты или интегрировать Let’s Encrypt на уровне бекенда.

Когда Let’s Encrypt может не подойти:

  • Нужны сертификаты с длительным сроком действия и расширенной валидацией (EV) — в этом случае требуется коммерческий CA.
  • Политика компании не разрешает автоматизированное хранение ключей или выдачу сертификатов внешним сервисам.

Принципы и эвристики

  • “Автоматизируй повторяющееся” — автоматическое продление сертификатов устраняет человеческие ошибки.
  • “Минимизируй привилегии” — присваивайте Service Principal только те права, которые нужны.
  • “Логируй и оповещай” — настраивайте оповещения по почте/в системе мониторинга о неудачных продлениях.

Факто‑бокс: ключевые числа

  • Срок действия сертификата Let’s Encrypt: 90 дней.
  • Поддерживаемые ACME‑методы: HTTP‑01, DNS‑01 (в зависимости от инструмента).
  • Рекомендованный интервал продления: запускать процесс обновления каждые 30–60 дней для запасного времени.

SOP: пошаговый playbook для восстановления/ручного обновления

  1. Проверить логи расширения в Kudu (site extensions) и логи WebJobs.
  2. Проверить, что строки подключения к Storage в Application Settings корректны.
  3. Убедиться в доступности /.well‑known/acme‑challenge/ по HTTP.
  4. Если ClientSecret устарел — создать новый секрет в App Registration и обновить значение в расширении.
  5. Повторно инициировать выдачу сертификата через интерфейс расширения.

Жёсткие требования по безопасности

  • Храните ClientSecret и строки подключения в Azure Key Vault или защищённых переменных CI.
  • Ограничивайте доступ к Resource Group и аудитируйте назначения ролей.
  • Обновляйте расширение и WebJobs, чтобы закрыть известные уязвимости.

Примечания по приватности и соответствию (GDPR)

Let’s Encrypt не собирает контент ваших сайтов, но при регистрации вы можете указывать контактный email — убедитесь, что адрес и уведомления соответствуют вашей политике обработки персональных данных. Логи выдачи сертификатов могут содержать доменные имена — храните эти логи в защищённом хранилище.

Частые ошибки и способы их устранения

  • Ошибка: “Challenge failed” — проверьте HTTP‑доступ к /.well‑known, отключите редиректы и правила, которые изменяют путь.
  • Ошибка: “Insufficient permissions” — проверьте роль Service Principal и область назначения (Scope).
  • Ошибка: “Storage connection failed” — проверьте правильность строки подключения и состояние Storage Account.

Короткая проверочная процедура после настройки

  1. Откройте https://вашдомен/ и проверьте сертификат в браузере (кто выдал, срок действия).
  2. Выполните curl -I https://вашдомен/ и проверьте пример ответа и цепочку сертификатов.
  3. Проверить логи WebJobs после плановой попытки обновления (можно инициировать вручную).

Социальные превью и анонсы

OG title: Let’s Encrypt на Azure App Service — автоматизация SSL
OG description: Быстрая инструкция по установке и автоматизации бесплатных SSL‑сертификатов Let’s Encrypt для Azure App Service.

Короткий анонс (100–200 слов):

Настройка SSL для Azure App Service с помощью Let’s Encrypt — это бесплатный, безопасный и хорошо автоматизируемый способ обеспечить HTTPS для ваших веб‑приложений. В инструкции описаны все шаги: создание Storage Account для WebJobs, регистрация Service Principal в Azure AD, установка расширения Let’s Encrypt и проверочные процедуры. Включены чеклисты, критерии приёмки и подсказки по отладке. После следования этому руководству ваш сайт будет автоматически получать и продлевать сертификаты, а вы — получать уведомления о возможных проблемах.

Итог

Let’s Encrypt даёт надёжный путь к бесплатным сертификатам, но правильно настроенная автоматизация — обязательна из‑за короткого срока действия сертификатов. Используйте описанные шаги, контрольные списки и процедуры отката, чтобы обеспечить бесперебойную работу HTTPS для ваших приложений в Azure.

Важное: перед массовым развёртыванием протестируйте процесс на тестовом домене и убедитесь, что уведомления о неудачных продлениях приходят ответственным лицам.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Троян Herodotus: как он работает и как защититься
Кибербезопасность

Троян Herodotus: как он работает и как защититься

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти