Альтернативные службы меток времени для Authenticode

115

Мы выполняем подписывание кода и отметку времени для всех наших производственных сборок. Иногда (обычно, когда мы собираемся RTM (!)) Сервер отметок времени в Verisign (" http://timestamp.verisign.com/scripts/timstamp.dll ") периодически решает отключаться.

Что делать в этом случае?

  • Должен ли сервер меток времени размещаться в вашем корневом центре сертификации?
  • Существуют ли какие-либо другие серверы временных меток, размещенные в сети, которые мы могли бы использовать вместо Verisign, если их сервер не работает? Приветствуются предложения по другим высокодоступным и бесплатным альтернативам :)
Стивен Коннолли
источник

Ответы:

91

Я использую следующий командный файл, который повторяется не более 300 раз. Есть два аргумента:% 1 - это путь к папке, содержащей пакетный файл, файл pfx и signtool.exe. % 2 - это полный путь к подписываемому файлу. Вы можете вызвать это в событии post build в вашей визуальной студии с помощью чего-то вроде call "$ (SolutionDir) thirdparty \ signed \ sign.bat" "$ (SolutionDir) thirdparty \ signed" "$ (TargetPath)" Я изменил этот командный файл на использовать разные серверы временных меток на каждой итерации. В настоящее время он использует Comodo, Verisign, GlobalSign и Starfield. Надеюсь, это окончательный сценарий подписи;)

@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

Я также поместил http://timestamp.comodoca.com в список надежных сайтов (спасибо Винсу). Я думаю, что это может быть важным шагом. Я обновил корневые сертификаты и на ПК.

Flobadob
источник
3
Я просто тут скучаю. Я знаю, что это старый ответ. Но этот сценарий «почти» идеален, поэтому я хотел бы просто внести свои изменения. Когда сценарий запускается как событие после сборки. Если временная метка не выполняется, но следующая временная метка является успешной, сборка все равно не выполняется, потому что MSBuild отслеживает события signtool.exe и обнаруживает сбой, поэтому считает, что это сбой. У меня это произошло в VS2012 и на машине сборки. Мое решение - изменить временную метку, чтобы абстрагировать ее в другой cmd, чтобы MSBuild не мог шпионить как таковой: start / wait "Sign Tool" / D "% 1" "signtool.exe" timestamp / t %% s% 2
Skintkingle
1
Я не понимаю части "и повторите попытку не более десяти раз ..." . %%aПеременная никогда не используется. Есть ли опечатка в цикле for или в комментарии?
l33t
1
Дополнительное примечание к отличному ответу flobadob. Если вы собираетесь использовать это на этапе пост-сборки в Visual Studio, вам нужно будет использовать оператор «Call». См. Этот пост: Visual Studio Multiple Post Build Commands
GadgetNC,
1
Для sha256 вам нужно теперь использовать / tr " sha256timestamp.ws.symantec.com/sha256/timestamp ", что, кстати, довольно быстро,
Винс,
1
Всем интересно. Да, это значение после /pпароля * .pfx.
JensG
16

Я не уверен, должен ли сервер временных меток принадлежать корневому ЦС или нет.

Мы используем http://timestamp.comodoca.com/authenticode (и имеем сертификат Comodo Authenticode), но на самом деле имеем аналогичную проблему, поскольку их сервер, кажется, иногда выдает ошибку или время ожидания. Мы подписываем как часть ночной (или по запросу) сборки на нашем сервере непрерывной интеграции только для сборок Release (не для сборок Debug).

Я обошел это (в основном) двумя способами:

  • Если вызов signtool.exe не удается, он пытается снова (немедленно) еще дважды
  • Сценарий сборки, используемый для подписи каждого exe за один шаг (а у нас их несколько как часть нашего продукта), а теперь он делает по одному - занимает немного больше времени, но с меньшей вероятностью потерпит неудачу

Между тем, сбои сборки, вызванные проблемами с сервером временных меток, выросли с одного или двух раз в неделю до практически никогда.

EDIT: у меня есть задача MSBuild, которая делает это (а также считывает пароль сертификата, хранящийся вне репозитория ) на https://gist.github.com/gregmac/4cfacea5aaf702365724

Gregmac
источник
12

Он отлично работает, заменяя URL-адрес временной метки verisign одним из следующих:

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

Дэвид
источник
2
Похоже, что метка времени больше не доступна на trustcenter.de: «Symantec Все продукты и услуги, предоставляемые TC TrustCenter GmbH, больше не доступны. Любые вопросы, касающиеся этого, следует направлять по адресу: Symantec TC TrustCenter 24/7 Телефон службы поддержки: +1 -800-579-2848 или + 1-520-477-3104 "
Валдимар
8

Служба отметок времени VeriSign предоставляется бесплатно. Возможно, поэтому его надежность менее чем достаточна; они не выделяют бюджет на обслуживание!

Однозначно это большая проблема. Потеря времени из-за неудачных сборок из-за ошибок с временными метками кода - растущая проблема в индустрии разработки программного обеспечения. Конечно, вы можете написать сложный скрипт для чередования, пока не найдете рабочий сервер отметок времени ... но на самом деле?

Мы должны требовать лучшего. Мы много платим за эти сертификаты.

Обратите внимание, что позже я обнаружил, что альтернативные серверы с отметками времени, о которых мало кто слышал, можно было использовать в периоды, когда Verisign и Comodo не работают (обычно это происходит в рабочее время в рабочие дни).

дьяста
источник
7

Можно использовать любой сервер меток времени: недавно я переключился с сервера меток времени моего эмитента на Verisign, так как обнаружил, что сервер GlobalSign ненадежен. Кроме того, Thawte не запускает свой собственный сервер временных меток, но рекомендует людям использовать Verisign.

BCran
источник
1
Что ж, Thawte - это Verisign, так что.
Пользователь StackExchange 04
4

Обычно вы можете использовать любую службу отметки времени, которую хотите. Хотя большинство центров сертификации предоставляют услугу отметки времени. Примеры

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 был официально EOL в конце 2019 года, чтобы получить дополнительную информацию, я отвечу на вопрос ниже.

http-timestamp-verisign-com-scripts-timstamp-dll-недоступно

RickWeb
источник
искал спецификацию digicert alg! Где это задокументировано?
Яно
1
knowledge.digicert.com/alerts/… надеюсь, это поможет
RickWeb
3

У меня такая же проблема. Сервер verisign иногда был недоступен для некоторых файлов, которые я пытался подписать (но другие файлы в той же сборке были правильно подписаны).

Обычно я пытаюсь повторить попытку, и это работает, но сегодня нет.

Поэтому после некоторых бесполезных исследований в Интернете я попытался поместить http: //*.verisign.com в сайты доверенных зон, и он работает ... Наконец, я не знаю, была ли у сервера проблема и теперь работает, или я сделал правильно, посмотрю в ближайшие дни я думаю. Надеюсь, это может помочь другим, которые заблокированы.

Конфигурация сервера: Windows server 2003 sp2, IE8, усиленная безопасность на.

Винс
источник
Наверное, случайно, поскольку я обнаружил, что этот сайт просто перегружен и закрывается. Вы можете часто видеть это в часы пик.
дяста
1

Вы можете использовать Jsign вместо signtool для подписи и отметки времени ваших сборок, он поддерживает переключение на альтернативные службы отметок времени.

Синтаксис командной строки выглядит так:

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

Вы также можете настроить количество попыток (с --tsretries) и задержку между попытками (с --tsretrywait).

Эммануэль Бур
источник
с таким именем можно подумать, что он может обрабатывать JAR-файлы
caduceus