5

Я использую подпись 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), но все еще не решил проблему.

3 ответа3

4

Наконец-то я нашел решение для двойной подписи файлов в 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
1

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

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

Вместо использования 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
0

Кажется, я не очень хорошо читаю, а также отвечаю на свой вопрос, так как другим было трудно его найти, как и мне.

Windows больше не поддерживает signtool.exe в Windows 7, поэтому старые / устаревшие функции, такие как подпись SHA-1, все еще работают, но отметка времени SHA-256 является проблемой. Я нашел это на MSDN:

Цитата из MSDN: Примечание. Вы можете использовать SignTool только для подписи пакетов приложений Магазина Windows в Windows 8 и более поздних версиях или Windows Server 2012 и более поздних версиях. Вы не можете использовать SignTool для подписи пакетов приложений в операционных системах более низкого уровня, таких как Windows 7 или Windows Server 2008 R2.

Если вы хотите прочитать все это, посмотрите здесь:

Как подписать пакет приложения с помощью SignTool

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .