Eu uso o seguinte arquivo em lote, que faz um loop de no máximo 300 vezes. Existem dois argumentos,% 1 é o caminho para uma pasta que contém o arquivo em lote, o arquivo pfx e o signtool.exe. % 2 é o caminho completo para o arquivo que está sendo assinado. Você pode chamar isso em seu evento pós-compilação do Visual Studio com algo como call "$ (SolutionDir) thirdparty \ assinatura \ sign.bat" "$ (SolutionDir) thirdparty \ assinatura" "$ (TargetPath)" Modifiquei este arquivo em lote para usar servidores de carimbo de data / hora diferentes em cada iteração. Atualmente usa Comodo, Verisign, GlobalSign e Starfield. Esperançosamente, este é o script de assinatura final;)
@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
Também coloquei http://timestamp.comodoca.com nos sites confiáveis (obrigado, Vince). Acho que pode ser um passo importante. Eu atualizei os certificados raiz no PC também.
%%a
variável nunca é usada. Há um erro de digitação no loop for ou no comentário?/p
é a senha * .pfx.Não tenho certeza se o servidor de carimbo de data / hora deve pertencer à CA raiz ou não.
Usamos http://timestamp.comodoca.com/authenticode (e temos um certificado Comodo authenticode), mas na verdade temos um problema semelhante, em que o servidor parece apresentar um erro ou tempo limite ocasionalmente. Assinamos como parte de um build noturno (ou sob demanda) em nosso servidor de integração contínua apenas para builds de Release (não para builds de Debug).
Eu contornei isso (principalmente) de duas maneiras:
Entre eles, as falhas de construção causadas por problemas de servidor de carimbo de data / hora foram de uma ou duas vezes por semana para virtualmente nunca.
EDIT: Eu tenho uma tarefa MSBuild que faz isso (bem como lê uma senha de certificado armazenada fora do repositório ) em https://gist.github.com/gregmac/4cfacea5aaf702365724
fonte
Ele funciona bem substituindo o url do carimbo de data / hora verisign por um destes:
http://timestamp.comodoca.com/authenticode
http://www.trustcenter.de/codesigning/timestamp
fonte
O serviço de carimbo de data / hora da VeriSign é gratuito. Talvez seja por isso que sua confiabilidade é menos do que adequada; eles não dão um orçamento de manutenção!
Definitivamente, esse é um grande problema. O tempo desperdiçado devido a compilações com falha de registro de data e hora do código é um problema crescente em toda a indústria de desenvolvimento de software. Claro, você pode escrever um script complexo para alternar, até encontrar um servidor de carimbo de horário de funcionamento .. mas, realmente?
Devemos exigir melhor. Pagamos MUITO por esses certificados.
Observe que, mais tarde, descobri que servidores de carimbo de data / hora alternativos, dos quais poucos ouviram falar, podem ser usados em períodos em que o Verisign e o Comodo estão fora do ar (geralmente acontece durante o expediente nos dias úteis).
fonte
Qualquer servidor de carimbo de data / hora pode ser usado: recentemente, mudei do servidor de carimbo de data / hora do meu emissor para a Verisign, pois descobri que o servidor da GlobalSign não era confiável. Além disso, a Thawte não executa seu próprio servidor de carimbo de data / hora, mas recomenda que as pessoas usem o da Verisign.
fonte
Normalmente, você pode usar qualquer serviço de carimbo de data / hora que desejar. Embora a maioria dos CAs forneça um serviço de carimbo de data / hora. Exemplos
timestamp.verisign.com foi oficialmente EOL no backend de 2019 para mais informações, minha resposta sobre a pergunta abaixo.
http-timestamp-verisign-com-scripts-timstamp-dll-not-available
fonte
Eu tive o mesmo problema. O servidor verisign não estava acessível em algum momento para alguns arquivos que tentei assinar (mas outros arquivos na mesma compilação foram assinados corretamente).
Eu normalmente tento novamente e funciona, mas hoje, de jeito nenhum.
Então, depois de algumas pesquisas inúteis na internet, tentei colocar http: //*.verisign.com em sites de zona confiável e funcionou ... Por fim, não sei se o servidor teve um problema e agora funciona ou se eu fiz o coisa certa, vai ver nos próximos dias eu acho. Espero que ajude outros que estão bloqueados.
A configuração do servidor: Windows server 2003 sp2, IE8, segurança aprimorada ativada.
fonte
Você pode usar Jsign em vez de signtool para assinar e registrar a data e hora de suas compilações; ele oferece suporte a failover para serviços de registro de data e hora alternativos.
A sintaxe da linha de comando é semelhante a esta:
Você também pode configurar o número de tentativas (com
--tsretries
) e o intervalo entre as tentativas (com--tsretrywait
).fonte