X.509-сертификат

17 июля 2026 · ~14 мин чтения

стандарт безопасность криптография pki tls

X.509-сертификат

X.509-сертификат — это цифровой документ, который связывает публичный ключ (открытую половину криптографической пары) с именем владельца и подписан удостоверяющим центром, которому доверяют заранее. Проще говоря, это «паспорт» для сервера, устройства или человека в мире шифрованных соединений: он не сам шифрует, а удостоверяет, кто с тобой разговаривает.

История

Стандарт X.509 родился не в интернете, а в мире телекомов. В конце 1980-х международный союз ITU-T (Международный союз электросвязи, подразделение по стандартизации) работал над серией X.500 — амбициозным проектом единого глобального каталога всех людей и организаций планеты, с иерархией имён вроде «страна → организация → отдел → человек». Задумка была примерно как единая телефонная книга Земли. Чтобы записи в этом каталоге можно было доверять, нужен был способ подписать их криптографически — так в 1988 году появился документ X.509 версия 1: он описывал формат сертификата, привязывающего имя из каталога X.500 к публичному ключу.

Сам X.500 как единый мировой каталог провалился — интернет пошёл другой дорогой, через DNS и веб. А вот X.509 неожиданно выжил и стал стандартом де-факто там, где никакой X.500 никогда и не был нужен: в вебе, почте, VPN, корпоративных сетях.

Основные вехи:

Сегодня X.509 — старый, критикуемый, местами неуклюжий стандарт, у которого куча наследия из 1980-х (упоминание X.500-имён, странности кодирования). Но он повсеместен и никуда не уходит: на нём построен весь TLS в вебе, значительная часть VPN, подписи кода в Windows и macOS, корпоративный Wi-Fi по WPA2/3-Enterprise.

Что это такое

Если очень коротко, X.509-сертификат — это подписанная структурированная запись из нескольких обязательных полей: кому выдан (Subject), кем выдан (Issuer), какой публичный ключ внутри, с какого и по какое число валиден (notBefore / notAfter), плюс подпись издателя, покрывающая всё вышеперечисленное.

Хранится это добро в формате ASN.1 DER (двоичное представление) — это компактные байты, которые не откроешь в блокноте. Для передачи по почте и вставки в конфиги те же самые байты оборачивают в PEM: Base64 плюс маркеры -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----. PEM — это буквально «DER, переведённый в текст», содержимое то же.

Несколько пар «X vs Y», которые важно не путать:

Аналогии из жизни

Загранпаспорт с фото и подписью МВД. В паспорте есть твоё имя, срок действия, фото — и всё это защищено печатью и подписью выдавшего органа. На границе пограничник не звонит тебе домой, чтобы «проверить, точно ли это ты» — он доверяет паспорту, потому что доверяет МВД, а МВД доверяет международным договорам. Ровно та же логика в X.509: браузер не звонит владельцу сайта, а верит подписи CA, потому что корень этого CA лежит в его доверенном списке. Где ломается: паспорт можно подделать, если скомпрометирован сам орган выдачи (например, коррумпированный чиновник напечатал настоящий паспорт с чужим лицом). В мире X.509 это ровно история DigiNotar 2011: подлинный CA выдал подлинные с точки зрения криптографии сертификаты на *.google.com не тому. Криптография была цела — сломалось доверие к выдающей стороне.

Нотариально заверенная доверенность. Ты подписываешь бумагу «доверяю Иванову получить посылку», нотариус ставит печать. Курьер не знает лично ни тебя, ни Иванова, но верит печати нотариуса, чью подпись он умеет проверять. Иерархия: клиент → нотариус → нотариальная палата → государство. В X.509 такая же цепочка: leaf-сертификат сервера подписан промежуточным CA, тот подписан корневым CA, а корень уже лежит в хранилище браузера. Где ломается: если у доверенности истёк срок, курьер её не примет, даже если печать целая. С сертификатом та же беда: notAfter прошёл — соединение красное. И, как с бумагой, доверенность можно отозвать до истечения срока (нотариус ведёт реестр). У X.509 есть аналоги: CRL и OCSP, но на практике они работают криво (см. дальше).

Бейдж сотрудника на конференции. У бейджа есть срок (даты конференции), имя, фото, лого выдавшего оргкомитета, штрихкод для проверки. Охранник на входе сверяет твой бейдж со списком организаторов, а не звонит тебе с уточнением. Где ломается: если ты потерял бейдж и его нашёл посторонний — до конца конференции он может ходить как ты. Ровно так же утёкший приватный ключ + действующий сертификат = злоумышленник может выдавать себя за твой сервер, пока сертификат не истечёт или пока его не отзовут. Поэтому истории про «слитый ключ» — это всегда срочная замена сертификата, а не «ну и ладно».

Как это работает

Заглянем внутрь. Если открыть сертификат командой openssl x509 -in cert.pem -text -noout, увидим примерно такую структуру (пересказываю по-человечески):

Теперь цепочка доверия. В браузере и операционной системе живёт root store — список корневых сертификатов, которым эта система доверяет по умолчанию. Их не больше пары сотен: Apple, Microsoft, Mozilla, Google ведут свои списки. Корни хранятся в железе доверия десятилетиями и подписывают сами себя.

Схематично:

[Root CA]                  ← лежит в браузере, подписал сам себя
    │  подписывает
    ▼
[Intermediate CA]          ← промежуточный, живёт у CA, срок 5–10 лет
    │  подписывает
    ▼
[Leaf-сертификат сервера]  ← твой example.com, срок 3–13 месяцев

Когда браузер приходит на сайт, сервер присылает ему свой leaf плюс промежуточные (root сервер отдавать не должен и не обязан — он и так лежит у клиента). Браузер:

  1. Берёт leaf, находит поле Issuer.
  2. Ищет сертификат с таким Subject среди присланных промежуточных.
  3. Проверяет подпись leaf публичным ключом из промежуточного.
  4. Повторяет для промежуточного — ищет его Issuer.
  5. В конце цепочки находит корень в своём локальном хранилище. Если нашёл и все подписи сошлись — доверие установлено.
  6. Дополнительно сверяет: не истёк ли какой сертификат в цепочке, есть ли нужный домен в SAN у leaf, не отозван ли сертификат (по OCSP или CRL, если доступно), есть ли достаточно SCT в CT-логах.

Только после этого запускается собственно TLS-рукопожатие: стороны договариваются об алгоритмах, обмениваются данными для порождения общего сеансового ключа (в TLS 1.3 это ECDHE — эфемерный обмен ключами Диффи-Хеллмана на эллиптических кривых), сервер подписывает свою часть обмена приватным ключом, соответствующим публичному из сертификата. Это доказывает клиенту: сервер не просто прислал чей-то сертификат, а реально владеет приватным ключом к нему. С этого момента канал зашифрован сеансовым ключом, а X.509 своё дело сделал.

Полезная практика: проверить, что приватный ключ подходит к сертификату. Обе стороны пары должны иметь одинаковый modulus (модуль ключа, большое общее число у RSA). Быстрая проверка:

openssl x509 -in cert.pem -modulus -noout | openssl md5
openssl rsa  -in key.pem  -modulus -noout | openssl md5

Совпали два хеша — пара валидна. Не совпали — сертификат и ключ от разных пар, TLS не встанет.

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Альтернативы и конкуренты

Когда НЕ стоит использовать

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера в задаче автоматизации истёк клиентский X.509-сертификат VPN-доступа: агент внезапно перестал ходить к внешней CRM, всё лежало. Новый сертификат я проверял стандартной парой команд openssl x509 -text (посмотреть срок notAfter и SAN) и сравнением modulus ключа и сертификата через openssl x509 -modulus и openssl rsa -modulus — чтобы убедиться, что мне выдали пару, а не два разных куска от разных заявок. После установки VPN сразу поднялся, доступ вернулся.

Сертификат без мониторинга — бомба замедленного действия

notAfter не спрашивает разрешения. В день истечения весь сервис ложится молча и одновременно. Ставь алерт минимум за 30 дней и, если позволяет инфраструктура, автообновление через ACME или внутренний CA — ручные напоминалки в календаре ломаются об отпуск, увольнение и «я думал, ты этим занимаешься».

Сертификат не шифрует — он удостоверяет

Само шифрование канала делает TLS с помощью сеансового ключа, который стороны согласовывают на месте. Роль X.509 — доказать клиенту, что публичный ключ действительно принадлежит тому, кому написано на «паспорте». Утечка сертификата (без приватного ключа) сама по себе никого не расшифрует; утечка приватного ключа — уже катастрофа.

Краткое резюме