Signtool с двойным знаком SHA2 и SHA1 с отметками времени
Нам нужно двойным образом обозначить наши двоичные файлы с SHA1 и SHA2, используя signtool.exe, наш сертификат поддерживает 256-битный SHA2.
С помощью значка для Windows 8 SDK:
например:.
signtool.exe sign/as/fd sha256/t http://timestamp.verisign.com/scripts/timstamp.dll/f "certificate.pfx" /p XXXXXXX "file.dll"
(где XXXXXXX - наш пароль для сертификата)
с ошибкой cryptic:
Ошибка SignTool: SignedCode:: Sign возвратила ошибку: 0x80070057 Неверный параметр.
Ошибка SignTool: при попытке подписи произошла ошибка: file.dll
Подписание без отметки времени работает, подписываясь индивидуально, как SHA1 или SHA256, но нам нужно сделать двойной знак, и представьте, что у вас нет метки времени, нет.
Я пробовал 32- и 64-разрядные версии signtool.exe, пробовал его на машине Win7 и Win8 и пытался играть с параметрами командной строки, но безрезультатно. Кто-нибудь ударил по этой проблеме раньше?
Ответы
Ответ 1
Я пытаюсь сделать это точно, и нашел следующее трюк. Этот подход основан на использовании двух сертификатов Authenticode, один для SHA-1 и другого для SHA-256, чтобы гарантировать, что файлы приняты как действительные для Windows Vista и Windows Server 2008, которые не поддерживают подписку на сертификат SHA-256 даже если используется алгоритм SHA-1:
signtool.exe sign /sha1 SHA1_Thumprint /v /d "FileDescription" /du "CompanyURL" /fd sha1 /tr http://timestamp.comodoca.com/rfc3161 /td sha1 "FileName.dll"
signtool.exe sign /sha1 SHA256_Thumprint /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll"
Обратите внимание, что отпечатки SHA-1 явно указаны для каждого этапа подписания с помощью переключателя /sha1
и что /as
используется для добавления подписи SHA-256. В противном случае подпись SHA-256 переопределит подпись SHA-1.
Другая найденная мной технология заключалась в том, что только DLL и EXE поддерживают две подписи. Установщики MSI этого не делают.
Обновлено 29/12/15:
Формат отпечатка SHA-1/SHA-256 - это 40-символьная шестнадцатеричная строка верхнего регистра без пробелов. Например:
signtool.exe sign /sha1 0123456789ABCDEF0123456789ABCDEF01234567 /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll"
Обновлено 30/12/2015
Чтобы подписать файл MSI с сертификатом SHA-256, но с хэшем SHA-1 используйте команду, аналогичную приведенной ниже:
signtool.exe sign /sha1 SHA256_Thumprint /v /d "FileDescription" /du "CompanyURL" /t http://timestamp.comodoca.com/authenticode "FileName.msi"
Ответ 2
Я знаю, что это немного устарело, но я приземлился в этой теме, и, возможно, кто-то еще тоже будет.
Он будет работать, если вы сначала подпишете SHA1, а затем с SHA256:
signtool.exe sign /f cert_file.pfx /t http://timestamp.comodoca.com/authenticode /p cert_password
signtool.exe sign /f cert_file.pfx /as /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 /p cert_password
Он работал с использованием того же сертификата в обеих подписях. Я использовал signtool из Windows 10 SDK, не знаю, будет ли он работать с предыдущими версиями.
Ответ 3
Проблема на самом деле проще.
Проблема связана с сервером отметки времени.
Вместо 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
Ответ 4
Попробуйте использовать
signtool.exe sign /as /fd sha256 /tr http://timestamp.geotrust.com /td sha256 /f certificate.pfx /p XXXXXX file.dll
/tr для метки времени RFC3161,/td, очевидно, для использования хэша.
Ответ 5
Добавляя к ответу martin_costello, XP и Vista не поддерживают временную метку RFC. Вам нужно использовать параметр /t для подписей sha1.
signtool.exe sign /sha1 SHA1_Thumprint /v /d "FileDescription" /du "CompanyURL" /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "FileName.dll"
signtool.exe sign /sha1 SHA256_Thumprint /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll"
Ответ 6
Я также получаю вышеуказанную ошибку, однако она работает с утилитой osslsigncode при использовании опции "-nest":
osslsigncode sign -pkcs12 cert1.pfx -h sha1 -t http://timestamp.verisign.com/scripts/timestamp.dll -in original.exe -out intermediate.exe
osslsigncode sign -pkcs12 cert2.pfx -nest -h sha1 -t http://timestamp.verisign.com/scripts/timestamp.dll -in intermediate.exe -out final.exe
Официальный проект для Unix, однако я выбил свою собственную вилку окон.
Ответ 7
Я думаю, эта ссылка содержит несколько хороших указателей. Некоторые из них упоминаются в ответе martin_costello, но в этой статье приводится более подробная информация. В частности:
- "Двойное подписание и включение файла SHA1" возможно, если вы сначала подписываете SHA1 и используете/как для SHA256. Он работает только с signtool v6.3 из SDK Windows 8.1 (или позже).
- Двойное подписание с "сигналом FULL SHA1", необходимым для версии Windows до XP sp3, требует 2 разных сертификата.
(я не тестировал все это сам.)