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.
%%a
Zmienna nigdy nie jest używany. Czy w pętli for lub w komentarzu jest literówka?/p
to hasło * .pfx.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:
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
źródło
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
źródło
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).
źródło
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.
źródło
Zwykle możesz skorzystać z dowolnej usługi znakowania czasem. Chociaż większość CA będzie świadczyć usługę znakowania czasem. Przykłady
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
źródło
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.
źródło
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:
Możesz także skonfigurować liczbę prób (za pomocą
--tsretries
) i opóźnienie między próbami (za pomocą--tsretrywait
).źródło