Когда вы пытаетесь запустить подписанное приложение или драйвер, Windows может отобразить сообщение о том, что издатель не известен или цепочка сертификатов не доверена. Это означает, что операционная система не смогла построить доверенную путь от сертификата файла до одного из корневых сертификатов, хранящихся в системе. Ниже перечислены типичные причины такой ситуации и практические шаги для её диагностики и устранения.
- Что такое цепочка сертификатов и зачем она нужна Windows
- Основные причины недоверия цепочки
- Как диагностировать проблему
- Использование certutil
- Просмотр свойств файла в проводнике
- Журнал событий
- Как исправить проблему
- Добавление недостающих промежуточных сертификатов
- Обновление корневых сертификатов Windows
- Переподпись файла актуальным сертификатом
- Замена алгоритма хеширования
- Обновление метки времени
- Типичные ошибки при самостоятельном исправлении
- Когда лучше обратиться к разработчику или поставщику
- Краткие рекомендации и следующие шаги
Что такое цепочка сертификатов и зачем она нужна Windows
Цепочка сертификатов — это последовательность из одного или нескольких сертификатов X.509, где каждый последующий подписывает предыдущий. В конце цепочки находится корневой сертификат, который уже присутствует в доверенном хранилище Windows. Если цепочка полная и каждый сертификат действителен, система считает подпись файла доверенной и позволяет его выполнение без предупреждений. При разрыве цепочки Windows блокирует файл или выдаёт запрос повышения прав.
Основные причины недоверия цепочки
Ниже перечислены наиболее частые факторы, приводящие к отказу Windows доверять цепочке сертификатов.
- Отсутствующие промежуточные сертификаты. Подпись файла может ссылаться только на конечный сертификат, а необходимые промежуточные (интермедиаты) не включены в файл и не находятся в хранилище пользователя.
- Просроченные или отозванные сертификаты. Если любой сертификат в цепочке вышел за срок действия или помещён в список отзыва (CRL/OCSP), Windows считает цепочку недействительной.
- Неправильное использование сертификата. Сертификат, предназначенный для TLS/SSL, не может использоваться для подписи кода, и наоборот. Windows проверяет расширения Key Usage и Enhanced Key Usage.
- Корневой сертификат не в доверенном хранилище. Если корневой центр сертификации (CA) не добавлен в доверенные корневые центры системы, цепочка обрывается.
- Устаревший алгоритм хеширования. Сертификаты, подписанные алгоритмом SHA‑1, считаются слабыми и начиная с Windows 10 версии 1607 система может отклонять их по политике безопасности.
- Проблемы с временной меткой (timestamp). Если метка времени подписи указывает на момент, когда сертификат уже был отозван или просрочен, Windows может отклонить подпись даже если сам файл подписан действительным сертификатом в момент сборки.
Как диагностировать проблему
Прежде чем пытаться исправить цепочку, полезно точно определить, на каком этапе она разрывается.
Использование certutil
Командная строка Windows предоставляет утилиту certutil, которая выводит детали цепочки и причины недоверия.
- Откройте командную строку от имени администратора.
- Выполните команду: certutil -verify -urlfetch <путь_к_файлу>
- В выводе ищите строки с ERROR или CERT_TRUST_IS_NOT_TIME_VALID, CERT_TRUST_IS_REVOKED, CERT_TRUST_IS_NOT_VALID_FOR_USAGE и т.п.
Эти коды указывают на конкретную проблему: срок действия, отзыв, неправильное использование и т.д.
Просмотр свойств файла в проводнике
Щёлкните правой кнопкой по файлу → Свойства → вкладка «Цифровые подписи». Выберите подпись и нажмите «Сведения». Здесь видно цепочку сертификатов и можно нажать «Посмотреть сертификат» для каждого элемента, чтобы проверить даты, алгоритм и назначение.
Журнал событий
В журнале «Приложения и службы logs → Microsoft → Windows → CodeIntegrity → Operational» фиксируются события проверки подписи. Идентификатор события 3033, например, указывает на недоверие из‑за отсутствующего промежуточного сертификата.
Как исправить проблему
После определения причины применяйте соответствующее действие. Ниже перечислены типичные решения.
Добавление недостающих промежуточных сертификатов
Если цепочка разрывается из‑за отсутствующего интермедиата:
- Получите нужный сертификат от издателя (обычно доступен на их сайте в разделе «Root and Intermediate Certificates»).
- Импортируйте его в хранилище «Доверенные промежуточные центры сертификации» текущего пользователя или локального компьютера (certmgr.msc → Trusted Intermediate Certification Authorities → Import).
- Повторите проверку файла.
Обновление корневых сертификатов Windows
Устаревший список доверенных корневых центров может приводить к ошибке «корневой сертификат не доверен».
- Запустите Центр обновления Windows и установите все доступные обновления, особенно пакет «Корневые сертификаты» (Root Certificates Update).
- Или вручную скачайте последний пакет с сайта Microsoft (путь: http://www.microsoft.com/en-us/download/details.aspx?id=… — но конкретную ссылку указывать не будем, так как она меняется).
- После установки перезагрузите компьютер и проверьте файл снова.
Переподпись файла актуальным сертификатом
Если сертификат, использованный для подписи, просрочен, отозван или использует неподходящий алгоритм, единственный надёжный способ — получить новую подпись от издателя.
- Запросите у поставщика новую версию файла, подписанную действующим сертификатом кодовой подписи (Code Signing) с алгоритмом SHA‑256 или лучше.
- Убедитесь, что в подписи включена временная метка от доверенного сервиса timestamping (например, от Digicert, Sectigo или GlobalSign).
- Разместите обновлённый файл и проверьте его через certutil -verify.
Замена алгоритма хеширования
Если сертификат подписан SHA‑1, а политика системы блокирует такие цепочки:
- Попросите издателя переподписать файл сертификатом, использующим SHA‑256.
- Если переподпись невозможна (например, устаревший драйвер, который больше не поддерживается), можно временно ослабить политику через групповую политику: «Конфигурация компьютера → Политики → Windows Parameters → Система безопасности → Настройка проверки сертификатов → Хеш алгоритмы», но это снижает уровень безопасности и не рекомендуется для производственных систем.
Обновление метки времени
Если проблема в том, что метка времени указывает на момент, когда сертификат уже был отозван:
- Попросите издателя повторно подписать файл с актуальной timestamp‑службой.
- Если файл является вашей собственной сборкой, настройте процесс подписи так, чтобы он всегда получал свежую метку времени (например, используя signtool timestamp /t http://timestamp.digicert.com).
Типичные ошибки при самостоятельном исправлении
При попытках решить проблему часто допускаются следующие неточности, которые могут усугубить ситуацию или не дать результата:
- Доверяют самоподписанному сертификату, добавляя его в доверенные корневые центры, хотя файл требует кодовой подписи, а не сервера аутентификации.
- Устанавливают промежуточный сертификат в хранилище «Доверенные корневые» вместо «Доверенные промежуточные», что не помогает построению цепочки.
- Игнорируют предупреждения о отзыве и пытаются обойти проверку через отключение проверки списка отзыва (CRL), что открывает угрозу выполнения вредоносного кода.
- Полагают, что достаточно просто переименовать файл или изменить расширение, чтобы Windows перестал проверять подпись — это не влияет на механизм проверки кода.
Когда лучше обратиться к разработчику или поставщику
Если после выполнения всех вышеописанных шагов файл по‑прежнему не доверен, вероятнее всего проблема находится на стороне издателя:
- Используется сертификат, не предназначенный для подписи кода (например, сертификат веб‑сервера).
- Файл подписан устаревшим алгоритмом, который издатель больше не поддерживает.
- В процессе сборки потеряны необходимые промежуточные сертификаты, и их невозможно получить без доступа к инфраструктуре выпуска.
В таких случаях запросите у поставщика новую подписанную версию или уточните, какие именно сертификаты должны быть доверены в вашей среде.
Краткие рекомендации и следующие шаги
- Сначала запустите certutil -verify -urlfetch <файл> и запишите код ошибки.
- По коду ошибки определите, какой элемент цепочки просрочен, отозван, отсутствует или неправильно используется.
- Если отсутствует промежуточный сертификат — импортируйте его из доверенного источника издателя.
- Если проблема в сроке действия или отзыве — получите обновлённый файл с новой подписью.
- Если используется SHA‑1 — потребуйте переподпись с SHA‑256.
- После любого изменения перезапустите проверку и убедитесь, что ошибка исчезла.
- Если проблема сохраняется, обратитесь к поставщику за новой подписанной версией.
Следуя этим шагам, вы сможете быстро определить причину недоверия цепочки сертификатов и восстановить нормальную работу подписанных файлов в Windows.
