Servicios alternativos de sellado de tiempo para Authenticode

115

Realizamos firma de código y sellado de tiempo para todas nuestras compilaciones de producción. Ocasionalmente (generalmente cuando estamos a punto de RTM (!)), El servidor de marca de tiempo en Verisign (" http://timestamp.verisign.com/scripts/timstamp.dll ") decide desconectarse de forma intermitente.

¿Qué debemos hacer en este caso?

  • ¿El servidor de marca de tiempo tiene que estar alojado por su autoridad de certificación raíz?
  • ¿Hay otros servidores de marca de tiempo alojados en la red que podamos usar en lugar de Verisign si su servidor no funciona? Las sugerencias para otras alternativas gratuitas y de alta disponibilidad son bienvenidas :)
Stephen Connolly
fuente

Respuestas:

91

Utilizo el siguiente archivo por lotes que se repite un máximo de 300 veces. Hay dos argumentos,% 1 es la ruta a una carpeta que contiene el archivo por lotes, el archivo pfx y signtool.exe. % 2 es la ruta completa al archivo que se está firmando. Puede llamar a esto en su evento de creación de publicación de Visual Studio con algo como llamar "$ (SolutionDir) thirdparty \ signing \ sign.bat" "$ (SolutionDir) thirdparty \ signing" "$ (TargetPath)" He modificado este archivo por lotes para utilice diferentes servidores de marca de tiempo en cada iteración. Actualmente utiliza Comodo, Verisign, GlobalSign y Starfield. Con suerte, este es el script de firma definitivo;)

@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

También puse http://timestamp.comodoca.com en los sitios de confianza (gracias Vince). Creo que puede ser un paso importante. También actualicé los certificados raíz en la PC.

flobadob
fuente
3
Solo estoy contribuyendo aquí. Sé que esta es una respuesta antigua. Pero este guión es "casi" perfecto, por lo que me gustaría agregar mi cambio. Cuando el script se ejecuta como un evento posterior a la compilación. Si una marca de tiempo falla pero la siguiente marca de tiempo es exitosa, la compilación aún falla porque MSBuild espía los sucesos de signtool.exe y ve un error, por lo que cree que es un error. He tenido esto dentro de VS2012 y desde una máquina de compilación. Mi solución es cambiar la marca de tiempo para abstraerla en otro cmd para que MSBuild no pueda espiar como tal: iniciar / esperar "Sign Tool" / D "% 1" "signtool.exe" timestamp / t %% s% 2
Skintkingle
1
No entiendo la parte "y reintentar un máximo de diez veces ..." . La %%avariable nunca se usa. ¿Hay un error tipográfico en el bucle for o en el comentario?
l33t
1
Nota adicional a la excelente respuesta de flobadob. Si va a usar esto en un paso posterior a la compilación en Visual Studio, deberá usar la instrucción "Llamar". Vea esta publicación: Visual Studio Multiple Post Build Commands
GadgetNC
1
Para sha256 necesitas usar / tr " sha256timestamp.ws.symantec.com/sha256/timestamp " ahora que es bastante rápido por cierto
Vince
1
Para todos los que se preguntan. Sí, ese valor después /pes la contraseña * .pfx.
JensG
16

No estoy seguro de si el servidor de marca de tiempo debe ser propiedad de la CA raíz o no.

Usamos http://timestamp.comodoca.com/authenticode (y tenemos un certificado de autenticación de Comodo) pero en realidad tenemos un problema similar, ya que su servidor parece dar un error o un tiempo de espera ocasionalmente. Firmamos como parte de una compilación nocturna (o bajo demanda) en nuestro servidor de integración continua solo para compilaciones de lanzamiento (no para compilaciones de depuración).

Lo solucioné (principalmente) de dos maneras:

  • Si la llamada a signtool.exe falla, vuelve a intentarlo (inmediatamente) dos veces más
  • El script de compilación solía firmar cada archivo ejecutable en un paso (y tenemos varios como parte de nuestro producto), y ahora lo hace uno por uno; lleva un poco más de tiempo, pero es menos probable que falle

Entre estos, las fallas de compilación causadas por problemas del servidor de marca de tiempo han pasado de una o dos veces por semana a prácticamente nunca.

EDITAR: Tengo una tarea de MSBuild que hace esto (además de leer una contraseña de certificado almacenada fuera del repositorio ) en https://gist.github.com/gregmac/4cfacea5aaf702365724

Gregmac
fuente
12

Funciona muy bien al reemplazar la URL de la marca de tiempo de Verisign por uno de estos:

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

David
fuente
2
Parece que la marca de tiempo ya no está disponible en trustcenter.de: "Todos los productos y servicios de Symantec proporcionados por TC TrustCenter GmbH ya no están disponibles. Cualquier pregunta relacionada con esto debe dirigirse a: Symantec TC TrustCenter 24/7 Phone Support Phone: +1 -800-579-2848 o + 1-520-477-3104 "
Valdimar
8

El servicio de sellado de tiempo de VeriSign es gratuito. Quizás esa sea la razón por la que su confiabilidad no es adecuada; ¡No le dan un presupuesto de mantenimiento!

Definitivamente este es un gran problema. El tiempo perdido debido a compilaciones fallidas debido a fallas en la marca de tiempo del código es un problema creciente en toda la industria del desarrollo de software. Claro, puede escribir un script complejo para rotar, hasta que encuentre un servidor de sellado de tiempo de trabajo ... pero, ¿en serio?

Deberíamos exigir más. Pagamos MUCHO por estos certificados.

Tenga en cuenta que más tarde encontré servidores de marca de tiempo alternativos de los que pocos han oído hablar que estaban bien para usar en períodos en los que Verisign y Comodo están inactivos (generalmente ocurre durante las horas de trabajo los días hábiles).

dyasta
fuente
7

Se puede usar cualquier servidor de marca de tiempo: Recientemente cambié del servidor de marca de tiempo de mi emisor a Verisign ya que descubrí que el servidor de GlobalSign no era confiable. Además, Thawte no ejecuta su propio servidor de marca de tiempo, pero recomienda a las personas que utilicen el de Verisign.

BCran
fuente
1
Bueno, Thawte es Verisign, entonces.
Usuario de StackExchange
4

Por lo general, puede utilizar cualquier servicio de sellado de tiempo que desee. Aunque la mayoría de las CA ofrecen un servicio de sellado de tiempo. Ejemplos

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 fue oficialmente EOL en el backend de 2019 para obtener más información, ella respondió a la siguiente pregunta.

http-timestamp-verisign-com-scripts-timstamp-dll-not-available

RickWeb
fuente
estado buscando la especificación alg digicert! ¿Dónde está documentado esto?
yano
1
knowledge.digicert.com/alerts/… espero que esto ayude
RickWeb
3

Yo tuve el mismo problema. En algún momento no se pudo acceder al servidor de Verisign para algunos archivos que intenté firmar (pero otros archivos de la misma compilación se firmaron correctamente).

Normalmente vuelvo a intentarlo y funciona, pero hoy, de ninguna manera.

Entonces, después de una investigación inútil en Internet, traté de poner http: //*.verisign.com en sitios de zona de confianza y funciona ... Finalmente, no sé si el servidor tenía un problema y ahora funciona o si hice el Lo correcto, lo veremos en los próximos días creo. Espero que pueda ayudar a otros que están bloqueados.

La configuración del servidor: Windows Server 2003 sp2, IE8, seguridad mejorada en.

Vince
fuente
Probablemente sea una coincidencia, ya que encuentro que el sitio simplemente se abruma y se cae. Puede verlo con frecuencia durante las horas pico.
dyasta
1

Puede usar Jsign en lugar de signtool para firmar y marcar la hora de sus compilaciones, admite la conmutación por error a servicios alternativos de marca de tiempo.

La sintaxis de la línea de comandos se ve así:

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

También puede configurar el número de intentos (con --tsretries) y el retraso entre intentos (con --tsretrywait).

Emmanuel Bourg
fuente
con un nombre como ese, pensarías que podría manejar archivos JAR
caduceo