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.
%%a
variable nunca se usa. ¿Hay un error tipográfico en el bucle for o en el comentario?/p
es la contraseña * .pfx.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:
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
fuente
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
fuente
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).
fuente
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.
fuente
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
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
fuente
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.
fuente
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í:
También puede configurar el número de intentos (con
--tsretries
) y el retraso entre intentos (con--tsretrywait
).fuente