Servizi di marcatura temporale alternativi per Authenticode


115

Eseguiamo la firma del codice e il timestamp per tutte le nostre build di produzione. Occasionalmente (di solito quando stiamo per RTM (!)) Il server del timestamp su Verisign (" http://timestamp.verisign.com/scripts/timstamp.dll ") decide di andare offline a intermittenza.

Cosa dovremmo fare in questo caso?

  • Il server del timestamp deve essere ospitato dall'autorità di certificazione principale?
  • Esistono altri server di timestamp ospitati in rete che potremmo utilizzare al posto di Verisign se il loro server è inattivo? Suggerimenti per altre alternative altamente disponibili e gratuite sono i benvenuti :)

Risposte:


91

Uso il seguente file batch che esegue un ciclo massimo di 300 volte. Ci sono due argomenti,% 1 è il percorso di una cartella contenente il file batch, il file pfx e signtool.exe. % 2 è il percorso completo del file da firmare. Puoi chiamarlo nell'evento post build del tuo studio visivo con qualcosa come call "$ (SolutionDir) thirdparty \ signing \ sign.bat" "$ (SolutionDir) thirdparty \ signing" "$ (TargetPath)" Ho modificato questo file batch in utilizzare diversi server di timestamp in ogni iterazione. Attualmente utilizza Comodo, Verisign, GlobalSign e Starfield. Si spera che questo sia The Ultimate Signing Script;)

@echo off    

REM create an array of timestamp servers...
set SERVERLIST=(http://timestamp.comodoca.com/authenticode http://timestamp.verisign.com/scripts/timestamp.dll http://timestamp.globalsign.com/scripts/timestamp.dll http://tsa.starfieldtech.com)

REM sign the file...
%1\signtool.exe sign /f %1\comodo.pfx /p videodigital %2

set timestampErrors=0

for /L %%a in (1,1,300) do (

    for %%s in %SERVERLIST% do (

        REM try to timestamp the file. This operation is unreliable and may need to be repeated...
        %1\signtool.exe timestamp /t %%s %2

        REM check the return value of the timestamping operation and retry a max of ten times...
        if ERRORLEVEL 0 if not ERRORLEVEL 1 GOTO succeeded

        echo Signing failed. Probably cannot find the timestamp server at %%s
        set /a timestampErrors+=1
    )

    REM wait 2 seconds...
    choice /N /T:2 /D:Y >NUL
)

REM return an error code...
echo sign.bat exit code is 1. There were %timestampErrors% timestamping errors.
exit /b 1

:succeeded
REM return a successful code...
echo sign.bat exit code is 0. There were %timestampErrors% timestamping errors.
exit /b 0

Ho anche inserito http://timestamp.comodoca.com nei siti attendibili (grazie Vince). Penso che possa essere un passo importante. Ho aggiornato anche i certificati di root sul PC.


3
Sto solo contribuendo qui. So che questa è una vecchia risposta. Ma questo script è "quasi" perfetto e quindi mi piacerebbe solo aggiungere il mio cambiamento. Quando lo script viene eseguito come evento di post-compilazione. Se un timestamp non riesce ma un timestamp successivo ha esito positivo, la compilazione non riesce ancora perché MSBuild spia gli eventi di signtool.exe e vede un errore, quindi pensa che sia un errore. Questo è accaduto all'interno di VS2012 e da una macchina di compilazione. La mia soluzione è cambiare il timestamp per astrarlo in un altro cmd in modo che MSBuild non possa spiare in quanto tale: avvia / attendi "Strumento di firma" / D "% 1" "signtool.exe" timestamp / t %% s% 2
Skintkingle

1
Non capisco la parte "e riprova un massimo di dieci volte ..." . La %%avariabile non viene mai utilizzata. C'è un errore di battitura nel ciclo for o nel commento?
l33t

1
Nota aggiuntiva all'eccellente risposta di flobadob. Se intendi utilizzarlo in una fase di post-compilazione in Visual Studio, dovrai utilizzare l'istruzione "Call". Vedi questo post: Comandi di
compilazione

1
Per sha256 devi usare / tr " sha256timestamp.ws.symantec.com/sha256/timestamp " ora che è abbastanza veloce tra l'altro
Vince

1
Per tutti quelli che si chiedono. Sì, il valore dopo /pè la password * .pfx.
JensG

16

Non sono sicuro se il server del timestamp debba essere di proprietà della CA radice o meno.

Usiamo http://timestamp.comodoca.com/authenticode (e abbiamo un certificato Authenticode Comodo) ma in realtà abbiamo un problema simile, in quanto il loro server sembra dare un errore o un timeout occasionalmente. Effettuiamo la firma come parte di una build notturna (o su richiesta) sul nostro server di integrazione continua solo per build di rilascio (non per build di debug).

Ho aggirato questo (principalmente) in due modi:

  • Se la chiamata a signtool.exe fallisce, riprova (immediatamente) altre due volte
  • Lo script di compilazione utilizzato per firmare ogni exe in un unico passaggio (e ne abbiamo diversi come parte del nostro prodotto), e ora lo fa uno per uno - richiede un po 'più di tempo, ma è meno probabile che fallisca

Tra questi, gli errori di compilazione causati da problemi del server di timestamp sono passati da una o due volte a settimana a praticamente mai.

MODIFICA: ho un'attività MSBuild che esegue questa operazione (oltre a leggere una password del certificato archiviata all'esterno del repository ) su https://gist.github.com/gregmac/4cfacea5aaf702365724


12

Funziona bene sostituendo l'URL del timestamp di verisign con uno di questi:

http://timestamp.comodoca.com/authenticode
http://www.trustcenter.de/codesigning/timestamp


2
Sembra che il timestamp non sia più disponibile su trustcenter.de: "Symantec Tutti i prodotti e i servizi forniti da TC TrustCenter GmbH non sono più disponibili. Qualsiasi domanda in merito deve essere indirizzata a: Symantec TC TrustCenter Assistenza telefonica 24 ore su 24, 7 giorni su 7 Telefono: +1 -800-579-2848 o + 1-520-477-3104 "
Valdimar

8

Il servizio di marcatura temporale di VeriSign è gratuito. Forse è questo il motivo per cui la sua affidabilità è meno che adeguata; non gli danno una manutenzione un budget!

Sicuramente questo è un grande problema. Il tempo perso a causa di build non riuscite a causa di errori di timestamp del codice è un problema crescente in tutto il settore dello sviluppo software. Certo, puoi scrivere uno script complesso da ruotare, finché non trovi un server di orodatario funzionante .. ma, davvero?

Dovremmo chiedere di meglio. Paghiamo MOLTO per questi certificati.

Si noti che in seguito ho scoperto che server di timestamp alternativi di cui pochi hanno sentito parlare andavano bene da usare nei periodi in cui Verisign e Comodo sono inattivi (di solito accade durante l'orario di lavoro nei giorni feriali).


7

È possibile utilizzare qualsiasi server di marca temporale: di recente sono passato dal server di marca temporale del mio emittente a Verisign poiché ho scoperto che il server di GlobalSign non era affidabile. Inoltre, Thawte non esegue il proprio server di timestamp ma consiglia alle persone di utilizzare Verisign.


1
Bene, Thawte è Verisign, quindi.
StackExchange User

4

Di solito puoi utilizzare qualsiasi servizio di orodatario che desideri. Sebbene la maggior parte delle CA fornirà un servizio di orodatario. Esempi

http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
http://www.startssl.com/timestamp
http://timestamp.digicert.com?alg=sha1
http://timestamp.digicert.com?alg=sha256

timestamp.verisign.com era ufficialmente EOL nel back-end del 2019 per maggiori informazioni ha la mia risposta alla domanda qui sotto.

http-timestamp VeriSign-com-scripts-timstamp-dll-non-disponibili


stavo cercando la specifica digicert alg! Dove è documentato?
yano

1
knowledge.digicert.com/alerts/… spero che questo aiuti
RickWeb

3

Ho avuto lo stesso problema. Il server verisign non era raggiungibile a volte per alcuni file che ho provato a firmare (ma altri file nella stessa build erano firmati correttamente).

Di solito riprovo e funziona, ma oggi non è possibile.

Quindi dopo alcune ricerche inutili su Internet ho provato a mettere http: //*.verisign.com nei siti di zona attendibile e funziona ... Finalmente non so se il server avesse un problema e ora funziona o se ho fatto il cosa giusta, vedremo nei prossimi giorni credo. Spero che possa aiutare altri che sono bloccati.

La configurazione del server: Windows server 2003 sp2, IE8, protezione avanzata attiva.


Probabilmente è una coincidenza in quanto trovo che il sito semplicemente viene sopraffatto e va giù. Puoi vederlo spesso durante le ore di punta.
dyasta

1

Puoi usare Jsign invece di signtool per firmare e timestamp le tue build, supporta il failover a servizi di timestamp alternativi.

La sintassi della riga di comando è simile a questa:

jsign --keystore keystore.p12 --alias test --storepass password \
      --tsaurl http://timestamp.comodoca.com/authenticode,http://timestamp.globalsign.com/scripts/timestamp.dll \
      application.exe

È inoltre possibile configurare il numero di tentativi (con --tsretries) e il ritardo tra i tentativi (con --tsretrywait).


con un nome del genere penseresti che possa gestire JAR
caduceo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.