Известные проблемы и устранение неполадок для 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). ХэшAlgorithm, указанный в параметре /fd, является неверным. Повторно выполните 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, независимо от того, какой инструмент используется.

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

Вопрос 1. Что такое текущее, официальное ограничение размера файла для цифровой подписи (и сигнатуры меток времени) в Windows?

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

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

Ответ. Нет, проблема влияет на все версии Windows.

Вопрос 3. Имеет ли 64-разрядная версия Signtool лучшую поддержку этой функции, чем 32-разрядная версия?

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

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

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

Вопрос 5. Следует ли использовать другое средство подписи или метод в целом?

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