Как вы развертываете собственную службу Timestamping Authenticode?

Я хотел бы отметить мой DLL-файл с помощью моей собственной службы Authenticode Timestamping. Возможно ли это? Как я мог этого достичь?

4 ответов


вы можете разработать свой собственный сервис timestamping. Вы можете написать сервер TSP (RFC 3161), но Authenticode не использует форматы RFC 3161, но PKCS#7/PKCS#9, как описано в статья MSDN (которые можно реализовать). Наши!--3-->SecureBlackbox компоненты включают компонент сервера timestamping, который поддерживает оба формата. Обновление: последние обновления Authenticode используют стандартные метки времени RFC 3161.

но проблема в том, чтобы получить сертификат, который можно будет используйте для подписи меток времени. Этот сертификат должен быть выдан одним из ЦС, и, как я понимаю, существуют серьезные требования в отношении аспектов управления и инфраструктуры запуска сервера временных меток. В частности, вам нужно иметь безопасное оборудование timestamping. Я не углублялся в этот вопрос, но эти аспекты намного сложнее, чем написание фрагмента кода.

все еще, если вы запускаете свою собственную инфраструктуру PKI (имейте свои собственные Доверенные корневые сертификаты и CA сертификаты), то проблема наличия доверенного сертификата timestamping решается автоматически - вы можете создать свой собственный сертификат.


вам нужно написать пользовательский сервер http Timestamp. Он должен следовать RFC 3161 правила протокола отметки времени (TSP).

когда вы подписываете DLL для authenticode с помощью такого инструмента, как программы signtool.exe в Windows SDK можно указать url-адрес сервера меток времени (с помощью параметра / t swich. См. также /тр /тд). Затем вы указываете на свой сервер.

см. здесь на SO для связанного вопроса:надежные временные метки-понимание формат (rfc3161)

а также: альтернативные службы timestamping для Authenticode


вы можете настроить свой собственный орган штамповки времени (TSA), поддерживающий метки времени Authenticode (и/или RFC#3161) с помощью SignServer.

см.https://www.signserver.org для загрузки и инструкции по установке. Вкратце важными шагами являются:

  1. убедитесь, что у вас пререквизиты:

    • Java
    • сервер приложений (т. е. WildFly)
    • Apache Ant для развертывание
  2. загрузите последнюю версию из https://signserver.org или https://sourceforge.net/projects/signserver/files/signserver/ .

  3. настройка приложения-сервера

    • для HTTPS (необязательно)
    • чтобы веб-службы работали
    • патч с последними исправлениями безопасности
  4. Настройка SignServer развертывание

    • установить базу данных.name=nodb и база данных.nodb.location=/an/empty/folder/as / db в conf / signserver_deploy.свойства
  5. Развернуть SignServer

    • экспорт APPSRV_HOME=/opt/wildfly-9/
    • bin / ant deploy
    • запустить сервер приложений /opt/wildfly-9/bin/standalone.sh
  6. проверьте, что сервер запущен

    • bin / signserver метод getstatus кратко все
  7. настройка крипто маркера

    • bin / signserver setproperties doc / sample-configs / keystore-крипто-конфигурация.свойства
    • bin / signserver перезагрузить 1
    • bin / signserver getstatus краткое все
  8. настройка образца времени-штамп подписывающего

    • bin / signserver setproperties doc / sample-configs / qs_timestamp_configuration.свойства
    • bin / signserver перезагрузить 2
    • bin / signserver getstatus краткое все
  9. Проверьте отметку времени подписывающего


предполагая, что вы хотите это для тестирования, если вы счастливы использовать signtool.exe с переключателем /tr вам не нужно смотреть на RFC, потому что openssl реализует достаточно этого для вас. Просто напишите обработчик HTTP POST на вашем любимом языке, передайте опубликованные данные в" openssl ts-reply " дословно, отправьте обратно данные ответа openssl TS. Это достаточно хорошо, чтобы обмануть " signtool.exe verify /pa", даже если он не строго следует RFC.

EDIT: кажется, проект Java Signserver с открытым исходным кодом дает вам сервер, обрабатывающий msauthenticode (/t) и rfc3161 (/tr) timestamping из коробки. Конфигурация Signserver включала слишком много зависимостей для меня, поэтому я вместо этого взломал его модульный тест для msauthenticode timestamping, прикрепленный на небольшом HTTP-сервере к тестовому набору и с небольшой работой - мои навыки Java в лучшем случае посредственны - имеют запущенный сервер метки времени authenticode для использования в разработке и проверили, что созданные таким образом метки времени не тема этот вопрос. Я не могу выпустить исходный код, однако, следуя этому совету, вы должны получить что-то работающее довольно быстро.