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




visual-studio-2010 visual-studio (15)

FYI

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

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

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

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


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


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

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


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


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

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


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

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


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

Поведение

Я понимаю, что «знак» использует сильное имя, а не аутентификацию для 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.


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

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

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

Я сделал «Выбор из файла ...» на моем pfx, и он решил проблему.


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

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

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

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

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


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

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


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

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

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

выберите сертификат

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

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


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

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

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


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

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

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