visual-studio-2010 - Невозможно импортировать ключевой файл «blah.pfx»-ошибка «Ключ-файл может быть защищен паролем»




passwords (19)

Мы только что обновили наши проекты Visual Studio 2008 до Visual Studio 2010. Все наши сборки были сильно подписаны с использованием сертификата подписи кода Verisign . С момента обновления мы постоянно получаем следующую ошибку:

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

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

  • Переустановите файл ключа из проводника Windows (щелкните правой кнопкой мыши на файле PFX и нажмите «Установить»)
  • Установка Visual Studio 2010 на новую машину впервые запрашивает пароль при первом открытии проекта, а затем он работает. На компьютерах, обновленных с Visual Studio 2008, вы не получите эту опцию.

Я попытался использовать утилиту SN.EXE (инструмент сильного имени), чтобы зарегистрировать ключ с помощью сильного имени CSP, как это предлагает сообщение об ошибке, но всякий раз, когда я запускаю инструмент с любыми параметрами, используя версию, поставляемую с Visual Studio 2010, SN .EXE просто перечисляет аргументы командной строки, а не делает что-либо. Это происходит независимо от того, какие аргументы я поставлю.

Почему это происходит, и каковы четкие шаги по его устранению? Я собираюсь отказаться от установки ClickOnce и подписи кода Microsoft.


Answers

Я обнаружил, что в некоторых случаях вы должны попытаться удалить этот ключ перед его установкой. Итак, сделайте следующее:

  1. sn -d VS_XXXX
  2. sn -i mykey.pfx VS_XXX

В качестве обходного пути я попытался запустить Visual Studio 2010 в качестве администратора, и это сработало для меня.

Надеюсь, это поможет.


Я обнаружил исправление, которое поможет вам успешно построить в среде нескольких разработчиков:

Вместо того, чтобы изменять пароль (который вызывает изменение .pfx), повторно выберите файл .pfx из выпадающего списка. Затем он вызывает диалог пароля. После ввода пароля проект будет построен ОК. Каждый разработчик может сделать это на своей локальной машине, фактически не изменяя файл .pfx.

У меня все еще возникают проблемы с сборкой сборок на нашей серверной машине сборки. Я получаю там же ошибку, но использование метода sn.exe -i не устраняет проблему для сервера buildserver.


Ничто не работало для меня, но затем я пошел и заглянул в диспетчера сертификатов (mmc.exe). Сертификат не был импортирован в личный магазин, поэтому я импортировал его вручную, а затем скомпилировал проект.

См. Подпись подписи ClickOnce и подпись сильного имени с помощью страницы подписи Project Designer Visual Studio, подписи сборок .


Хорошо, это сработало для меня. Откройте старое решение / проект в качестве администратора в Visual Studio 2010 и откройте новое или скопированное решение / проект. В качестве администратора удалите скопированный файл pfk в новом решении / проекте Visual Studio 2010 и перейдите к свойствам проекта и отмените выбор.

Открыв оба проекта, скопируйте их в новый. Перейдите к свойствам проекта и выберите Build. Я открыл и закрыл Visual Studio, а также после удаления из нового проекта, который был создан, прежде чем копировать его из старого проекта и выбрать его. Сначала я получил ошибку в начале этого сообщения, когда копировал проект и пытался его создать.


Я тоже сталкивался с этой проблемой. Я смог решить проблему, выполнив
sn -i <KeyFile> <ContainerName> ( устанавливает пару ключей в именованный контейнер ).

sn обычно устанавливается как часть SDK Windows. Например, C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe . Скорее всего, это место не находится на пути поиска для вашей стандартной среды. Тем не менее, «Developer Command Prompt», установленная Visual Studio, добавляет дополнительную информацию, которая обычно включает правильное местоположение.

На основе вашего сообщения, которое будет выглядеть

sn -i companyname.pfx VS_KEY_3E185446540E7F7A

Это должно быть запущено из местоположения вашего файла PFX, если у вас есть решение, загруженное в VS 2010, вы можете просто щелкнуть правой кнопкой мыши файл pfx из проводника решений и выбрать команду «Открыть командную строку», которая запустит инструмент командной строки .net 2010 cmd в правильный каталог.

Перед выполнением этой команды sn я переустановил pfx, щелкнув правой кнопкой мыши и выбрав установку, однако это не сработало. Просто что-то отметить, так как это может быть сочетание того и другого, что обеспечило решение.

Надеюсь, это поможет решить вашу проблему.


Все описанные здесь методы мне не помогли. Но когда я удалил * .pfx-файл из моего проекта и снова добавил его в сборку сборки, я построил проект без ошибок! Я не могу объяснить причины. Но это сработало для меня.


Я говорил слишком рано! Rebuild принес ошибки обратно в игру ...

Я нашел, что это работает - щелкните правой кнопкой мыши в обозревателе решений и исключите его из проекта. Нажмите « Показать все файлы» , щелкните правой кнопкой мыши и теперь снова включите его в проект. Теперь отмените ожидающие изменения ...

По какой-то причине это разобрало это для меня и было относительно безболезненным!


В моем сценарии служба сборки не использовала ту же учетную запись пользователя, что я импортировал ключ с помощью sn.exe .

После изменения учетной записи на мою учетную запись администратора все работает нормально.


Как оригинальный автор работы над сообщением об ошибке соединения, есть два варианта этого сообщения (я обнаружил позже)

Для одного варианта вы используете sn.exe (обычно, если вы делаете сильное именование), чтобы импортировать ключ в хранилище сильных имен.

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

Надеюсь это поможет.


Я решил эту проблему для себя, изменив следующую строку в файле .csproj проекта Visual Studio:

Это заставило ошибку «не импортировать»:

<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>

При изменении значения на значение false ошибка исчезла.


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

Поведение

Я понимаю, что «знак» использует сильное имя, а не аутентификацию для DLL или EXE. Вот почему signtool будет работать в этом случае, но «знак» в Visual Studio не будет работать.

причина

Раньше у меня был опыт работы с сертификатами Verisign. У них есть KeySpec=2 в сертификате, который используется с функциональностью «sign» в Visual Studio. Эти сертификаты отлично работают как для Visual Studio, так и для signtool.

Теперь я купил сертификаты от Comodo, у которых есть неправильный KeySpec=1 в сертификатах подписи кода. Это означает, что эти сертификаты отлично работают с signtool (authenticode), но не с сильным именем (выпадающим значком).

Решение

Существует два способа решить эту проблему:

  1. Создайте отдельный сертификат для вашего сильного имени, используя sn -k [name].snk . Подпишите сборку, используя snk, и затем используйте signtool с сертификатом подписи кода, чтобы подписывать DLL / EXE с подписью подлинника. Хотя это кажется странным, из того, что я понимаю, это правильный способ справиться с сертификатами, потому что сильные имена имеют другую цель, чем аутентификацию (см. Также эту ссылку для подробностей о том, как это работает).
  2. Импортируйте сертификат как KeySpec=2 . Процедура для этого подробно описана здесь .

Поскольку я хочу использовать несколько сильных имен, в настоящее время я использую параметр (1), хотя также работает опция (2).

Чтобы это решение никогда не потерялось в будущем, рассмотрим процедуру решения 2:

  1. Использование MMC «Certifates» экспортирует существующий набор ключей ( KeySpec=1 ) в файл PFX. Примечание. Сохраните этот файл в безопасном месте и проверьте, можно ли импортировать файл на другом компьютере, если вы действительно хотите его безопасно!
  2. Удалите существующий сертификат из хранилища криптохранилищ (stlll с помощью MMC).
  3. Откройте приглашение CMD.
  4. Импортируйте файл PFX с помощью этой команды:
    1. certutil -importPFX -user <pfxfilename> AT_SIGNATURE
    2. Введите парольную фразу для pfx при появлении запроса.

Теперь у вас должен быть ключ / сертификат с KeySpec=2 . При необходимости вы можете теперь экспортировать это в другой файл PFX с помощью MMC.


FYI

Я использовал sn.exe с флагом -p в официальный код PFX-кода (купленный как подписание кода), как показано ниже, в котором создан файл SNK и в Visual Studio 2013 был просмотрен файл SNK для использования.

  • Что разрешило проблему с паролем.

Но проблема в том, что он продолжает говорить: «Ключевой файл * .. SNK не содержит пару открытого / закрытого ключа».


Повторный выбор ключевого файла в поле со списком и ввод пароля помогает нам.

Но это необходимо делать каждый раз, когда файл ключа изменяется, и кажется, что это не нормально.


Я переустановил файл Key (pfx) в раскрывающемся списке «Выбрать сильный ключевой файл», затем предоставил пароль в всплывающем окне «ВВОД ПАРОЛЬ». Сохраненный мой проект и выполнил rebuild.build.

  • Откройте Свойства проекта.
  • Нажмите на раздел Подпись.
  • Где он говорит: «Выберите сильный файл ключевого слова:», отмените текущее значение в раскрывающемся списке:

  • Теперь Visual Studio предложит вам ввести пароль. Введите его.

  • Сохраните проект и выполните восстановление.

  • Если вы получите сообщение об ошибке: «Была сделана попытка ссылаться на токен, который не существует», просто проигнорируйте его и выполните следующие шаги

  • Нажмите кнопку «Сменить пароль»:

  • Введите исходный пароль во все три поля и нажмите «ОК». Если вы хотите изменить свой пароль (или если ваш старый пароль не соответствует требованиям сложности), вы можете сделать это сейчас.

  • Сохраните проект и выполните восстановление.

Больше информации..


VSCommands 2010 (плагин для Visual Studio) может исправить это для вас автоматически - просто щелкните правой кнопкой мыши по ошибке и нажмите «Применить исправление» в меню. Вы можете получить его из галереи Visual Studio .


У меня была такая же проблема после переноса моей установки Windows на SSD . Ни один из других решений не работал для меня.

Моим решением было открыть файл проекта в « Notepad и удалить все ссылки на клавиши PFX. После сохранения файла откройте решение в Visual Studio. Перейдите в проект -> Свойства -> Подписание. Вы не должны видеть какие-либо ключи, перечисленные в поле «выбрать сильное имя ключевого файла». В поле со списком перейдите к ключу, выберите его, и теперь ваш проект может быть построен.


Моя проблема заключалась в том, что TFS Build Controller работает как сетевой сервис, и по какой-то причине я не понял, почему сертификаты службы Visual Studio Build Host не используются. Я изменил идентификатор службы Visual Studio Build на что-то более управляемое, убедился, что у него есть права на сервере TFS, и вручную добавил сертификаты с помощью MMC.

Проблема заключалась также в том, что MSBuild не может добавлять сертификаты, защищенные паролем, в хранилище.


Когда вы добавляете ссылку, Visual Studio записывает [AssemblyVersion] сборки в файл проекта. Это важно. Если вы, скажем, создадите исправление ошибок через год, то вы хотите убедиться, что вы перестраиваете проект с той же версией ссылки, чтобы это было истинное падение. Вы получите сообщение об ошибке, если эталонная сборка изменилась.

Но это не всегда желательно. Некоторые программисты автоматически расширяют версию сборки, генерируя новую версию каждый раз, когда они восстанавливаются. Хотя публичный интерфейс сборки никогда не менялся. Некоторые настраивают свой проект, используя Nuget для получения библиотек и позволяя ему автоматически обновлять библиотеку при наличии новой версии. Они хотят установить для свойства Specific Version значение False для подавления ошибки компиляции.

Довольно важно понять последствия, вам нужно перераспределить всю сборку программы, чтобы избежать несчастных случаев. Несоответствие версии во время выполнения приводит к сбою программы и может быть подавлено только с помощью <bindingRedirect> в файле .config, что является рискованным.







visual-studio-2010 visual-studio passwords pfx