Serviços alternativos de carimbo de data / hora para Authenticode

115

Executamos assinatura de código e carimbo de data / hora para todas as nossas compilações de produção. Ocasionalmente (geralmente quando estamos prestes a RTM (!)), O servidor de carimbo de data / hora da Verisign (" http://timestamp.verisign.com/scripts/timstamp.dll ") decide ficar offline intermitentemente.

O que devemos fazer neste caso?

  • O servidor de carimbo de data / hora precisa ser hospedado por sua autoridade de certificação raiz?
  • Há algum outro servidor de carimbo de data / hora hospedado em rede que possamos usar em vez do Verisign se o servidor estiver inativo? Sugestões para outras alternativas gratuitas e altamente disponíveis são bem-vindas :)
Stephen Connolly
fonte

Respostas:

91

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.

flobadob
fonte
3
Estou apenas contribuindo aqui. Eu sei que esta é uma resposta antiga. Mas este script é "quase" perfeito, então eu gostaria de apenas contribuir com minha mudança. Quando o script é executado como um evento pós-construção. Se um carimbo de data / hora falhar, mas um carimbo de data / hora seguinte for bem-sucedido, a compilação ainda falhará porque o MSBuild detecta os acontecimentos de signtool.exe e vê uma falha, portanto, pensa que é uma falha. Isso aconteceu no VS2012 e em uma máquina de construção. Minha correção é alterar o carimbo de data / hora para abstraí-lo em outro cmd para que o MSBuild não possa espionar como tal: start / wait "Sign Tool" / D "% 1" "signtool.exe" timestamp / t %% s% 2
Skintkingle
1
Não entendo a parte "e tente novamente no máximo dez vezes ..." . A %%avariável nunca é usada. Há um erro de digitação no loop for ou no comentário?
l33t
1
Observação adicional para a excelente resposta de flobadob. Se você for usar isso em uma etapa de Pós-construção no Visual Studio, precisará usar a instrução "Call". Veja esta postagem: Visual Studio Multiple Post Build Commands
GadgetNC
1
Para sha256, você precisa usar / tr " sha256timestamp.ws.symantec.com/sha256/timestamp " agora, que é bastante rápido, a propósito
Vince
1
Para todos se perguntando. Sim, esse valor depois /pé a senha * .pfx.
JensG
16

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:

  • Se a chamada para signtool.exe falhar, ele tentará novamente (imediatamente) mais duas vezes
  • O script de construção usado para assinar cada exe em uma etapa (e temos vários como parte de nosso produto), e agora ele faz um por um - leva um pouco mais de tempo, mas é menos provável que falhe

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

Gregmac
fonte
12

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

David
fonte
2
Parece que o carimbo de data / hora não está mais disponível no trustcenter.de: "Symantec Todos os produtos e serviços fornecidos pela TC TrustCenter GmbH não estão mais disponíveis. Quaisquer perguntas relacionadas a isso devem ser direcionadas para: Symantec TC TrustCenter Suporte por telefone 24/7 Telefone: +1 -800-579-2848 ou + 1-520-477-3104 "
Valdimar
8

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).

dyasta
fonte
7

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.

BCran
fonte
1
Bem, Thawte é Verisign, então.
Usuário StackExchange de
4

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

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 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

RickWeb
fonte
procurando a especificação digicert alg! Onde isso está documentado?
yano
1
knowledge.digicert.com/alerts/... espero que isso ajude
RickWeb
3

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.

Vince
fonte
Provavelmente coincidência, pois descobri que o site simplesmente fica sobrecarregado e sai do ar. Você pode ver isso frequentemente durante o horário comercial de pico.
dyasta
1

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:

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

Você também pode configurar o número de tentativas (com --tsretries) e o intervalo entre as tentativas (com --tsretrywait).

Emmanuel Bourg
fonte
com um nome como esse você pensaria que ele poderia lidar com JARs
caduceus