2013-08-30 11 views
20

Abbiamo bisogno di firmare due volte i nostri binari con SHA1 e SHA2 utilizzando signtool.exe, il nostro certificato supporta 256-bit SHA2.signtool che non riesce a doppio segno SHA2 e SHA1 con data e ora

Utilizzando signtool Windows 8 SDK:

esempio:

SignTool.exe segno/come/fd sha256/t http://timestamp.verisign.com/scripts/timstamp.dll/f "certificate.pfx"/p XXXXXXX "file.dll"

(dove XXXXXXX è la nostra password per il certificato)

fallisce con l'errore criptico:

SignTool errore: SignedCode :: Segno errore restituito: 0x80070057 Il parametro non è corretto. SignTool Errore: Si è verificato un errore durante il tentativo di firmare: file.dll

Firma senza funziona un timestamp, firmando singolarmente come SHA1 o SHA256 opere, ma abbiamo bisogno di duplice segno, e immaginare che non hanno un timestamp è un no no .

Ho provato le versioni a 32 e 64 bit di signtool.exe, l'ho provato su una macchina Win7 e Win8 e ho provato a giocare con le opzioni della riga di comando, ma senza alcun risultato. Qualcuno ha mai provato questo problema in precedenza?

risposta

2

Provare a utilizzare

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

/TR è per RFC3161 timestamping,/td ovviamente per l'hash da utilizzare.

1

Inoltre ottengo l'errore precedente, ma funziona con l'utilità osslsigncode quando si utilizza l'opzione '-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 

Il progetto ufficiale è per Unix, ma ho buttato la mia propria windows fork .

15

Ho cercato di fare questa cosa esatta, e ho scoperto quanto segue ha fatto il trucco. Questo approccio si basa sull'utilizzo di due certificati Authenticode, uno per SHA-1 e un altro per SHA-256, per garantire che i file siano accettati come validi da Windows Vista e Windows Server 2008 che non supportano la firma di un certificato SHA-256 anche se l'algoritmo SHA-1 viene utilizzato:

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" 

noti che le impronte digitali SHA-1 sono esplicitamente specificate per ogni passo firma usando l'interruttore /sha1 e che /as viene utilizzato per accodare la firma SHA-256. In caso contrario, la firma SHA-256 sovrascriverà la firma SHA-1.

L'altro getcha che ho trovato nel processo era che solo DLL ed EXE supportano le doppie firme. Gli installatori MSI no.

aggiornato 29/12/15:

Il formato del SHA-1/SHA-256 identificazione è una stringa esadecimale maiuscolo 40 caratteri senza spazi.Per esempio:

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

Aggiornato 30/12/2015

Per firmare un file MSI con un certificato SHA-256, ma con un hash SHA-1 utilizzare un comando simile al seguito:

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

significa questo, uno ha bisogno di comprare due certificati diversi? o è sufficiente copiare e rinominare? –

+1

Sì, purtroppo (a meno che nessuno lo sappia meglio). Non è stato possibile ottenere un certificato SHA-256 utilizzato per generare una firma SHA-1 da accettare come valida su Windows Server 2008. –

+1

Qualche possibilità che potresti aggiornare con il * formato * dell'identificazione personale? Copiare semplicemente la stringa da certmgr.msc non funziona. – EricLaw

2

In aggiunta alla risposta martin_costello, XP e Vista non supportano il timestamp RFC. È necessario utilizzare l'opzione/t per le firme 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" 
10

so che è un po 'vecchio, ma sono atterrato a questa discussione e forse qualcun altro sarà troppo.

che funzionerà se si firma prima con SHA1 e poi 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 

ha funzionato utilizzando lo stesso certificato in entrambe le firme. Ho usato il signtool da Windows 10 SDK, non so se funzionerà con le versioni precedenti.

+2

Grazie, questo ha aiutato! Ha funzionato per me e con MIS utilizzando signtool Windows 8.1 SDK purché l'ho fatto in questo ordine. L'MSI mostra attendibile su Windows 2008. –

+0

[This] (http://support.ksoftware.net/support/solutions/articles/215805-the-truth-about-sha1-sha-256-and-code-codice-certificato -) dice "Nota che hai bisogno della versione 6.3 di Signtool per farlo.Viene fornito con l'SDK di Windows 8.1 ". – Legolas

0

Penso che this link abbia alcuni suggerimenti. Alcuni sono menzionati nella risposta di martin_costello, ma questo articolo fornisce ulteriori dettagli. In particolare:

  • 'La doppia firma e include un file digest SHA1' è possibile se si firma SHA1 prima e si utilizza/come per SHA256. Funziona solo con signtool v6.3 dall'SDK di Windows 8.1 (o successivo).
  • La doppia firma con 'una firma FULL SHA1', necessaria per la versione Windows prima di XP sp3, richiede 2 certificati diversi.

(non ho provato tutto questo me stesso però.)

4

La questione è in realtà modo più semplice.

Il problema riguarda il time stamp server.

Invece di usare SignTool.exe con questo

/t http://timestamp.comodoca.com 

È necessario utilizzarlo come questo per SHA1

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

E per SHA256

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