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?
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"
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.
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
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.
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"
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 .
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:
(Je n'ai cependant pas testé tout cela moi-même.)