windows - ruta - signtool error no certificates were found that met all the given criteria
signtool no puede firmar dos veces SHA2 y SHA1 con marcas de tiempo (7)
Agregando a martin_costello answer, XP y Vista no son compatibles con la marca de tiempo RFC. Debe usar la opción / t para las firmas 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"
Necesitamos firmar dos veces nuestros binarios con SHA1 y SHA2 usando signtool.exe, nuestro certificado es compatible con SHA2 de 256 bits.
Usando el signtool del SDK de Windows 8:
p.ej:
signtool.exe sign / as / fd sha256 / t http://timestamp.verisign.com/scripts/timstamp.dll / f "certificate.pfx" / p XXXXXXX "file.dll"
(donde XXXXXXX es nuestra contraseña para el certificado)
falla con el error críptico:
SignTool Error: SignedCode :: Sign devuelto error: 0x80070057 El parámetro es incorrecto. Error de SignTool: se produjo un error al intentar firmar: file.dll
La firma sin una marca de tiempo funciona, la firma individualmente como funciona SHA1 o SHA256, pero debemos firmar dos veces, e imaginar que no tener una marca de tiempo es un no, no.
He intentado las versiones de 32 y 64 bits de signtool.exe, lo probé en una máquina Win7 y Win8, e intenté jugar con las opciones de la línea de comandos, pero fue en vano. ¿Alguien ha golpeado en este tema antes?
Creo que This tiene algunos buenos consejos. Algo de esto se menciona en la respuesta por martin_costello, pero este artículo proporciona algunos detalles más. En particular:
- ''Firmar doble e incluir un resumen del archivo SHA1'' es posible si primero se firma SHA1 y se usa / as para el SHA256. Sin embargo, solo funciona con signtool v6.3 desde el SDK de Windows 8.1 (o posterior).
- La firma dual con ''una firma FULL SHA1'', necesaria para la versión de Windows antes de XP sp3, requiere 2 certificados diferentes.
(No he probado todo esto yo mismo sin embargo.)
El problema es en realidad mucho más simple.
El problema es con el servidor de sello de tiempo.
En lugar de usar signtool.exe con esto
/t http://timestamp.comodoca.com
Necesitas usarlo así para SHA1
/tr http://timestamp.comodoca.com /td sha1
Y para SHA256
/tr http://timestamp.comodoca.com/?td=sha256 /td sha256
He estado tratando de hacer esto exactamente, y encontré que lo siguiente hizo el truco. Este enfoque se basa en el uso de dos certificados Authenticode, uno para SHA-1 y otro para SHA-256, a fin de garantizar que Windows Vista y Windows Server 2008 acepten los archivos como válidos, que no admiten la firma de un certificado SHA-256. incluso si se utiliza el algoritmo 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"
Tenga en cuenta que las huellas digitales SHA-1 se especifican explícitamente para cada paso de firma mediante el uso del interruptor /sha1
y que /as
se utiliza para agregar la firma SHA-256. De lo contrario, la firma SHA-256 anulará la firma SHA-1.
El otro problema que encontré en el proceso fue que solo las DLL y las EXE admiten firmas duales. Los instaladores de MSI no lo hacen.
Actualizado 29/12/15 :
El formato de la huella digital SHA-1 / SHA-256 es una cadena de mayúsculas hexadecimal de 40 caracteres sin espacios. Por ejemplo:
signtool.exe sign /sha1 0123456789ABCDEF0123456789ABCDEF01234567 /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll"
Actualizado 30/12/2015
Para firmar un archivo MSI con un certificado SHA-256 pero con un hash SHA-1, use un comando similar al siguiente:
signtool.exe sign /sha1 SHA256_Thumprint /v /d "FileDescription" /du "CompanyURL" /t http://timestamp.comodoca.com/authenticode "FileName.msi"
Intenta usar
signtool.exe sign /as /fd sha256 /tr http://timestamp.geotrust.com /td sha256 /f certificate.pfx /p XXXXXX file.dll
/ tr es para la marca de tiempo RFC3161, / td obviamente para el hash.
Sé que es un poco viejo, pero caí en este hilo y tal vez alguien más lo hará también.
Funcionará si usted firma primero con SHA1 y luego con 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
Funcionó utilizando el mismo certificado en ambas firmas. Usé el signtool de Windows 10 SDK, no sé si funcionará con versiones anteriores.
También obtengo el error anterior, sin embargo, funciona con la utilidad osslsigncode cuando se usa la opción ''-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
El proyecto oficial es para Unix, sin embargo, he destrozado mi propia ventana .