Альтернативные метки времени для Authenticode
Мы выполняем подписывание кода и отметку времени для всех наших сборок. Иногда (обычно, когда мы собираемся к RTM (!)) Сервер меток времени в Verisign (" http://timestamp.verisign.com/scripts/timstamp.dll") решает периодически отключаться от сети.
Что нам делать в этом случае?
- Нужно ли размещать сервер отметок времени вашим корневым центром сертификации?
- Существуют ли другие серверы временных меток, размещенные в сети, которые мы могли бы использовать вместо Verisign, если их сервер не работает? Предложения для других высокодоступных и бесплатных альтернатив приветствуются:)
6 ответов
Я использую следующий пакетный файл, который зацикливается не более 300 раз. Существует два аргумента:%1 - это путь к папке, содержащей пакетный файл, файл pfx и signtool.exe. %2 - полный путь к файлу, который подписывается. Это можно вызвать в событии пост-сборки Visual Studio с помощью чего-то вроде вызова "$(SolutionDir)thirdparty\signature \sign.bat" "$(SolutionDir)thirdparty\signature" "$(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/ на надежных сайтах (спасибо Винсу). Я думаю, что это может быть важным шагом. Я обновил корневые сертификаты на ПК тоже.
Я не уверен, должен ли сервер отметок времени принадлежать корневому ЦС или нет.
Мы используем http://timestamp.comodoca.com/authenticode (и у нас есть сертификат Comodo authenticode), но на самом деле мы сталкиваемся с аналогичной проблемой, поскольку их сервер иногда выдает ошибку или время ожидания. Мы подписываемся как часть ночной (или по требованию) сборки на нашем сервере непрерывной интеграции только для сборок Release (не для сборок Debug).
Я обошел это (в основном) двумя способами:
- В случае сбоя вызова signtool.exe, он пытается снова (немедленно) еще дважды
- Сценарий сборки, используемый для подписи каждого exe-файла за один шаг (а у нас их несколько в составе нашего продукта), и теперь он выполняется один за другим - занимает немного больше времени, но с меньшей вероятностью завершится неудачей.
Между ними сбои сборки, вызванные проблемами с метками времени, перешли с одного-двух раз в неделю практически на никогда.
РЕДАКТИРОВАТЬ: у меня есть задача MSBuild, которая делает это (а также читает пароль сертификата, хранящийся вне хранилища) по адресу https://gist.github.com/gregmac/4cfacea5aaf702365724
Обычно вы можете использовать любую службу отметки времени, которую хотите. Хотя большинство центров сертификации предоставляют услугу отметки времени. Примеры
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 года, чтобы получить дополнительную информацию, я отвечу на вопрос ниже.
Это прекрасно работает, заменив URL-адрес временной метки verisign одним из следующих:
http://timestamp.comodoca.com/authenticode
http://www.trustcenter.de/codesigning/timestamp
Служба меток времени VeriSign предоставляется бесплатно. Возможно, это может быть причиной того, что его надежность менее чем адекватна; они не дают ему бюджет на содержание!
Определенно это большая проблема. Потеря времени из-за неудачных сборок из-за сбоев с метками времени в коде является растущей проблемой в индустрии разработки программного обеспечения. Конечно, вы можете написать сложный скрипт для поворота, пока не найдете сервер с метками рабочего времени... но на самом деле?
Мы должны требовать лучшего. Мы платим много за эти сертификаты.
Обратите внимание, что позже я обнаружил, что альтернативные серверы с метками времени, о которых мало кто слышал, могут быть полезны в периоды, когда Verisign и Comodo не работают (обычно это происходит в рабочие часы в рабочие дни).
Можно использовать любой сервер отметок времени: я недавно переключился с сервера отметок времени своего эмитента на Verisign, поскольку обнаружил, что сервер GlobalSign ненадежен. Кроме того, Thawte не запускает свой собственный сервер отметок времени, но рекомендует людям использовать Verisign.
У меня такая же проблема. Иногда сервер verisign не был доступен для некоторых файлов, которые я пытался подписать (но другие файлы в той же сборке были подписаны правильно).
Я обычно повторяю, и это работает, но сегодня, никак.
Поэтому после некоторого бесполезного исследования интернета я попытался разместить http://*.verisign.com на сайтах доверенной зоны, и это работает... Наконец, я не знаю, была ли проблема с сервером, и теперь работает, или я сделал Правильно, увидим в ближайшие дни я думаю. Надеюсь, что это может помочь другим, которые заблокированы.
Конфигурация сервера: Windows Server 2003 sp2, IE8, усиленная защита включена.
Вы можете использовать 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
).