Известные проблемы и устранение неполадок для 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, независимо от того, какое средство используется.

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

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

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

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

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

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

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

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

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

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

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