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

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

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

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

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

Я пробовал использовать утилиту ClickOnce и подписания кода Microsoft.

Ответ 1

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

sn обычно устанавливается как часть SDK Windows. Например 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, щелкнув правой кнопкой мыши и выбрав установку, однако это не сработало. Просто что-то примечание, поскольку это может быть комбинация того и другого, что обеспечивала решение.

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

  • sn -d VS_XXXX
  • sn -i mykey.pfx VS_XXX

Ответ 7

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

Поведение

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

Причина

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

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

Решение

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

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

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


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

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

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

Ответ 8

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

Ответ 9

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

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

enter image description here

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

enter image description here

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

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

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

enter image description here

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

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

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

Ответ 10

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

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

Ответ 11

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

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

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

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

Ответ 12

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

См. ClickOnce Manifest Signing и сильное имя Сборка подписи с помощью страницы подписи дизайнера Visual Studio, подписывание ассемблирования.

Ответ 13

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

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

Ответ 14

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

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

Ответ 15

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

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

Ответ 16

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

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

Ответ 17

У меня была аналогичная проблема, но после выбора pfx в "Сильном ключевом файле с именем" ComboBox и при вводе пароля у меня все же появилась аналогичная ошибка (без части названия контейнера):

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

Кроме того, не была заполнена панель сведений о сертификате "Подписать манифест ClickOnce".

Я сделал "Выбрать из файла..." на моем pfx и решил проблему.

Ответ 18

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

Ответ 19

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

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

Ответ 20

Это решило мою проблему: открой свой VS проект

Дважды щелкните на Package.appxmanifest

Перейти на вкладку Упаковка

нажмите выбрать сертификат

нажмите настроить сертификат

выберите из файла и используйте example.pfx, это единство или что-либо еще созданное

Ответ 21

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

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

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

Изменение значения на false привело к ошибке.

Ответ 22

Я получил ту же ошибку. В моем случае я попробовал все вышеперечисленное, но не смог получить результат.

Я наконец понял, что в моем случае причина ошибки состояла в том, что пароль сертификата не был введен или введен неправильно. Ошибка исчезла, когда я правильно и правильно ввел пароль. успешный

Ответ 23

FYI

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

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

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

enter image description here