Когда Windows, браузер или антивирус сообщает «Издатель: ООО «Ромашка»» или «Неизвестный издатель», эта надпись берётся из цифрового сертификата, которым подписан файл. Но не все сертификаты одинаково надежно идентифицируют автора. В этой статье — какие именно поля сертификата несут смысл идентификации, чем отличаются уровни валидации, как проверить цепочку доверия и что делать, если данные выглядят подозрительно.
- Структура идентификации в сертификате X.509
- Поле Subject (DN — Distinguished Name)
- Расширение Subject Alternative Name (SAN)
- Уровни валидации: EV, OV, DV — чем отличаются для идентификации
- Ключевые поля для ручной проверки идентичности
- Цепочка доверия: почему валидный сертификат может не доверяться
- Типичные признаки подделки или подозрительного сертификата
- Пошаговая проверка подписи файла в Windows
- Сценарии: как действовать в типичных ситуациях
- Ограничения проверки сертификата
- Что делать, если обнаружили подозрительный сертификат
- Чек-лист быстрой проверки перед запуском
- Резюме: главный принцип
Структура идентификации в сертификате X.509
Цифровой сертификат — это структура по стандарту X.509. Для идентификации издателя ключевыми являются поля в разделе Subject (Субъект) и расширение Subject Alternative Name (SAN). Остальные поля (серийный номер, сроки действия, алгоритм подписи, расширения ключа) важны для криптографической валидности, но не несут сведений о юридическом лице.
Поле Subject (DN — Distinguished Name)
Subject представляет собой набор атрибутов (RDN — Relative Distinguished Names). На практике для идентификации издателя программного обеспечения используются следующие атрибуты:
- CN (Common Name) — обычное имя. Для сертификатов подписи кода (Code Signing) это название организации или продукта. Пример: CN=ООО «Ромашка».
- O (Organization) — полное юридическое название организации. Должно совпадать с регистрационными документами. Пример: O=Общество с ограниченной ответственностью «Ромашка».
- OU (Organizational Unit) — подразделение. Часто указывает отдел разработки или бренд. Пример: OU=Отдел безопасности.
- L (Locality), S (State/Province), C (Country) — город, регион, код страны (ISO 3166). Пример: L=Москва, S=Москва, C=RU.
- Email — контактный адрес организации (не персональный разработчика).
Важно: порядок атрибутов в DN нестандартизирован. Разные УЦ (уполномоченные центры) могут выводить их в разной последовательности. Сравнивать нужно значения конкретных атрибутов, а не строку целиком.
Расширение Subject Alternative Name (SAN)
SAN — современный и более гибкий способ указания идентификаторов. Для Code Signing сертификатов в SAN могут присутствовать:
- directoryName — альтернативное представление DN (дублирует Subject).
- rfc822Name — email организации.
- uniformResourceIdentifier — URL официального сайта издателя.
- otherName (Microsoft UPN / SID) — идентификаторы в экосистеме Windows (например, SID издателя для SmartScreen).
Наличие URI с официальным доменом организации в SAN — сильный сигнал легитимности, так как УЦ проверяет контроль над доменом при выдаче.
Уровни валидации: EV, OV, DV — чем отличаются для идентификации
Уровень валидации определяет, насколько тщательно УЦ проверил личность заявителя перед выпуском сертификата. Для подписи кода (Code Signing) существуют два основных уровня: OV (Organization Validation) и EV (Extended Validation). DV (Domain Validation) для подписи исполняемых файлов не выдаётся — браузеры и ОС не доверяют таким сертификатам для кода.
| Характеристика | OV (Organization Validation) | EV (Extended Validation) |
|---|---|---|
| Проверка юридического лица | Да: реестры (ЕГРЮЛ/ЕГРИП), телефон, домен | Да: усиленная — устав, доверенность, callback на корп. телефон, проверка физического адреса |
| Проверка домена | Да (email/DNS/HTTP) | Да (строже) |
| Хранение закрытого ключа | Программное (файл .pfx/.p12) или HSM | Только аппаратное: HSM или токен (FIPS 140-2 Level 2+) |
| Отображение в Windows SmartScreen | Репутация накапливается со временем | Мгновенная репутация «Known publisher», зелёная полоса в SmartScreen |
| Поле Subject | Содержит O, CN, L, S, C | Содержит O, CN, L, S, C + обязательно serialNumber (ИНН/ОГРН) и jurisdictionCountry/jurisdictionLocality |
| Срок выдачи | 1–3 дня | 3–10 дней |
| Цена (ориентир) | ~15–40 тыс. руб./год | ~60–120 тыс. руб./год |
Практический вывод: если файл подписан EV-сертификатом, вы видите проверенное юридическое лицо с мгновенной репутацией. Если OV — лицо проверено, но репутация накапливается; при первом запуске SmartScreen может предупредить «Неизвестный издатель» даже при валидном OV-сертификате. Это не ошибка сертификата, а механизм репутации.
Ключевые поля для ручной проверки идентичности
Откройте свойства файла → вкладка «Цифровые подписи» → выберите подпись → «Сведения» → «Просмотреть сертификат» → вкладка «Состав». На что смотреть:
- Subject → O (Organization) — полное юридическое название. Сравните с сайтом компании, реестром ЕГРЮЛ/ЕГРИП, договором.
- Subject → CN (Common Name) — часто совпадает с O или содержит бренд. Не должно быть обобщённым вроде «Developer» или «Test Certificate».
- Subject → serialNumber — для EV-сертификатов содержит ИНН (РФ) или регистрационный номер в другой юрисдикции. Проверить можно на сайте ФНС или в открытых реестрах.
- Subject → jurisdictionCountry / jurisdictionLocality — код страны и регион регистрации юридического лица (только EV).
- SAN → uniformResourceIdentifier — официальный сайт. Откройте, убедитесь, что домен принадлежит той же организации.
- Issuer (Издатель сертификата) — название УЦ (например, «GlobalSign CodeSigning CA — G3», «Sectigo RSA Code Signing CA», «DigiCert EV Code Signing CA»). УЦ должен быть в доверенных корневых хранилищах Microsoft / Apple / Mozilla.
- Valid from / Valid to — срок действия. Подпись действительна, если момент подписания (timestamp) попадает в срок действия сертификата.
- Timestamp (метка времени) — отдельная подпись от TSA (Time Stamping Authority). Если есть валидный timestamp, подпись остаётся доверенной после истечения сертификата. Без timestamp — подпись становится недействительной после expiry сертификата.
Цепочка доверия: почему валидный сертификат может не доверяться
Сертификат файла (leaf) подписан промежуточным УЦ, тот — корневым. Корневой сертификат должен находиться в «Доверенных корневых центрах сертификации» (Trusted Root Certification Authorities) в хранилище ОС или браузера.
Проблемы, ломающие доверие:
- Отсутствует промежуточный сертификат — разработчик не включил его в подпись (поле «Цепочка сертификатов» неполная). Windows не может построить путь к корню. Решение: переподписать файл с включением полной цепочки (signtool sign /ac intermediate.crt …).
- Корневой УЦ не в хранилище — редко для крупных публичных УЦ (DigiCert, GlobalSign, Sectigo, Entrust), бывает при частных PKI или малоизвестных УЦ. Требует ручной установки корня.
- Отозванный сертификат (CRL/OCSP) — компрометация ключа, прекращение деятельности, ошибка выдачи. Проверяется автоматически ОС при наличии интернета; можно проверить вручную: вкладка «Состав» → «Сведения» → «Точки распространения CRL» / «Доступ к информации об авторизации».
- Слабый алгоритм подписи — SHA-1, MD5. Современные ОС блокируют такие подписи. Нужен SHA-256 или выше.
Типичные признаки подделки или подозрительного сертификата
- Subject.O = «Individual», «Self-Signed», «Test», «Developer» — самоподписанный или тестовый сертификат. Не подходит для распространения ПО.
- Subject.O содержит известное название (Microsoft, Google, Adobe), но Issuer — неизвестный УЦ или самоподписанный — явная подделка. Легальные сертификаты крупных вендоров выдаются только топовыми УЦ.
- Несовпадение домена в SAN и официального сайта — сертификат выдан на example-software.com, а официальный сайт — example.com. Возможно, сертификат получен мошенниками на похожий домен.
- EV-сертификат без serialNumber / jurisdiction полей — нарушение профиля EV (CA/Browser Forum Baseline Requirements). Такой сертификат не должен быть выпущен.
- Срок действия истёк, нет timestamp — подпись недействительна. Файл мог быть подписан давно, сертификат просрочен, timestamp не проставлен.
- Ключ подписи не для Code Signing — расширение Key Usage / Extended Key Usage должно содержать Code Signing (1.3.6.1.5.5.7.3.3). Если только Server Auth или Client Auth — сертификат не для подписи кода.
Пошаговая проверка подписи файла в Windows
- Правый клик на файл → «Свойства» → вкладка «Цифровые подписи».
- Если список пуст — файл не подписан. Прекратите установку, если ожидаете подписанный файл.
- Выберите подпись (обычно одна) → кнопка «Сведения».
- В открывшемся окне: «Сведения о подписи» → должен быть текст «Цифровая подпись в порядке» / «The digital signature is OK». Если есть предупреждение — читайте его внимательно.
- Кнопка «Просмотреть сертификат» → вкладка «Состав» → «Сведения». Проверяйте поля из списка выше.
- Вкладка «Путь сертификации» (Certification Path) — должна быть цепочка: Корневой УЦ → Промежуточный УЦ → Сертификат издателя. Все элементы со значком «ОК» (зелёная галочка).
- При необходимости: «Сведения» → «Точки распространения CRL» / «Доступ к информации об авторизации» → проверьте отзыв в браузере (вставьте URL в адресную строку).
Для автоматизированной проверки в скриптах/пайплайнах используйте signtool verify /pa /v file.exe (Windows SDK) или Get-AuthenticodeSignature в PowerShell. Они возвращают статус цепочи, timestamp, отзыв и Subject.
Сценарии: как действовать в типичных ситуациях
| Ситуация | Что проверить | Решение |
|---|---|---|
| Файл подписан OV-сертификатом, SmartScreen ругается «Неизвестный издатель» | Это нормально для нового сертификата. Репутация накапливается за дни/недели распространения. Можно запустить, если доверяете источнику загрузки (официальный сайт, проверенный хеш). | |
| Файл подписан EV-сертификатом, но Subject.O — незнакомая организация | Проверьте ИНН в ФНС, зайдите на сайт из SAN. Если всё сходится — это легальная компания, возможно, подрядчик или дочерняя структура вендора. | |
| Подпись валидна, но Issuer — частный УЦ (Corporate CA) | Типично для внутренних инструментов компании. Если файл пришёл извне — не запускайте, если не уверены в легитимности этого УЦ. | |
| Файл без подписи, но с заявлением «подписан» на сайте | Сравните хеш (certutil -hashfile file.exe SHA256). Если совпадает — файл не модифицирован при загрузке. Подпись не обязательна для целостности, но желательна для идентификации автора. | |
| Сертификат истёк, timestamp есть | Подпись считается действительной. Файл можно запускать. | |
| Сертификат истёк, timestamp отсутствует | Подпись недействительна. Не запускайте без повторной подписи актуальным сертификатом. |
Ограничения проверки сертификата
Даже идеально валидный EV-сертификат с правильными полями не гарантирует:
- Отсутствие вредоносного кода — сертификат подтверждает кто подписал, а не что внутри. Легальная компания может быть скомпрометирована (Supply Chain Attack), ключ украден, или сборка подменена на CI/CD.
- Актуальность бинарника — старый файл с уязвимостью может иметь валидную подпись. Проверяйте версии и даты сборки.
- Идентичность разработчика-физического-лица — сертификат выдаётся на юрлицо. Кто именно нажал кнопку «подписать» — вопрос внутренних процессов компании (разделение ролей, MFA на токене, аудит логов HSM).
Поэтому проверка сертификата — необходимый, но не достаточный этап. Дополняйте её: проверкой хешей (SHA-256) из официальных источников, сканированием антивирусом/EDR, запуском в песочнице для подозрительных файлов, контролем версий и источниками распространения.
Что делать, если обнаружили подозрительный сертификат
- Не запускайте файл.
- Сохраните копию файла для анализа (в архиве с паролем, чтобы не сработал антивирус).
- Сообщите в службу безопасности вашей организации (если на рабочем ПК) или в поддержку вендора, чьё имя используется в сертификате.
- УЦ, выдавший сертификат, можно найти по полю Issuer. На сайте УЦ обычно есть форма abuse/revocation request — отправьте туда файл и скриншоты сертификата. УЦ обязан расследовать и отозвать сертификат при подтверждении мошенничества.
- Если файл скачан с официального сайта по HTTPS — вероятность подделки минимальна, но возможен взлом сайта или CDN. Сравните хеш.
Чек-лист быстрой проверки перед запуском
- Вкладка «Цифровые подписи» не пуста.
- Статус подписи: «Цифровая подпись в порядке».
- Subject.O — известная вам организация (или проверяемая через реестр/сайт).
- Subject.CN — осмысленное название продукта/компании, не «Test»/«Developer».
- EV: есть serialNumber (ИНН/рег.номер) и jurisdiction — проверьте в открытом реестре.
- SAN URI — официальный домен организации.
- Issuer — известный публичный УЦ (DigiCert, GlobalSign, Sectigo, Entrust, Actalis, SSL.com и др.).
- Вкладка «Путь сертификации» — полная цепочка до доверенного корня, все зелёные галочки.
- Timestamp присутствует (подпись жива после истечения сертификата).
- Key Usage / EKU содержит Code Signing (1.3.6.1.5.5.7.3.3).
- Алгоритм подписи — SHA-256 или выше.
Резюме: главный принцип
Сертификат подтверждает личность издателя через проверенные УЦ поля Subject (O, CN, serialNumber, jurisdiction) и SAN (URI). Уровень валидации (EV/OV) определяет глубину этой проверки и требования к защите ключа. EV даёт мгновенную репутацию и строгие поля; OV — проверенное лицо, но репутация накапливается. Всегда проверяйте полную цепочку доверия, наличие timestamp и соответствие домена в SAN официальному сайту. Сертификат — это доказательство авторства, а не гарантия безопасности кода. Сочетайте проверку подписи с верификацией хешей, репутацией источника загрузки и сканированием защитными средствами.
Материал носит информационный характер и не заменяет профессиональную экспертизу безопасности. При обнаружении подозрительных подписанных файлов в корпоративной среде обратитесь к специалистам по информационной безопасности для проведения форензики и оценки инцидента.
