Невозможно импортировать файл ключа «blah.pfx» - ошибка «Файл ключа может быть защищен паролем» - PullRequest
382 голосов
/ 12 мая 2010

Мы только что обновили наши проекты 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.

Ответы [ 22 ]

436 голосов
/ 15 мая 2010

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

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

На основании вашего поста это будет выглядеть как

sn -i companyname.pfx VS_KEY_3E185446540E7F7A

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

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

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

122 голосов
/ 07 июля 2010

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

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

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

40 голосов
/ 15 ноября 2011

У меня была та же проблема, и удаление магазина и чтение не работало. Я должен был сделать следующее.

  • Получить копию OpenSSL . доступно для Windows . Или используйте коробку Linux, поскольку у них всех есть почти все.

  • Выполните следующее для экспорта в файл ключа:

    openssl pkcs12 -in certfile.pfx -out backupcertfile.key
    
    openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
    

Тогда в свойствах проекта вы можете использовать файл PFX.

34 голосов
/ 27 июля 2011

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

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

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

31 голосов
/ 08 августа 2010

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

29 голосов
/ 22 июня 2011

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

  1. sn -d VS_XXXX
  2. sn -i mykey.pfx VS_XXX
26 голосов
/ 01 февраля 2013

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

Поведение

Я понимаю, что 'sign' применяет строгое имя, а не аутентичный код к DLL или EXE. Вот почему signtool будет работать в этом случае, но 'sign' в 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 с помощью подписи authenticode. Хотя это кажется странным, насколько я понимаю, это правильный способ работы с сертификатами, поскольку строгие имена имеют другое назначение, чем authenticode (подробности о том, как это работает, см. Также по этой ссылке ).
  2. Импортируйте ваш сертификат как KeySpec=2. Процедура для этого подробно описана здесь .

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


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

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

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

9 голосов
/ 17 апреля 2014

Чтобы решить эту проблему в Visual Studio 2012, я щелкаю правой кнопкой мыши проект, свойства -> «подписывание», а затем снимаю флажок «Подписывать манифесты ClickOnce».

8 голосов
/ 29 июля 2015

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

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

enter image description here

  • Visual Studio теперь будет запрашивать пароль. Введите это.

enter image description here

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

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

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

enter image description here

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

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

Подробнее ..

5 голосов
/ 25 мая 2010

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

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

...