Signtool не может выполнить подпись SHA256 в Windows 7

4205
Frank Jelstrup

Я использую подпись SHA1 уже много лет, но с 2016 года Windows заставляет разработчиков использовать SHA256.

Принудительное использование Windows Authenticode Code Signing и Timestamping

При использовании Windows 7 SDK signtool функции для подписи SHA-256 являются «неизвестными командами», поэтому этот signtool устарел как signtool и больше не должен использоваться.

Чтобы подписать с SHA256, я скачал Windows 8.1 SDK, чтобы получить signtool.exe, который получил новые функции (/ fd и другие). Файл BAT и signtool работают в Windows 8 и 10, так что я знаю, что это работает, но происходит сбой в Windows 7, когда он пытается установить временную метку файла.

Сбой подписания

Я использую файл bat для подписи файлов, который выглядит следующим образом (я отредактировал файл BAT, чтобы он не отображал переменные, полные пути, название компании и пароли):

Path\signtool.exe sign /f "Path\Certificate.p12" /fd sha256 /p *password* /du "URL" /tr "timestampServer?td=sha256" /td sha256 /d "Product name" "Filename" 

Думаю, у меня нет нужного SDK для поддержки некоторых функций, но я не могу найти в интернете никакой информации о том, как настроить это в Windows 7. Я попытался установить MS Visual C ++ 2015 Redistributable (x64), но все еще не решил проблему.

5

3 ответа на вопрос

4
CodeX

Наконец-то я нашел решение для двойной подписи файлов в Windows 7.

Хитрость в том, чтобы использовать Window 8 SDK ( не 8.1 или 10 )! Я использовал эту загрузку: https://developer.microsoft.com/windows/downloads/windows-8-sdk

В Windows 7 x64 обязательно указывайте на двоичный файл x64 ( ...\8.0\bin\x64\signtool.exe)

В качестве бонуса вот удобный пакетный скрипт, который я сделал. Просто сохраните его как doublesign.bat и перетащите файл, который вы хотите подписать, на этот bat-файл.

@ECHO OFF  set signtool="C:\path to signtool\signtool.exe" set certfile="C:\path to certificate\cert.p12" set certpass="Password" set company="Optional"  echo Signing with SHA-1 %signtool% sign /f %certfile% /p %certpass% /t http://timestamp.comodoca.com/authenticode %1 timeout /T 3 echo. & echo Signing with SHA-256 %signtool% sign /f %certfile% /p %certpass% /as /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 %1  @PAUSE 
Я не проверял это, поскольку я перешел на Windows 10 не так давно. Но ваш ответ на данный момент самый лучший, поэтому я отметил это как правильный ответ. Frank Jelstrup 8 лет назад 0
1
Daniel Georgiev

Проблема на самом деле намного проще.

Проблема с сервером отметок времени.

Вместо использования signtool.exe с этим

/t http://timestamp.comodoca.com 

Вы должны использовать это так для SHA1

/tr http://timestamp.comodoca.com /td sha1 

И для SHA256

/tr http://timestamp.comodoca.com/?td=sha256 /td sha256 
Ваши команды все еще приводят к сбою signtool для меня; Я полагаю, вы используете signtool из Windows 8 SDK Cocowalla 7 лет назад 0
0
Frank Jelstrup

Seems I'm no good at reading, also I'm answering my own question as others could find it hard to find, just like me.

Windows doesn't support the signtool.exe on Windows 7 any more, so that is why old/obsolete functions like SHA-1 signing is still working, but SHA-256 time stamping is a problem. I found this on MSDN:

Quote from MSDN: Note You can only use SignTool to sign your Windows Store app packages on Windows 8 and later or Windows Server 2012 and later. You can't use SignTool to sign app packages on down level operating systems such as Windows 7 or Windows Server 2008 R2.

If you want to read the whole thing then look here:

How to sign an app package using SignTool

Это касается только пакетов appx. В нем просто говорится, что вы не можете подписывать пакеты appx в версиях Windows ранее 8. Daniel B 8 лет назад 0
Верно, но если вы посмотрите на то, как работает подпись, то подписывание только добавляет наложение к концу файла. Это наложение содержит различные параметры для файла, поэтому, если файл изменяется, подпись нарушается и больше не следует доверять. Это как расширенная контрольная сумма CRC. Подписывание пакетов / файлов appx или любого другого файла технически идентично, подобно созданию контрольной суммы CRC для любого типа файлов. Я все еще верю, что мой ответ действителен, пока не убедится в обратном. Frank Jelstrup 8 лет назад 0
Различные типы файлов подписаны по-разному. Но не в этом суть: статья на MSDN вообще не о файлах `.exe`. * Применяется * только к пакетам appx. * Вы пытались использовать инструмент Windows 8 в Windows 7. Это не сработало. Это не означает, однако, что вы не можете использовать версию SignTool для Windows 7 SDK, чтобы продолжать подписывать файлы `.exe`. Daniel B 8 лет назад 0
Средство Windows 7 не имеет параметров, необходимых для создания подписи SHA-256 и отметки времени, поэтому это означает, что не следует использовать средство подписи Windows 7 SDK (добавим это к вопросу, полезная информация). Я знаю, что MSDN пишет пакеты приложений, но лично я ожидаю, что это все файлы, и они используют appx в качестве примера файла. Это предположение сделано, поскольку я использую signtool для подписи всех типов файлов, даже форматов файлов, которые я создаю сам. Не стесняйтесь найти лучший ответ, тогда я дам вам правильный ответ :) Frank Jelstrup 8 лет назад 0