Альтернативні послуги міток часу для Authenticode


115

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

Що нам робити в цьому випадку?

  • Чи повинен розміщувати сервер часових міток ваш кореневий сертифікаційний орган?
  • Чи є інші сервери часових міток, розміщених у мережі, які ми могли б використовувати замість Verisign, якщо їх сервер не працює? Пропозиції щодо інших високодоступних та безкоштовних альтернатив вітаються :)

Відповіді:


91

Я використовую наступний пакетний файл, який циклічний максимум в 300 разів. Є два аргументи,% 1 - шлях до папки, що містить пакетний файл, pfx-файл та signtool.exe. % 2 - це повний шлях до підписаного файлу. Ви можете зателефонувати цьому у своїй візуальній студії після створення події зі схожим викликом "$ (SolutionDir) thirdparty \ підпис \ sign.bat" "$ (SolutionDir) thirdparty \ підписання" "$ (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 на надійних сайтах (спасибі Вінс). Я думаю, що це може бути важливим кроком. Я також оновив кореневі сертифікати на ПК.


3
Я просто чіп тут. Я знаю, що це стара відповідь. Але цей сценарій "майже" ідеальний, тому я хотів би просто змінити свою зміну. Коли сценарій запускається як подія після складання. Якщо часова марка не вдається, але наступна мітка успішна, збірка все-таки не працює, оскільки MSBuild шпигує за подіями signtool.exe і бачить невдачу, таким чином, вважає, що це провал. У мене це траплялось у VS2012 та зі складеної машини. Моє виправлення полягає в тому, щоб змінити часову позначку, щоб її абстрагувати на іншу cmd, щоб MSBuild не могла шпигувати як така: запустити / почекати "Sign Tool" / D "% 1" "signtool.exe" timetamp / t %% s% 2
Skintkingle

1
Я не розумію частини "і повторюй максимум десять разів ..." . %%aМінлива ніколи не використовується. Чи є помилка в циклі for або в коментарі?
l33t

1
Додаткова примітка до відмінної відповіді flobadob. Якщо ви збираєтеся використовувати це на кроці після побудови у візуальній студії, вам потрібно буде використовувати оператор "Дзвінок". Дивіться цей пост: Команди Visual Studio Multiple Post Build
GadgetNC

1
Для sha256 вам потрібно використовувати / tr " sha256timestamp.ws.symantec.com/sha256/timestamp ", який, до речі, досить швидкий
Vince

1
Для всіх цікавих. Так, це значення після /p- це * .pfx пароль.
JensG

16

Я не впевнений, чи повинен сервер часової мітки належати кореневому ЦА чи ні.

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

Я обійшов це (в основному) двома способами:

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

Між ними, збої в побудові, спричинені проблемами з сервером часових міток, перейшли від одного або двох разів на тиждень до практично ніколи.

EDIT: У мене є завдання MSBuild, яке виконує це (а також читає пароль сертифіката, що зберігається поза сховищем ) за адресою https://gist.github.com/gregmac/4cfacea5aaf702365724


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

8

Послуга відмітки часу VeriSign безкоштовна. Це може бути можливо тому, що її надійність є менш ніж достатньою; вони не дають йому бюджету на утримання!

Однозначно це велика проблема. Втрачений час через невдалі збірки з-за відмов часу відмітки коду є все більшою проблемою у всій галузі розробки програмного забезпечення. Звичайно, ви можете написати складний сценарій для обертання, поки не знайдете сервер штампування робочого часу .. але, справді?

Ми повинні вимагати кращого. Ми платимо МНОГО за ці сертифікати.

Зауважте, що пізніше я знайшов альтернативні сервери часових штампів, про які мало хто чув, було чудово використовувати в періоди, коли Verisign і Comodo не працюють (зазвичай це відбувається в робочий час у робочі дні).


7

Можна використовувати будь-який сервер міток часу: нещодавно я перейшов з сервера часових міток мого емітента на Verisign, оскільки виявив, що сервер GlobalSign ненадійний. Крім того, Thawte не запускає власний сервер часових позначок, але рекомендує людям використовувати Verisign's.


1
Ну, Thawte Verisign, так.
Користувач StackExchange

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-script-timstamp-dll-not-available


шукав специфікацію alger digicert! Де це документально зафіксовано?
яно

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


з такою назвою, яку ви могли б подумати, вона може поводитися з JARs
кадуцей
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.