11

Ho due certificati di firma del codice (uno SHA-1, uno SHA-256) che vorrei applicare allo stesso file. Ho cercato di aggiungere il certificato di SHA-256, ma questo non riesce:Come fa un codice a doppio segno correttamente con un timestamp?

:: Signs with the SHA-1 certificate 
signtool sign /sha1 8f52fa9db30525dfabb35b08bd1966693a30eccf /t http://timestamp.verisign.com/scripts/timestamp.dll my_app_here.exe 
:: Signs with the SHA-2 certificate 
signtool sign /sha1 8b0026ecbe5bf245993b26e164f02e1313579e47 /as /t http://timestamp.verisign.com/scripts/timestamp.dll my_app_here.exe 

questo viene a mancare con l'errore:

Done Adding Additional Store 
SignTool Error: SignedCode::Sign returned error: 0x80070057 
     The parameter is incorrect. 
SignTool Error: An error occurred while attempting to sign: my_app_here.exe 

Se rimuovo l'URL timestamp dal secondo comando, la firma viene completata correttamente, ma la firma SHA-2 non ha il timestamp. (Se applico o meno un timestamp sulla prima firma non ha alcun effetto)

L'intento qui è di consentire a qualcuno di verificare l'app con il certificato più forte se si trovano su un sistema operativo che supporta questo, ma per evitare di fallire validazione su sistemi operativi che non supportano i certificati più potenti (Vista, XP).

Questo tipo di cose è possibile?

+0

Beh, felice di sapere che non sono solo nel mio bisogno di questo ... – vcsjones

+0

Hai provato '/ td sha256/tr ...' invece di '/ t ... 'per la seconda firma? –

risposta

12

SHA-2 La firma Authenticode richiede un server timestamp RFC 3161. L'URL timestamp.verisign.com non funziona per questo.

L'URL RFC 3161 per Symantec/Verisign è:

http://sha256timestamp.ws.symantec.com/sha256/timestamp 

Se si sta ancora utilizzando il vecchio http://timestamp.geotrust.com/tsa URL, e sta venendo a mancare (aprile 2017), è necessario aggiornare al di sopra di uno. GeoTrust, come Verisign, è ora parte di Symantec.

Fonte:

https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=SO5820

+0

Grazie per aver spiegato "perché non funziona", altre risposte ho letto quella parte. Per farlo funzionare, basta sostituire '/ t http: // timestamp.verisign.com/scripts/timestamp.dll' con'/tr http: // timestamp.geotrust.com/tsa'. –

+1

Il server GeoTrust utilizza ancora il digest SHA1 per il timestamp e, cosa ancor più grave, la catena di certificati termina in un certificato radice con un digest MD5. Se vuoi SHA256 digest per il timestamp usa http://timestamp.globalsign.com/?signature=sha2 come URL (specificando/td SHA256 non fa male neanche). –

+4

SHA-256 con URL timestamping RFC 3161 è http://sha256timestamp.ws.symantec.com/sha256/timestamp –