Подтвердить что ты не робот

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

4b9b3361

Ответ 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 разных сертификата.

(я не тестировал все это сам.)