Инфраструктура и автоматизация
Создано 10.10.2026
Обновлено 10.10.2026
Как устроена цепочка сертификатов и почему возникает ошибка доверия. Корневые и промежуточные сертификаты, названия хранилищ в Windows и macOS.
Один сотрудник открывает внутренний сайт в браузере, а у другого приложение сообщает: «Сертификат не принят». Чтобы разобраться, нужно понять, кто подтвердил сертификат сайта и кому доверяет каждый клиент — браузер или приложение.
Цепочка сертификатов связывает сертификат сервера с заранее принятой клиентом опорой доверия. В простом примере есть три объекта: сертификат сайта, промежуточный сертификат его издателя и корневой сертификат, которому клиент уже доверяет. Клиент проверяет связи между ними.
По схемам ниже можно разобрать, почему результаты отличаются, как влияют состав сертификатов и настройки клиента. Для этого не нужно уметь пользоваться командной строкой. В конце есть необязательный пример OpenSSL для технической проверки.
R, I и S обозначают разные открытые ключи. Ключ издателя проверяет подпись следующего сертификата; настройки клиента задают опору доверия. Подписи проверяются вместе со сроками, назначением и ограничениями. В примере issuing CA — промежуточный издатель; самоподпись корня не создаёт доверие к нему.
Названия root, intermediate и leaf описывают роли. Issuing описывает, кто выдал конкретный сертификат: это не обязательная дополнительная ступень. Между корнем и конечным сертификатом может быть несколько промежуточных центров или ни одного.
Сервис portal.example.org предъявляет свой сертификат. Его подписал условный центр выдачи сертификатов Example Issuing CA. CA — сокращение от Certificate Authority, то есть удостоверяющий центр. Сертификат этого центра подписан корневым центром, которому доверяет проверяющий клиент. Это учебная модель, а не описание внедрения конкретного заказчика.
| Роль | Другие названия | Что означает |
|---|---|---|
| Корневой центр и его сертификат | Root CA; root certificate | CA — сам центр; certificate — его сертификат. В нашем примере клиент заранее принимает корневой ключ как опору доверия |
| Промежуточный центр и его сертификат | Intermediate CA; subordinate CA; intermediate certificate | Центр ниже другого центра в иерархии. Его сертификат помогает проверить нижестоящий сертификат; сервер обычно передаёт необходимые промежуточные сертификаты |
| Выдающий центр | Issuing CA | Роль центра, который непосредственно выпустил рассматриваемый сертификат. Часто это промежуточный центр, но им может быть и корневой; отдельная ступень не обязательна |
| Конечный сертификат | End-entity certificate; leaf certificate | Удостоверение сервера, пользователя или устройства, а не центра выдачи. В нашем примере сервер предъявляет сертификат portal.example.org |
| Опора доверия | Trust anchor | Заранее принятый ключ и условия проверки. Часто представлены корневым сертификатом, но понятие шире файла |
Самоподписанный сертификат (self-signed) подписан приватным ключом, соответствующим открытому ключу в этом же сертификате. Для проверки его подписи не нужен сертификат другого издателя. Но это ещё не основание доверять владельцу: любой может создать такую пару ключей и сертификат.
Здесь два отдельных вопроса: «Соответствует ли подпись указанному ключу?» и «Почему мы принимаем этот ключ как доверенный?» Первый решает криптографическая проверка. Второй — заранее заданные правила клиента.
Самоподписанным может быть и корневой сертификат центра, и сертификат отдельного сервера. Способ подписи одинаковый, а назначение различается:
| Вариант | Что он обозначает |
|---|---|
| Самоподписанный корневой сертификат | Представляет ключ центра, от которого клиент может проверять другие сертификаты. Для этого клиент должен заранее принять его как опору доверия. |
| Самоподписанный сертификат сервера | Обозначает конкретный сервер. Самоподпись не делает сервер центром выдачи сертификатов и не обязывает другие клиенты ему доверять. |
Например, администратор создал самоподписанный сертификат для тестового сервиса. Браузер, которому заранее не настроили доверие к этому сертификату, не обязан его принять. Это отличается от нашей основной схемы, где сертификат сервера выпустил промежуточный центр.
Корневой сертификат обычно самоподписанный. Основание доверять ему задаётся отдельно — поставщиком доверенного хранилища или администратором по согласованной политике. Получить файл корня от сервера и принять его как доверенный — разные действия.
Опора доверия — более широкое понятие, чем файл самоподписанного сертификата: это принятые проверяющей стороной сведения о доверенном ключе и связанных условиях. В нашем примере она представлена корневым сертификатом. Модель проверки пути описана в RFC 5280.
Сертификат сервера отвечает на вопрос «Кто перед нами?». Промежуточный сертификат помогает проверить, кто подтвердил сведения о сервере. Корневой сертификат в настройках клиента задаёт, от какого ключа клиент готов начинать проверку.
При подключении с проверкой сертификата сервер предъявляет сертификат сервиса и обычно необходимые промежуточные сертификаты. Корневой сертификат обычно не отправляют: клиент должен уже иметь подходящую опору доверия. Добавление корня в ответ сервера не заставит клиента принять его.
Переданная последовательность сертификатов и построенный клиентом путь проверки могут различаться. Клиент может использовать свои промежуточные сертификаты, кэш и поддерживаемые способы получения недостающих данных. На автоматическую загрузку промежуточного сертификата рассчитывать нельзя: поведение зависит от приложения, библиотеки и настроек.
Правила передачи сертификатов задаёт TLS 1.3 — RFC 9846. Реальные варианты путей и перекрёстное подписание показаны у Let’s Encrypt. Поэтому для разных клиентов иногда подходят разные пути к доверенной опоре.
В сертификате есть поле Subject — кого он обозначает, и Issuer — кто его выпустил. Совпадение Subject предполагаемого издателя с Issuer проверяемого сертификата помогает найти сертификат-кандидат, но не доказывает правильность связи. Проверяющая сторона должна проверить подпись и допустимость использования ключа издателя. Дополнительно учитываются ограничения центров, сроки, разрешённые назначения и другие требования политики.
Для HTTPS отдельно проверяется соответствие имени сервиса сертификату; современная модель проверки имён опирается на расширение Subject Alternative Name (SAN), в котором перечислены имена сервиса. Проверка отзыва тоже зависит от клиента и его политики: успешное построение пути само по себе не доказывает, что статус отзыва проверен. Подробнее об имени — в RFC 9525.
Сертификат клиента и доказательство владения его ключом — другая задача. Установка доверенного корня помогает проверять чужие сертификаты, но не выдаёт устройству собственное удостоверение и приватный ключ.
Сервер предоставляет сертификаты, но не назначает доверие клиента. Приложения могут строить разные пути и применять разные опоры и правила. Здесь показана проверка сертификата: владение серверным ключом и завершение TLS проверяются дополнительно. Отзыв учитывается по политике клиента; сетевой запрос при каждом соединении не подразумевается.
Проверка относится к конкретному соединению. Один и тот же сервис может открываться в браузере и отклоняться приложением: у них могут различаться полученные сертификаты, хранилища доверия и правила проверки.
Для проверки цепочки приватные ключи не нужны. Сведения о сертификатах и адресах могут раскрывать внутренние имена, поэтому диагностические материалы требуют подходящего канала передачи.
Адрес, порт и точка завершения TLS определяют, кто предъявляет сертификат. Это может быть сам сервис, прокси или балансировщик. Имя, которое проверяет клиент, не всегда совпадает с названием записи в каталоге. Точное сообщение и время ошибки связывают наблюдение с конкретным подключением.
Сервер предъявляет собственный сертификат и необходимые промежуточные сертификаты. Если промежуточного сертификата не хватает, результат зависит от того, располагает ли клиент его копией или поддерживает получение недостающих данных.
Браузер и приложение могут обращаться к одному серверу, но располагать разными данными для проверки. Браузер иногда уже имеет промежуточный сертификат в кэше, а приложение — нет. Хранилища доверенных корней и правила проверки тоже могут различаться.
Например, сервер передаёт только свой сертификат. Браузер находит сохранённый промежуточный сертификат и строит путь до принятого корня. Приложению промежуточного сертификата не хватает, поэтому оно отклоняет подключение. Передача сервером необходимого промежуточного сертификата устраняет эту причину без добавления нового доверенного корня.
Программа использует собственное хранилище доверия или системные настройки — в зависимости от реализации. Наличие корня в браузере не означает его наличия в приложении или контейнере. Полученный от сервера файл корня сам по себе не меняет решение клиента о доверии.
Построенный путь ещё должен соответствовать применимым ограничениям: срокам, назначению, полномочиям центров и политике клиента. Для HTTPS отдельно важно имя сервиса; на результат влияет и время системы. Проверка отзыва зависит от настроек и доступности источников статуса. Поэтому путь до принятого корня сам по себе не подтверждает выполнение всех условий.
Одна внешне похожая ошибка может иметь разные причины. В таблице указано, с какой частью системы связана каждая из них.
| Наблюдение | От чего зависит результат | С чем связана причина |
|---|---|---|
| Нет сертификата издателя | Состав фактически переданного сервером набора; источник недостающего промежуточного сертификата | Состав ответа точки завершения TLS |
| Путь не достигает доверенной опоры | Хранилище и политика конкретного клиента; происхождение и согласование корня | Настройки доверия конкретного клиента |
| Имя не совпадает | Адрес подключения, SAN и выбор сертификата в точке завершения TLS | Имя сервиса и выбор серверного сертификата |
| Истёк срок или неверно время | Сроки сертификатов проверяемого пути и часы клиента | Сроки сертификатов и часы системы |
| Неподходящее назначение или ограничения | Параметры выпуска, полномочия центров и политика клиента | Условия выпуска и политика проверки |
| Есть отказ по статусу отзыва | Фактический статус, доступность источников и поведение клиента | Статус сертификата и получение сведений об отзыве |
Три действия, которые не устраняют причину
Результат проверки понятен в контексте соединения, предъявленного набора сертификатов и правил клиента:
Повтор подключения исходным приложением после передачи недостающего промежуточного сертификата подтверждает устранение именно этой причины. Успех в другом браузере не даёт такого подтверждения.
В интерфейсе рядом встречаются три разных признака: роль в цепочке, место хранения и условия доверия. Корневой сертификат описывает роль; «Текущий пользователь» — область Windows; System — связку macOS. Это разные ответы на разные вопросы.
Ниже — распространённые названия. Перевод, набор разделов и внешний вид зависят от версии системы и установленных компонентов; английские имена и короткие коды помогают сопоставить документацию с интерфейсом.
В программе, использующей хранилища Windows, контекст влияет на доступные хранилища. Root даёт принятые опоры, CA — промежуточные сертификаты для пути. My относится к собственному удостоверению и связи с ключом; его наличие не даёт доверия другим участникам. Некоторые программы используют отдельное хранилище; доступ к ключу проверяется отдельно.
| Область Windows | Название в документации | Что означает |
|---|---|---|
| Текущий пользователь | Current User; CurrentUser | Настройки и собственные сертификаты определённого пользователя. Просмотр: certmgr.msc |
| Локальный компьютер | Local Computer; LocalMachine | Область компьютера. Просмотр: certlm.msc. Наличие здесь сертификата не гарантирует приложению доступ к его закрытому ключу |
| Учётная запись службы | Service account | Контекст конкретной службы; выбирается в оснастке «Сертификаты» консоли MMC |
Например, CurrentUser → Root и LocalMachine → Root — одинаковое назначение хранилища в разных областях. Области не являются ступенями сертификатной цепочки. Пользовательское представление некоторых хранилищ может включать машинные записи; для Personal действуют отдельные правила. Поэтому повтор записи в двух представлениях не обязательно означает две независимые копии.
Области, оснастки и правила просмотра описаны в Microsoft Learn: области хранилищ ↗.
| Название в интерфейсе | Английское имя и код | Смысл |
|---|---|---|
| Личное / Личные | Personal; My | Собственные сертификаты пользователя, компьютера или службы; могут быть связаны с закрытыми ключами. Название не означает доверия других участников |
| Доверенные корневые центры сертификации | Trusted Root Certification Authorities; Root | Сертификаты, используемые как принятые корневые опоры при применимой политике проверки |
| Промежуточные центры сертификации | Intermediate Certification Authorities; CA | Сертификаты промежуточных издателей. Их наличие помогает построить путь, но само по себе не делает их доверенными корнями |
| Доверенные издатели | Trusted Publishers; TrustedPublisher | Доверие к издателям подписанного программного обеспечения. Это не название промежуточного уровня HTTPS-цепочки |
| Доверенные лица | Trusted People; TrustedPeople | Непосредственно доверенные люди или ресурсы; результат зависит от политики приложения |
| Недоверенные сертификаты | Untrusted Certificates; Disallowed | Явное недоверие. Это не папка промежуточных сертификатов и не просто список файлов с истёкшим сроком |
| Сторонние корневые центры сертификации | Third-Party Root Certification Authorities; AuthRoot | Корни сторонних центров в механизмах Windows. «Сторонний» не означает ещё один уровень над корнем |
| Доверие предприятия | Enterprise Trust; Trust | Списки доверия сертификатам — CTL, Certificate Trust Lists. Это механизм настройки доверия, а не обязательная ступень цепочки |
| Другие пользователи | Other People; AddressBook | Сертификаты других участников. Сохранённый чужой сертификат не означает наличие его закрытого ключа |
| Веб-хостинг | Web Hosting; WebHosting | Хранилище для серверных сертификатов веб-приложений. Это назначение хранения, а не уровень центра сертификации |
| Запросы сертификатов | Certificate Enrollment Requests; REQUEST | Объекты, связанные с запросами на выдачу. Наличие запроса не означает, что сертификат уже выдан и используется |
Код CA здесь означает конкретное хранилище промежуточных сертификатов. В общем тексте CA — центр сертификации любого соответствующего уровня. У слов «доверенный издатель» в подписи программы и «издатель сертификата» тоже разный контекст.
Назначения хранилищ приведены в Microsoft Learn: каталог сертификатов ↗; их логическое и физическое устройство — в Microsoft Learn: расположения хранилищ ↗. Подпапки политик и предприятия показывают источник записей и правила управления, а не дополнительных издателей в пути.
Связка хранит объект, категория управляет его отображением, а применимые условия доверия участвуют в проверке. My Certificates показывает сертификаты со связанными закрытыми ключами; ключ остаётся отдельным объектом. Категория не назначает доверие. System Roots содержит корни из набора Apple; приложение может применять собственные правила.
| Название в macOS | Что это | Как понимать |
|---|---|---|
| Связка ключей / Keychain Access | Приложение управления | Показывает связки, сертификаты и ключи. Связка ключей — место хранения объектов |
| login / вход | Связка пользователя | Место хранения объектов пользователя. Это не «нижний» уровень цепочки |
| System / Система | Системная связка | Объекты системного контекста. Здесь могут находиться разные типы сертификатов; название не означает, что каждый из них является корнем |
| System Roots / Системные корни | Корни, поставляемые Apple | Защищённый от обычного редактирования набор системных корневых сертификатов. Отличается от System |
| Certificates / Сертификаты | Категория просмотра | Фильтр сертификатов в выбранной связке; их роли и условия доверия могут различаться |
| My Certificates / Мои сертификаты | Категория собственных удостоверений | Сертификаты, связанные с соответствующими закрытыми ключами. Связка сертификат–ключ называется identity. Ключ остаётся отдельным объектом |
| Keys / Ключи | Категория просмотра | Показывает ключи. Категория не является уровнем цепочки или перечнем доверенных центров |
| Trust / Доверие | Параметры сертификата | Условия принятия для определённого использования. Это настройка проверки, а не отдельная связка ключей |
В System могут лежать промежуточные сертификаты и добавленные корни. В отличие от Windows, здесь нет обязательного соответствия «промежуточный сертификат → отдельная папка CA»: роль определяется самим сертификатом и построенным путём.
У одного объекта отдельно выбираются связка и категория просмотра. Общие принципы описаны в Apple: просмотр связки ключей ↗, различие сертификата и identity — в Apple: сертификат и связанный ключ ↗. Системные корни рассмотрены в Apple Platform Security ↗.
В разделе «Доверие» встречаются «Использовать настройки системы» / Use System Defaults, «Всегда доверять» / Always Trust и «Никогда не доверять» / Never Trust. Первое оставляет решение системной политике; остальные задают явное разрешение или запрет для соответствующего использования. Названия SSL, S/MIME, EAP или подписывания кода обозначают разные назначения проверки, а не уровни цепочки. Поведение политик описано у Apple: политики доверия ↗.
Добавить сертификат в хранилище и принять его как опору доверия — разные действия. Изменение доверия не исправляет подпись, срок или выдачу сертификата. Конкретная программа может применять собственное хранилище и дополнительные правила.
Команда ниже иллюстрирует проверку подготовленных файлов. Она помогает увидеть роли доверенной опоры, промежуточного сертификата и проверяемого имени; для понимания основной модели командная строка не требуется.
Есть три PEM-файла из известного и проверенного источника: server.pem — сертификат сервиса, intermediate.pem — промежуточный, root.pem — согласованная опора доверия. Имена файлов условные. Команда ниже проверена в OpenSSL 3.0.13:
openssl verify \
-no-CApath -no-CAstore \
-CAfile root.pem \
-untrusted intermediate.pem \
-purpose sslserver \
-verify_hostname portal.example.org \
server.pemВ учебном примере результат: server.pem: OK.
-CAfile задаёт доверенную опору для этой проверки.-untrusted передаёт промежуточный сертификат для построения пути; он не объявляется опорой доверия.-purpose sslserver проверяет пригодность для сервера TLS, -verify_hostname — имя.-no-CApath и -no-CAstore исключают два других стандартных источника доверия. Системное хранилище команда не изменяет.Как выглядит отказ
Если убрать -untrusted intermediate.pem, когда других источников промежуточного сертификата нет, этот пример завершается сообщением unable to get local issuer certificate на глубине 0. Если вместо root.pem указать другой корень, похожее сообщение возникает на глубине 1. Одинаковая фраза ошибки ещё не доказывает одинаковую причину.
При проверке имени other.example.org вместо portal.example.org пример даёт hostname mismatch. Настройки отзыва в этой команде не заданы: результат OK не является подтверждением проверки отзыва.
Эта команда проверяет файлы, а не работающий сервер. Она не показывает, какой набор сейчас отправляет балансировщик, и не воспроизводит все политики браузера. Семантика параметров и диагностика — в документации openssl verify.
Связь сертификата, открытого ключа и подписи объясняет базовый разбор SSL/TLS-сертификатов.
В разборе mTLS показана проверка клиентского удостоверения и владения ключом. Правила доступа приложения рассматриваются отдельно.
Обсудить проект
Если хотите применить этот материал к вашему проекту, напишите нам. Поможем уточнить вводные, риски и следующий шаг: оценку, discovery, разработку, интеграцию или сопровождение.
СвязатьсяПредыдущая
SSL/TLS-сертификаты© 2018–2026, ООО «РоботБулл Технолоджи» ИНН 9710065224
ОКВЭД 62.01
Сведения об ИТ-деятельности