Alternatywne usługi znaczników czasu dla Authenticode

115

Wykonujemy podpisywanie kodu i znakowanie czasowe dla wszystkich naszych kompilacji produkcyjnych. Czasami (zwykle, gdy mamy zamiar uruchomić RTM (!)) Serwer sygnatury czasowej firmy Verisign („ http://timestamp.verisign.com/scripts/timstamp.dll ”) decyduje się sporadycznie przejść do trybu offline.

Co powinniśmy zrobić w takim przypadku?

  • Czy serwer sygnatury czasowej musi być obsługiwany przez główny urząd certyfikacji?
  • Czy są jakieś inne hostowane w sieci serwery sygnatur czasowych, których moglibyśmy użyć zamiast Verisign, gdyby ich serwer był wyłączony? Mile widziane są sugestie dotyczące innych wysoce dostępnych i bezpłatnych alternatyw :)
Stephen Connolly
źródło

Odpowiedzi:

91

Używam następującego pliku wsadowego, który zapętla maksymalnie 300 razy. Istnieją dwa argumenty,% 1 to ścieżka do folderu zawierającego plik wsadowy, plik pfx i signtool.exe. % 2 to pełna ścieżka do podpisywanego pliku. Możesz nazwać to zdarzeniem po kompilacji w swoim Visual Studio za pomocą czegoś takiego jak wywołanie „$ (SolutionDir) thirdparty \ signing \ sign.bat” „$ (SolutionDir) thirdparty \ signing” „$ (TargetPath)” Zmodyfikowałem ten plik wsadowy, aby używaj różnych serwerów sygnatur czasowych w każdej iteracji. Obecnie korzysta z Comodo, Verisign, GlobalSign i Starfield. Mam nadzieję, że to jest ostateczny skrypt podpisywania;)

@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

Umieściłem również http://timestamp.comodoca.com w zaufanych witrynach (dzięki Vince). Myślę, że to może być ważny krok. Zaktualizowałem również certyfikaty główne na komputerze.

flobadob
źródło
3
Po prostu się tu wbijam. Wiem, że to stara odpowiedź. Ale ten skrypt jest „prawie” doskonały, więc chciałbym po prostu dodać swoją zmianę. Gdy skrypt jest uruchamiany jako zdarzenie po kompilacji. Jeśli sygnatura czasowa nie powiedzie się, ale pomyślna jest następująca po niej sygnatura czasowa, kompilacja nadal kończy się niepowodzeniem, ponieważ program MSBuild śledzi zdarzenia związane z signtool.exe i widzi awarię, dlatego uważa, że ​​jest to awaria. Miałem to w VS2012 i na maszynie budującej. Moją poprawką jest zmiana sygnatury czasowej w celu przeniesienia jej do innego cmd, aby MSBuild nie mógł szpiegować jako takiego: uruchom / czekaj "Narzędzie podpisywania" / D "% 1" "signtool.exe" znacznik czasu / t %% s% 2
Skintkingle
1
Nie rozumiem części „i spróbuj ponownie maksymalnie dziesięć razy ...” . %%aZmienna nigdy nie jest używany. Czy w pętli for lub w komentarzu jest literówka?
l33t
1
Dodatkowa uwaga do doskonałej odpowiedzi flobadoba. Jeśli zamierzasz użyć tego w kroku po kompilacji w programie Visual Studio, będziesz musiał użyć instrukcji „Call”. Zobacz ten post: Visual Studio Multiple Post Build Commands
GadgetNC
1
W przypadku sha256 musisz teraz użyć / tr " sha256timestamp.ws.symantec.com/sha256/timestamp ", co przy okazji jest dość szybkie
Vince
1
Dla wszystkich, którzy się zastanawiają. Tak, ta wartość po /pto hasło * .pfx.
JensG
16

Nie jestem pewien, czy serwer sygnatury czasowej musi należeć do głównego urzędu certyfikacji, czy nie.

Używamy http://timestamp.comodoca.com/authenticode (i mamy certyfikat Comodo Authenticode), ale w rzeczywistości mamy podobny problem, ponieważ ich serwer wydaje się czasami wyświetlać błąd lub limit czasu. Podpisujemy się jako część nocnej (lub na żądanie) kompilacji na naszym serwerze ciągłej integracji tylko dla wersji Release (nie dla wersji Debug).

Obejrzałem to (głównie) na dwa sposoby:

  • Jeśli wywołanie signtool.exe nie powiedzie się, spróbuje ponownie (natychmiast) jeszcze dwukrotnie
  • Skrypt budujący używany do podpisywania każdego exe w jednym kroku (a mamy kilka w ramach naszego produktu), a teraz robi to pojedynczo - trwa nieco dłużej, ale jest mniej prawdopodobne, że zawiedzie

Pomiędzy nimi błędy kompilacji spowodowane problemami z serwerem sygnatur czasowych zmieniły się z raz lub dwa razy w tygodniu na praktycznie nigdy.

EDYCJA: Mam zadanie MSBuild, które to robi (a także odczytuje hasło certyfikatu przechowywane poza repozytorium ) na https://gist.github.com/gregmac/4cfacea5aaf702365724

gregmac
źródło
12

Działa dobrze, zastępując adres URL znacznika czasu Verisign jednym z poniższych:

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

David
źródło
2
Wygląda na to, że sygnatura czasowa nie jest już dostępna w witrynie trustcenter.de: „Wszystkie produkty i usługi firmy Symantec dostarczane przez TC TrustCenter GmbH nie są już dostępne. Wszelkie pytania w tym zakresie należy kierować na adres: Symantec TC TrustCenter całodobowa pomoc telefoniczna: +1 -800-579-2848 lub + 1-520-477-3104 "
Valdimar
8

Usługa znakowania czasowego VeriSign jest bezpłatna. Być może dlatego jego niezawodność jest mniej niż wystarczająca; nie zapewniają utrzymania budżetu!

Zdecydowanie jest to duży problem. Zmarnowany czas z powodu nieudanych kompilacji spowodowanych błędami znakowania czasowego kodu jest coraz większym problemem w branży tworzenia oprogramowania. Jasne, możesz napisać złożony skrypt, który będzie się zmieniał, aż znajdziesz działający serwer oznaczania czasu… ale naprawdę?

Powinniśmy żądać lepszego. Za te certyfikaty płacimy DUŻO.

Zauważ, że później odkryłem, że alternatywne serwery znaczników czasu, o których niewielu słyszało, były w porządku w okresach, w których Verisign i Comodo są wyłączone (zwykle dzieje się to w godzinach pracy w dni robocze).

dyasta
źródło
7

Można użyć dowolnego serwera sygnatur czasowych: niedawno przełączyłem się z serwera sygnatur czasowych mojego wystawcy na Verisign, ponieważ odkryłem, że serwer GlobalSign jest zawodny. Ponadto Thawte nie prowadzi własnego serwera sygnatur czasowych, ale zaleca użytkownikom korzystanie z serwera Verisign.

BCran
źródło
1
Cóż, Thawte to Verisign, więc.
Użytkownik StackExchange,
4

Zwykle możesz skorzystać z dowolnej usługi znakowania czasem. Chociaż większość CA będzie świadczyć usługę znakowania czasem. Przykłady

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 był oficjalnie EOL na zapleczu 2019, aby uzyskać więcej informacji, odpowiedziała na poniższe pytanie.

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

RickWeb
źródło
szukałem specyfikacji digicert alg! Gdzie to jest udokumentowane?
yano
1
Knowledge.digicert.com/alerts/ ... mam nadzieję, że to pomoże
RickWeb
3

Miałem ten sam problem. Serwer verisign był czasami nieosiągalny dla niektórych plików, które próbowałem podpisać (ale inne pliki w tej samej kompilacji były poprawnie podpisane).

Zwykle próbuję ponownie i to działa, ale dzisiaj nie ma mowy.

Więc po kilku nietypowych poszukiwaniach w Internecie próbowałem umieścić http: //*.verisign.com w witrynach zaufanych stref i działa ... W końcu nie wiem, czy serwer miał problem i teraz działa, czy zrobiłem dobra rzecz, do zobaczenia w ciągu najbliższych dni. Mam nadzieję, że może to pomóc innym, którzy są zablokowani.

Konfiguracja serwera: Windows Server 2003 sp2, IE8, wzmocnione zabezpieczenia włączone.

Vince
źródło
Prawdopodobnie przypadkowo, ponieważ stwierdzam, że strona jest po prostu przytłoczona i przestaje działać. Możesz to zobaczyć często w godzinach szczytu.
dyasta
1

Możesz użyć Jsign zamiast signtool do podpisywania i oznaczania czasu swoich kompilacji, obsługuje przełączanie awaryjne na alternatywne usługi znaczników czasu.

Składnia wiersza poleceń wygląda następująco:

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

Możesz także skonfigurować liczbę prób (za pomocą --tsretries) i opóźnienie między próbami (za pomocą --tsretrywait).

Emmanuel Bourg
źródło
z taką nazwą, że można by pomyśleć, że poradzi sobie z plikami JAR
kaduceusz