Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Наиболее распространенные типы ошибок при использовании 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
- Откройте журнал событий: Просмотр событий (Local) -> Журналы приложений и служб -> Майкрософт -> Windows -> AppxPackagingOM -> Майкрософт-Windows-AppxPackaging/Operational
- Поиск последнего события ошибки
Внутренняя ошибка 0x8007000B обычно соответствует одному из следующих значений:
| Идентификатор события | Пример строки события | Предложение |
|---|---|---|
| сто пятьдесят | ошибка 0x8007000B. Имя издателя манифеста приложения (CN=Contoso) должно соответствовать имени субъекта сертификата подписи (CN=Contoso, C=US). | Имя издателя манифеста приложения должно точно совпадать с именем субъекта подписи. |
| Сто пятьдесят один | ошибка 0x8007000B. Указанный метод хэша подписи (SHA512) должен соответствовать хэш-методу, используемому в карте блоков пакета приложения (SHA256). | Алгоритм хеширования, указанный в параметре /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 ГБ. Это известное ограничение проектирования формата PE без запланированного исправления из-за ограничений обратной совместимости.
Замечание
Эта проблема не связана с SignTool. Конструкция заголовка PE ограничена 4 ГБ для Windows 7 и более поздних версий Windows независимо от используемого средства.
Часто задаваемые вопросы (FAQ)
Вопрос 1. Что такое текущее, официальное ограничение размера файла для цифровой подписи (и сигнатуры меток времени) на Windows?
A1. Для файлов PE, таких как .exe и .sys, максимальный размер файла для подписи составляет 4 ГБ.
Вопрос 2. Существует ли определенная версия Windows, например Windows Server 2016, которая имеет большую возможность подписывать большие файлы?
A2: Нет, проблема влияет на все версии Windows.
Вопрос 3. Имеет ли 64-разрядная версия Signtool лучшую поддержку этой функции, чем 32-разрядная версия?
Ответ. Нет, 64-разрядная версия SignTool использует те же значения, что и 32-разрядная версия. Поэтому проблема остается в 64-разрядной версии.
Вопрос 4. Могут ли у пользователей, использующих 32-разрядную версию Windows, возникнуть проблемы, если они пытаются использовать файлы, подписанные с помощью 64-разрядной версии SignTool?
Ответ: Нет. Однако ограничения будут оставаться независимо от того, какая версия SignTool используется.
Вопрос 5. Следует ли использовать другое средство подписи или метод в целом?
Ответ. Да. Azure Trusted Signing является управляемой службой подписывания кода Майкрософт и является рекомендуемой современной альтернативой управлению собственными сертификатами. Он обрабатывает управление жизненным циклом сертификатов и интегрируется с конвейерами CI/CD. Azure Key Vault — это еще один вариант подписывания с помощью облачных сертификатов. Для автономных сценариев или сценариев самообслуживания SignTool остается стандартным средством.