Известные проблемы и устранение неполадок средства SignTool

Наиболее распространенные типы ошибок при использовании SignTool являются внутренними и обычно выглядят примерно так:

SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B) 

Если код ошибки начинается с 0x8008, например 0x80080206 (APPX_E_CORRUPT_CONTENT), подписываемый пакет не является допустимым. При появлении такого типа ошибки, необходимо перестроить пакет и запустить SignTool еще раз.

В инструменте SignTool есть параметр отладки для показа ошибок с сертификатом и их фильтрации. Чтобы использовать функцию отладки, поместите параметр /debug сразу после sign, а затем полную команду SignTool.

SignTool sign /debug [options]

Наиболее распространенная ошибка — 0x8007000B. О подобном типе ошибки можно найти дополнительные сведения в журнале событий.

Для получения дополнительных сведений в журнале событий:

  • Запустите Eventvwr.msc
  • Откройте журнал событий: Просмотр событий (локальных) -> Приложения и журналы служб -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • Поиск последнего события об ошибке

Внутренняя ошибка 0x8007000B обычно соответствует одному из следующих значений:

Идентификатор события Пример строки события Предложение
150 ошибка 0x8007000B: имя издателя манифеста приложения (CN=Contoso) должно соответствовать имени субъекта сертификата подписи (CN=Contoso, C=US). Имя издателя манифеста приложения должно точно соответствовать имени субъекта подписи.
151 ошибка 0x8007000B: указанный хэш-метод подписи (SHA512) должен соответствовать хэш-методу, использованному в схеме блоков пакета приложения (SHA256). В параметре /fd указан неправильный HashAlgorithm. Повторно запустите SignTool, указав hashAlgorithm, совпадающий со схемой блоков пакета приложения (который использовался при создании пакета приложения)
152 Ошибка 0x8007000B: содержимого пакета приложения должно подходить под схему блоков. Пакет приложения поврежден и его необходимо перестроить для формирования новой схемы блока. Подробнее о ручном создании пакета приложения, см. Создания пакета приложения с помощью средства MakeAppx.exe.

Еще одна распространенная ошибка — 0x80080057. При попытке подписать переносимый исполняемый файл (PE) с помощью средства SignTool на Windows могут возникнуть следующие проблемы:

  • Не удалось подписать PE-файл размером не более 4 гигабайт (ГБ) или больше. При попытке подписать вы получите сообщение об ошибке "Недопустимый параметр (0x80080057)".

  • Для файлов, размер которых превышает 4 ГБ, созданный хэш может быть неточным, несмотря на то, что в противном случае средство SignTool может успешно подписать файл.

    Примечание

    Это особенно справедливо для CAT-файлов.

Эта проблема возникает для PE файлов, таких как .exe, .sys и т. д. Эта проблема возникает из-за переменной ULONG в заголовке PE, указывающей размер изображения. (Размер образа составляет 2 ГБ для операционных систем нижнего уровня, например Vista и более ранних версий.) Это ограничение разработки с 1996. Максимальный предел для этого значения составляет 4 ГБ для PE-файлов, таких как .exe и .sys. Несмотря на то, что файлы Cat обычно подписываются, внутренний создаваемый хэш может быть неточным.

Чтобы обойти эту ошибку, убедитесь, что любой PE-файл, который вы пытаетесь подписать, менее 4 ГБ. Из-за рисков обратной совместимости в настоящее время не поддерживаются ни неиспользуемые, ни постоянные исправления. Однако эта проблема изучается.

Примечание

Эта проблема не связана с SignTool. структура заголовка PE ограничена 4 гб для Windows 7 и более поздних версий Windows, независимо от используемого средства.

Вопросы и ответы

Вопрос: Каково текущее и официальное ограничение размера файла для цифровой подписи (а также счетчика "метка времени-подпись") на Windows?

A1: для PE-файлов, таких как .exe и .sys, максимальный размер файла для подписи составляет 4 ГБ.

Q2: существует ли конкретная версия Windows, например Windows Server 2016, которая имеет наибольшую возможность подписывать большие файлы?

A2: нет, проблема затрагивает все версии Windows.

Q3: в 64-разрядной версии средства SignTool улучшена поддержка этих функций, чем в 32-разрядной версии?

Ответ. нет, 64-разрядная версия SignTool использует те же значения, что и в 32-разрядной версии. Поэтому эта ошибка остается в 64-разрядной версии.

Q4: клиенты, которые используют 32-разрядную версию Windows могут столкнуться с проблемами, если они пытаются использовать файлы, подписанные с помощью 64-разрядной версии средства SignTool?

Ответ. Нет. Однако ограничения будут оставаться вне зависимости от используемой версии средства SignTool.

Вопрос 5: следует ли использовать другое средство подписывания или метод?

Ответ. в настоящее время нет альтернативного метода для цифровой подписи.