signtool n'a pas réussi à doubler SHA2 et SHA1 avec des horodateurs

nous devons signer nos binaires avec SHA1 et SHA2 en utilisant signtool.exe, notre certificat prend en charge 256-bit SHA2.

Utilisation de Windows 8 SDK signtool:

e.g.:

signtool.signe exe /as / fd sha256 / thttp://timestamp.verisign.com/scripts/timstamp.dll / F " certificat.dossier pfx "/ P XXXXXXX".dll"

(où XXXXXXX est notre mot de passe pour le certificat)

échoue avec l'énigmatique erreur:

erreur de SignTool: SignedCode:: erreur de retour de signature: 0x80070057 Le paramètre est incorrect. Erreur de SignTool: une erreur s'est produite alors qu'on tentait de signer le fichier: file.dll

SIGNER sans timestamp fonctionne, signer individuellement comme SHA1 ou SHA256 fonctionne, mais nous avons besoin de double signe, et imaginer ne pas avoir un timestamp est un non non.

j'ai essayé les versions 32 et 64 bits de signtool.exe, essayé sur une machine Win7 et Win8, et essayé de jouer avec les options de ligne de commande, mais en vain. Quelqu'un a frappé sur cette question avant?

20
demandé sur JosephA 2013-08-31 02:09:09

7 réponses

j'ai essayé de faire cette chose exacte, et constaté ce qui suit fait le tour. Cette approche repose sur l'utilisation de deux certificats D'authentification, L'un pour SHA-1 et L'autre pour SHA-256, afin de s'assurer que les fichiers sont acceptés comme valides par Windows Vista et Windows Server 2008 qui ne supportent pas d'être signés par un certificat SHA-256 même si L'algorithme SHA-1 est utilisé:

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"

notez que les empreintes du pouce SHA-1 sont explicitement spécifiées pour chaque étape de signature à l'aide du /sha1 commande /asappend la signature SHA-256. Dans le cas contraire, la signature SHA-256 annulera la signature SHA-1.

L'autre gotcha que j'ai trouvé dans le processus était que seuls les DLLs et les EXEs supportent les signatures doubles. Les installateurs MSI ne le font pas.

mise à Jour de 29/12/15:

le format de l'empreinte du pouce SHA-1/SHA-256 est une chaîne hexadécimale de 40 caractères sans espace. Pour exemple:

signtool.exe sign /sha1 0123456789ABCDEF0123456789ABCDEF01234567 /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll"

mise à Jour de 30/12/2015

Pour signer un fichier MSI avec un SHA-256 certificat, mais avec un hachage SHA-1 d'utiliser une commande semblable à celui ci-dessous:

signtool.exe sign /sha1 SHA256_Thumprint /v /d "FileDescription" /du "CompanyURL" /t http://timestamp.comodoca.com/authenticode "FileName.msi"
15
répondu Martin Costello 2015-12-30 15:08:58

je sais qu'il est un peu vieux, mais j'ai atterri dans ce fil et peut-être que quelqu'un d'autre le fera aussi.

cela fonctionnera si vous signez d'abord avec SHA1 et ensuite avec 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 

cela a fonctionné en utilisant le même certificat dans les deux signatures. J'ai utilisé le signtool de Windows 10 SDK, ne sais pas si cela fonctionnera avec les versions précédentes.

11
répondu Ricardo Busato 2015-09-17 21:22:10

La question est en fait plus simple.

Le problème est avec le serveur d'horodatage.

au Lieu d'utiliser signtool.exe avec cette

/t http://timestamp.comodoca.com 

vous devez l'utiliser comme ceci pour SHA1

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

et pour SHA256

/tr http://timestamp.comodoca.com/?td=sha256 /td sha256
4
répondu Daniel Georgiev 2017-01-14 23:34:33

Essayez d'utiliser

signtool.exe sign /as /fd sha256 /tr http://timestamp.geotrust.com /td sha256 /f certificate.pfx /p XXXXXX file.dll

/tr est pour rfc3161 à des fins d'horodatage, /td, évidemment, pour le hachage à utiliser.

2
répondu izar 2013-09-27 21:29:43

ajout à la réponse martin_costello, XP et Vista ne supportent pas L'horodatage RFC. Vous devez utiliser l'option /t pour les signatures 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"
2
répondu Marius Greuel 2015-08-31 16:01:36

j'obtiens aussi l'erreur ci-dessus, cependant cela fonctionne avec le osslsigncode utilitaire lors de l'utilisation du 'nid':

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

Le projet officiel est pour Unix, cependant j'ai frappé ma propre windows fourche.

1
répondu Keeely 2015-04-24 07:42:14

je pense que ce lien quelques belles pointeurs. Une partie est mentionnée dans la réponse de martin_costello, mais cet article fournit plus de détails. Notamment:

  • la "Double signature et d'inclure un fichier SHA1 digest" est possible si vous vous connectez SHA1 d'abord, et utilisez /pour la SHA256. Il ne fonctionne qu'avec signtool v6.3 depuis le SDK de Windows 8.1 (ou plus tard) cependant.
  • Double signature avec un "PLEIN SHA1 signature", nécessaire pour la version de windows avant de XP sp3, nécessite 2 certificats différents.

(je n'ai pas testé tout cela moi-même.)

0
répondu Legolas 2016-04-20 10:11:09