Распаковывать, изменять и перепаковывать файлы в MSI? - PullRequest
2 голосов
/ 26 октября 2010

Я пытаюсь найти самый простой и безопасный способ для двоичных файлов с подписью Authenticode в одном из моих проектов.

Самый простой способ сделать это - получить результат компиляции--завершенный установочный пакет, содержащий все мои двоичные файлы - извлеките из него сборки, подпишите их, затем перепакуйте эти подписанные сборки в MSI, который затем будет подписан.

Много информации о распаковке файлов из MSI,но ничего о переупаковке их.Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Вы не указываете, какова ваша система сборки, но (чрезмерно упрощенный) поток, через который проходят мои проекты, выглядит следующим образом (я использую nant-задачи практически для всего, запущенного с CruiseControl.net)

  1. Получите все из системы контроля версий
  2. Построить чистый проект
  3. Получить неподписанные файлы
  4. Используя signtool.exe подписать все соответствующие файлы (например, exe, dll, ocx)
  5. Сборка MSI (с WiX)
  6. Выполнение некоторых пользовательских задач после сборки на MSI
  7. Цифровая подпись MSI
  8. (в зависимости от параметров сборки) Сжатие MSI с помощью загрузчика
  9. Подпишитесь на загрузчик
  10. Загрузка в область подготовки
  11. Email Dev + QA команды, что сборка готова к тестированию.

Если по пути ничего не получится, просто напишите команде разработчиков.

Вы должны быть в состоянии сделать это с MSBuild, Nant или множеством других инструментов. Вероятно, это потребует небольшой пользовательской работы в некоторых местах, но конечным результатом является надежная система сборки, которая требует ноль взаимодействия человека со сборкой (если кто-то не хочет «форсировать» сборку, даже если это просто нажав кнопку на веб-странице или что-то еще)

1 голос
/ 12 апреля 2011

Редактирование моего исходного ответа ....

Если вы хотите встроить подпись в процесс автоматической сборки, вы можете просто использовать задачу MSBuild SignFile, которая оборачивает API подписи authenticode http://msdn.microsoft.com/en-us/library/ms164304.aspx

В качестве альтернативы просто используйте вызов SignTool.exe.

Вам потребуется установить сертификат публикации программного обеспечения на машину, используя certmgr.exe или оснастку mmc для сертификатов.После установки в локальное хранилище сертификатов вы просто ссылаетесь на него, используя отпечаток SHA, который вы можете найти в свойствах сертификата, или просто перечислив сертификат в certmgr.exe.

Мы должны регулярно обновлять наши сертификаты, чтобыу нас есть дополнительные шаги в нашей сборке, чтобы повторно импортировать сертификат локально в начале сборки и извлечь хеш сертификата.Я бы не советовал хранить хэш в контроле исходного кода на тот случай, если вам придется вернуться и собрать старую версию - она ​​должна быть частью вашей конфигурации среды, например, env var или чего-то еще, что можно отделить от вашего исходного кода.

Кроме того, не забудьте поставить метку времени для подписанных файлов, чтобы гарантировать подлинность подписи.Я бы также посоветовал вам отделить подпись от отметки времени.Метка времени - это сетевая операция, которая может иногда работать неправильно, поэтому полезно различать ошибку подписи и ошибку метки времени, поскольку ошибка метки времени является проблемой только для сборок с поддержкой Gold, которые могут быть опубликованы публично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...