web-dev-qa-db-fra.com

signtool ne réussit pas à signer en double SHA2 et SHA1 avec des horodatages

Nous devons double-signer nos fichiers binaires avec SHA1 et SHA2 à l'aide de signtool.exe, notre certificat prend en charge SHA2 256 bits.

En utilisant le signtool du SDK Windows 8:

par exemple.:

signtool.exe signer/as/fd sha256/t http://timestamp.verisign.com/scripts/timstamp.dll / "certificate.pfx"/p XXXXXXX "fichier.dll"

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

échoue avec l'erreur cryptique:

Erreur SignTool: SignedCode :: Sign a renvoyé l'erreur: 0x80070057 Le paramètre est incorrect . Erreur SignTool: Une erreur s'est produite lors de la tentative de signature: file.dll

La signature sans horodatage fonctionne, la signature individuelle en tant que SHA1 ou SHA256 fonctionne, mais nous devons procéder à une double signature et imaginer ne pas avoir d'horodatage est un non.

J'ai essayé les versions 32 et 64 bits de signtool.exe, sur une machine Win7 et Win8, et essayé de jouer avec les options de la ligne de commande, mais en vain. Quelqu'un a-t-il déjà abordé cette question?

20
JosephA

J'ai essayé de faire cette chose exacte, et trouvé ce qui suit a fait l'affaire. Cette approche repose sur l'utilisation de deux certificats Authenticode, l'un pour SHA-1 et l'autre pour SHA-256, afin de garantir l'acceptation de la validité des fichiers par Windows Vista et Windows Server 2008, qui ne prend pas en charge la signature d'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 digitales SHA-1 sont spécifiées explicitement pour chaque étape de signature à l'aide du commutateur /sha1 et que /as est utilisé pour ajouter la signature SHA-256. Sinon, la signature SHA-256 remplacera la signature SHA-1.

L’autre piège que j’ai trouvé dans le processus était que seules les DLL et les EXE étaient compatibles avec la double signature. Les installateurs MSI ne le font pas.

Mise à jour le 29/12/15 :

Le format de l'empreinte numérique SHA-1/SHA-256 est une chaîne majuscule hexadécimale de 40 caractères sans espaces. Par exemple:

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

Mis à jour le 30/12/2015

Pour signer un fichier MSI avec un certificat SHA-256 mais avec un hachage SHA-1, utilisez une commande similaire à celle ci-dessous:

signtool.exe sign /sha1 SHA256_Thumprint /v /d "FileDescription" /du "CompanyURL" /t http://timestamp.comodoca.com/authenticode "FileName.msi"
15
Martin Costello

Je sais que c'est un peu vieux, mais j'ai atterri dans ce fil et peut-être que quelqu'un d'autre aussi.

Cela fonctionnera si vous signez d'abord avec SHA1 puis 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, je ne sais pas s'il fonctionnera avec les versions précédentes.

12
Ricardo Busato

La question est en réalité beaucoup plus simple.

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

Au lieu d'utiliser signtool.exe avec ceci

/t http://timestamp.comodoca.com 

Vous devez l'utiliser comme ça pour SHA1

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

Et pour SHA256

/tr http://timestamp.comodoca.com/?td=sha256 /td sha256
4
Daniel Georgiev

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 l'horodatage RFC3161,/td évidemment pour le hash.

2
izar

En ajoutant martin_costello answer, 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
Marius Greuel

J'ai aussi l'erreur ci-dessus, cependant cela fonctionne avec l'utilitaire osslsigncode avec l'option '-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

Le projet officiel est pour Unix, mais j'ai ma propre windows fork .

1
Keeely

Je pense ce lien a quelques bons conseils. Une partie est mentionnée dans la réponse de martin_costello, mais cet article fournit quelques détails supplémentaires. En particulier:

  • La «double signature et l'inclusion d'un résumé de fichier SHA1» sont possibles si vous signez d'abord SHA1 et utilisez/comme pour le SHA256. Cependant, il ne fonctionne qu'avec signtool v6.3 à partir du SDK Windows 8.1 (ou version ultérieure).
  • La double signature avec 'une signature FULL SHA1', requise pour la version Windows antérieure à XP sp3, nécessite 2 certificats différents.

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

0
Legolas