Код, интерфейсы и трафик без воды
lawebbox
Серверы и безопасность

Сертификат сервера SSL: какой тип защиты выбрать под архитектуру проекта

У TLS-сертификата есть несколько независимых характеристик: какие имена он покрывает, кто его выдал, как проверялся владелец домена и где завершается TLS-соединение.

Сертификат сервера SSL: какой тип защиты выбрать под архитектуру проекта

Ошибка в любой из этих частей может сделать HTTPS недоступным, даже если в панели хостинга сертификат помечен как действующий.

Поэтому сертификат сервера SSL выбирают не по принципу «бесплатный или платный». Сначала нужно понять, какие домены и поддомены обслуживает проект, какие требования предъявляют контрагенты и где именно заканчивается зашифрованное соединение: на веб-сервере, балансировщике или CDN. От архитектуры зависит, понадобится ли Wildcard, список SAN, отдельные сертификаты для разных регионов или связка сертификатов на CDN и origin.

DV, OV и EV: что именно проверяет удостоверяющий центр

DV, OV и EV обозначают уровни проверки заявителя, а не уровни шифрования.

DV (Domain Validation) подтверждает контроль над доменом. Удостоверяющий центр проверяет, что заявитель может выполнить заданное действие для этого имени, например разместить запись в DNS. Это самый простой и распространённый вариант для сайтов и приложений, где требования к проверке организации отдельно не установлены.

OV (Organization Validation) добавляет проверку организации: удостоверяющий центр устанавливает, что компания существует и связана с запросом на сертификат. EV (Extended Validation) предполагает более строгую проверку сведений об организации. Конкретные процедуры и требования зависят от удостоверяющего центра и действующих правил отрасли.

Ни OV, ни EV сами по себе не делают соединение криптографически сильнее. В сертификатах разных уровней проверки могут использоваться одинаковые алгоритмы и ключи. Разница заключается в подтверждённых сведениях о владельце, а не в шифровании трафика.

Значит ли это, что OV и EV никогда не нужны? Нет. Их могут требовать внутренние политики компании, договор с контрагентом, закупочная документация или отдельные отраслевые процессы. Но само по себе наличие платёжного шлюза, B2B-кабинета или корпоративного портала не означает, что проект технически обязан использовать OV или EV. Стоит сверить требования с ответственными за безопасность и аудит, а не покупать сертификат «на всякий случай».

В современных браузерах нельзя рассчитывать на привычный зелёный замочек как на универсальный индикатор доверия к компании. Браузер проверяет корректность TLS-соединения, но способ отображения защищённого соединения менялся и отличается от браузера к браузеру. Проверка DV также не означает, что сайт безопасен во всех смыслах: сертификат подтверждает контроль над доменом и помогает защитить передачу данных, но не проверяет содержание сайта и не подтверждает добросовестность его владельца.

Для большинства публичных сайтов и сервисов с автоматизированной выдачей достаточно DV-сертификата. OV или EV имеют смысл, когда есть конкретное требование подтвердить организацию. В этом и состоит практический выбор SSL-сертификата для веб-сервера: сначала определить, что требуется от сертификата, а уже затем сравнивать предложения центров выдачи.

Wildcard и SAN: покрытие доменов под архитектуру проекта

Wildcard-сертификат покрывает поддомены одного уровня. Например, *.example.com подходит для app.example.com и api.example.com, но не покрывает сам example.com и не подходит для test.login.example.com. Если нужны и корневой домен, и поддомены, корневое имя добавляют отдельно.

SAN (Subject Alternative Name) — список DNS-имён, указанных в сертификате. С его помощью можно перечислить конкретные адреса, например app.example.com, api.example.com и admin.example.com. В сертификат можно добавить имена разных доменов, если выбранный центр сертификации и его продукт это позволяют. Точные ограничения зависят от сервиса и типа сертификата.

Wildcard и multi-domain решают разные задачи. Wildcard удобен, когда набор поддоменов меняется или заранее неизвестен, а имена укладываются в один уровень. SAN подходит для контролируемого перечня конкретных адресов, в том числе для нескольких доменов. При этом сертификат с большим списком имён связывает их жизненный цикл: нужно учитывать, кто имеет доступ к закрытому ключу и какие сервисы зависят от его обновления.

СитуацияПодходЧто учесть
Поддомены появляются по мере подключения клиентовWildcardДля Wildcard от Let’s Encrypt требуется проверка через DNS
Есть фиксированный набор адресов сервисовSANСписок имён нужно обновлять при изменениях архитектуры
Нужны example.com и его поддоменыWildcard и корневое имя в SANWildcard сам по себе корневой домен не покрывает
На инфраструктуре размещены несколько доменовMulti-domain SAN либо отдельные сертификатыВыбор зависит от границ доступа и управления ключами

Для Wildcard от Let’s Encrypt применяется проверка домена через DNS: ACME-клиент размещает TXT-запись, подтверждающую контроль над доменом. Обычная проверка через HTTP для выпуска такого сертификата не подходит. Поэтому перед выбором Wildcard стоит проверить, можно ли автоматизировать работу с DNS у вашего провайдера. Если API нет, обновление TXT-записи может потребовать ручного вмешательства, а это плохо сочетается с коротким сроком действия сертификатов.

Один сертификат на много имён сокращает число объектов, которыми нужно управлять, но увеличивает последствия утечки закрытого ключа. Разделение по сервисам иногда оказывается разумнее: компрометация одного узла не затрагивает все домены сразу, а обновление можно проводить независимо. Граница сертификата должна следовать границе доверия и доступа, а не только удобству одной строки в конфигурации.

Wildcard удобен для меняющегося набора поддоменов, SAN — для списка конкретных имён. Это разные ответы на разные вопросы об архитектуре.

Срок действия и автоматизация продления

Сертификаты Let’s Encrypt в стандартном профиле действуют 90 дней. Короткий срок предполагает автоматическое продление, а не ручное напоминание в календаре. Если выпуск и установка зависят от действий одного инженера, любой отпуск, смена команды или сбой задачи превращаются в операционный риск.

У автоматизации есть несколько частей. ACME-клиент должен получить новый сертификат, корректно сохранить его и закрытый ключ, а веб-сервер должен начать использовать обновлённые файлы. Для Kubernetes эту цепочку часто ведёт cert-manager. На отдельном сервере используют certbot или другой ACME-клиент. Сам факт успешного выпуска ещё не доказывает, что сервис начал отдавать новый сертификат: после обновления может понадобиться перечитать конфигурацию nginx или Apache.

Отдельно нужен мониторинг срока действия. Он должен проверять именно сертификат, который виден снаружи на нужном домене, а не только файл на диске. Для балансировщиков и CDN проверка с внешней стороны особенно полезна: там может обслуживаться другой сертификат, чем на origin. Оповещение должно попадать в рабочий канал команды, а не оставаться в логах задачи продления.

Индустрия обсуждает дальнейшее сокращение сроков действия TLS-сертификатов и изменение правил их выдачи. Конкретные сроки и этапы зависят от окончательных отраслевых стандартов и профиля сертификата. Практический вывод не требует угадывать календарь: процесс стоит строить так, чтобы короткий цикл выпуска не требовал ручной операции при каждом обновлении.

Для надёжного продления нужны три вещи:

1. Автоматический выпуск. Выберите инструмент, который умеет проходить нужную проверку домена и обновлять сертификат в вашей среде.

2. Проверка результата. Контролируйте срок действия и фактически отдаваемую цепочку, а после обновления проверяйте конфигурацию сервиса.

3. Тестирование восстановления. Проверьте обновление и возврат к рабочей конфигурации на тестовом окружении, включая ситуацию, когда новый файл сертификата установлен, но веб-сервер его не подхватил.

Тестовая среда нужна не только для проверки команды продления. Она помогает увидеть зависимости: доступ к DNS API, права процесса, пути к файлам, перезагрузку сервиса и оповещения. У автоматизации нет особой ценности, если никто не замечает её отказа.

CDN и облачные балансировщики: где хранится сертификат

Если сайт использует CDN или балансировщик, TLS может завершаться не на веб-сервере. Браузер устанавливает защищённое соединение с узлом CDN, после чего CDN связывается с origin. Это два отдельных участка, и для каждого нужно понимать, какой сертификат используется и кто отвечает за его обновление.

В AWS Certificate Manager (ACM) сертификаты для многих интеграций можно выпускать и обновлять автоматически. Для подтверждения домена ACM использует DNS- или email-валидацию. При DNS-проверке владелец размещает предоставленную сервисом DNS-запись; её не следует смешивать с DNS-01 в ACME, это разные механизмы и контексты валидации.

Для CloudFront сертификат ACM должен находиться в регионе us-east-1 (N. Virginia), даже если другие ресурсы приложения работают в иных регионах. Сертификат для регионального балансировщика, напротив, обычно нужен в регионе самого балансировщика. Если один и тот же импортированный сертификат требуется и CloudFront, и ALB в другом регионе, придётся отдельно организовать его наличие там, где этого требует каждая интеграция.

При настройке CloudFront проверьте соответствие доменных имён в сертификате и альтернативных доменных имён дистрибутива. Сертификат должен покрывать те адреса, по которым пользователи обращаются к CDN. После изменений полезно проверить реальное соединение снаружи: настройки в панели не всегда дают очевидный ответ на вопрос, какой сертификат уже раздаётся клиентам.

Закрытый ключ импортированного сертификата нельзя хранить в репозитории вместе с конфигурацией приложения. Используйте хранилище секретов с ограниченным доступом и предусмотрите, кто и как сможет обновить сертификат. В управляемом облачном сервисе часть жизненного цикла можно делегировать платформе, но за корректность доменных имён, региона и привязок всё равно отвечает команда проекта.

Origin за Cloudflare: Full (strict) и Origin CA

В режиме Cloudflare Full (strict) соединение между Cloudflare и origin тоже идёт по HTTPS, а сертификат на origin должен пройти проверку. Подойдёт сертификат от публично доверенного удостоверяющего центра или Cloudflare Origin CA. Последний предназначен для соединения Cloudflare с origin и не воспринимается браузерами как общедоверенный сертификат.

Ошибки на этом участке имеют разные причины. Код 521 обычно указывает, что Cloudflare не может установить соединение с веб-сервером origin. Код 525 связан с неудачным TLS-handshake между Cloudflare и origin. Код 526 в режиме Full (strict) означает, что сертификат origin не прошёл проверку. Это не исчерпывающий список: диагностика зависит от доступности сервера, сетевых правил, сертификата и конфигурации TLS.

Origin CA удобен, когда запросы к серверу действительно проходят через Cloudflare. Но если открыть origin напрямую, например по неприкрытому IP-адресу или через DNS-запись, не проксируемую Cloudflare, браузер не сможет проверить такой сертификат по публичной цепочке доверия. Поэтому нужно ограничивать прямой доступ к origin, если он не предназначен для внешних клиентов. Если прямые подключения необходимы, разумнее использовать на origin публично доверенный сертификат.

Не стоит путать Origin CA с клиентской TLS-аутентификацией Cloudflare: это разные функции и разные API. Сертификат Origin CA создают через соответствующий раздел панели Cloudflare или документированный API для выпуска Origin CA. Путь API для другой функции нельзя подставлять в скрипт выпуска сертификата: запрос может не создать нужный объект, а автоматизация при этом будет выглядеть формально исправной.

При настройке nginx или Apache важны не только файлы сертификата, но и соответствие имени сервера, корректная цепочка и перечитывание конфигурации после обновления. На nginx в конфигурации виртуального хоста указывают сертификат и соответствующий закрытый ключ, затем проверяют конфигурацию командой nginx -t и применяют изменения штатным способом. Для Apache проверяют директивы SSLCertificateFile и SSLCertificateKeyFile, тестируют конфигурацию и только после этого перечитывают её. Названия команд управления сервисом могут отличаться в зависимости от системы.

Если в цепочке используется Cloudflare, проверьте также режим шифрования в панели. Full без strict шифрует соединение до origin, но не требует полноценной проверки сертификата origin. Это может скрыть проблему с недоверенным или неправильно выпущенным сертификатом. Для постоянной рабочей конфигурации предпочтительнее режим Full (strict), если сервер и сертификат настроены корректно.

Проверка на сервере: что именно отдаётся клиенту

Проверять сертификат нужно по имени домена, с которым соединяется клиент. У одного IP-адреса может быть несколько виртуальных хостов, поэтому важен параметр SNI. Например, командой OpenSSL можно посмотреть даты действия сертификата:

openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates

Чтобы увидеть издателя и DNS-имена в SAN:

openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -text | grep -E 'Issuer:|Subject:|DNS:'

На nginx полезно сверить пути к файлам в активной конфигурации:

nginx -T 2>/dev/null | grep -E 'ssl_certificate|ssl_certificate_key'

Для Apache директивы сертификата можно найти в конфигурации:

grep -r 'SSLCertificateFile\|SSLCertificateKeyFile' /etc/apache2 /etc/httpd

Пути и синтаксис могут различаться между дистрибутивами. Команды помогают найти отправную точку, но не заменяют проверку цепочки с клиентской стороны. Если перед веб-сервером стоит CDN или балансировщик, проверяйте и внешний адрес, и участок до origin: там могут быть разные сертификаты и разные причины отказа.

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

Наконец, закройте вопрос с ключами. Закрытый ключ нельзя отправлять в общий репозиторий или хранить рядом с доступной всей команде документацией. Нужны ограниченный доступ, понятный порядок восстановления и список доменов, на которые распространяется сертификат. Бэкапировать следует конфигурацию и необходимые для восстановления сведения, но сам закрытый ключ нужно хранить защищённо, а не размножать без разбора.

Сертификат — часть архитектуры, а не отдельная покупка. DV, OV и EV отвечают на вопрос о проверке владельца; Wildcard и SAN — на вопрос о покрытии имён; ACM, CDN и Origin CA — на вопрос о том, где завершается соединение и кто управляет ключами. Когда эти границы определены, выбор становится проще, а продление превращается из разовой ручной операции в проверяемый процесс.

Частые вопросы

Какой тип сертификата выбрать для сайта с меняющимся набором поддоменов?
Для поддоменов одного уровня, которые появляются по мере подключения клиентов, подходит Wildcard-сертификат. Он покрывает поддомены уровня *.example.com, однако сам корневой домен в него не входит.
Чем отличаются сертификаты DV, OV и EV?
DV подтверждает только контроль над доменом, OV добавляет проверку существования компании и ее связи с запросом, а EV предполагает более строгую проверку сведений об организации. При этом все они могут использовать одинаковые алгоритмы шифрования.
Почему сертификаты Let’s Encrypt действуют 90 дней?
Короткий срок действия стандартного профиля сертификатов Let’s Encrypt составляет 90 дней и предполагает обязательное автоматическое продление, чтобы исключить операционные риски ручного обновления.
Что означает код ошибки 526 при работе через Cloudflare?
В режиме Full (strict) код 526 означает, что сертификат на исходном сервере (origin) не прошел проверку. Для такого соединения требуется использовать публично доверенный сертификат или сертификат Cloudflare Origin CA.
Где нужно размещать сертификат для CloudFront в AWS?
Для CloudFront сертификат в AWS Certificate Manager обязательно должен находиться в регионе us-east-1, даже если остальные ресурсы приложения функционируют в других регионах.