Как вручную установить пароль для цели подписи MSBuild?

Мы создаем плагин для Outlook на C #. Он без проблем собирается в VS и подписывается временным сертификатом pfx. Мы хотим поместить процесс сборки в Jenkins и запустить его автоматически.

Мы попытались запустить решение VS с помощью MSBuild. Он отлично работает на машине разработки, но в Jenkins есть ошибка:

Невозможно импортировать следующий ключевой файл: OutlookPlugin_TemporaryKey.pfx. Ключевой файл может быть защищен паролем. Чтобы исправить это, попробуйте снова импортировать сертификат или вручную установить сертификат в CSP строгого имени со следующим именем контейнера ключей: VS_KEY_A688DC31A30F3EF1

Мы не знаем, как указать пароль pfx для автоматической сборки. Или иначе автоматизируйте процесс подписи.

Мы нашли одно решение: открыть проект в VS на том же компьютере и от имени того же пользователя, что и для автоматизированного процесса, и ввести пароль. Это не работает, вероятно, потому, что Дженкинс каждый раз стирает рабочее пространство. Если мы попытаемся скомпилировать без подписи, а затем подписать его, он жалуется, что сборка ClickOnce должна быть подписана. Кажется, что плагины Office должны использовать ClickOnce.

Итак, как указать пароль pfx где-нибудь в файле сборки?

Мы используем VS 2010 с инструментами Office.


person alexsimi    schedule 11.09.2012    source источник


Ответы (2)


Создайте файл (локальный или в хорошо известной сетевой папке), содержащий пароль в качестве свойства и ссылку на него из сценария MSBuild. Установите разрешения для файла, чтобы только учетная запись сборки могла читать этот файл. Обратите внимание, что любой, у кого есть доступ администратора к машине сборки или кто знает пароль учетной записи сборки, сможет прочитать пароль. В конце концов, серебряной пули здесь нет. Если MSBuild сможет найти / расшифровать любой пароль, это сможет сделать и человек.

Если вас беспокоит безопасность закрытого ключа, подумайте о том, чтобы выделить подписание в отдельный этап и сохранить закрытый ключ на смарт-карте. Это может быть излишним, но это одна из лучших общедоступных защит.

В противном случае просто добавьте пароль как свойство. Как вы знаете, файлы проекта - это просто сценарии MSBuild. Например:

<PropertyGroup>
    <PfxPassword>password</PfxPassword>
</PropertyGroup>

<!-- Sample sign task -->
<SignTask>
    <File>MyOutlookPlugin.dll</File>
    <KeyFile>OutlookPlugin_TemporaryKey.pfx</KeyFile>
    <Password>$(PfxPassword)</Password>
</SignTask>

См. http://msdn.microsoft.com/en-us/library/ms171458(v=vs.80).aspx для получения дополнительной информации о свойствах MSBuild.

person akton    schedule 11.09.2012
comment
Главное беспокойство здесь не в безопасности. Мы просто не знаем, как ввести пароль в сценарий MSBuild. Мы используем файл sln из проекта как сценарий MSBuild. - person alexsimi; 11.09.2012
comment
@alexsimi Добавлена ​​информация о том, как добавить свойство MSBuild. - person akton; 11.09.2012
comment
У нас нет SignTask в нашем файле csproj. Когда мы запускаем MSBuild в консоли, мы видим выполняемые задачи, но не можем сказать, какая из них является знаковой задачей, поэтому мы можем ее переопределить. Вероятно, потому что этот проект является плагином ClickOnce для Outlook и чем-то отличается от обычного проекта C #. - person alexsimi; 11.09.2012
comment
@alexsimi Попробуйте настроить пароль в Visual Studio, затем сделайте копию файла проекта. Измените пароль и выполните сравнение файла. Это скажет вам, где хранится пароль. Возможно, вам также потребуется проверить csproj.user и подобные файлы. - person akton; 11.09.2012
comment
Файл @alexsimi .sln не является скриптом msbuild. AFAIK вы можете создать файл pfx без пароля, если это вариант (это может быть не из-за очевидной проблемы с безопасностью). Я думаю, вам нужно изучить реальный скрипт msbuild, который запускается в вашем CI, и выяснить, какая именно задача используется для подписи вашего exe. Затем проверьте его, чтобы понять, как указать пароль для pfx. Я подозреваю, что это будет сделано через свойство, вам просто нужно найти точное название свойства - person Alexey Shcherbak; 15.09.2012
comment
После добавления ‹SignTask› в мой файл msbuild я получаю сообщение об ошибке. Элемент ‹SignTask› под элементом ‹Project› не распознан. Что мне нужно сделать, чтобы это было распознано? Спасибо. - person Confused; 06.11.2012
comment
@ В замешательстве, у меня то же самое! - person Nicholas Mayne; 25.07.2019

У нас возникли проблемы при сборке проекта с помощью MSBuild и Bamboo. Для нас исправление заключалось в удалении следующей строки из файла .csproj.

<AssemblyOriginatorKeyFile>applicationcert.pfx</AssemblyOriginatorKeyFile>
person Mr.O    schedule 09.07.2015
comment
действительно ли удаление этого винта связано с процессом сборки или установки? - person SpoiledTechie.com; 21.03.2016