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

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

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

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

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

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

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

22 ответов


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

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


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

вместо изменения пароля (что вызывает .pfx, чтобы быть изменен), выберите the .pfx-файл из combobox. Затем вызывается диалоговое окно пароля. После ввода пароля проект построит OK. Каждый разработчик может сделать это на своей локальной машине, фактически не изменяя.файл pfx.

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


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

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

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

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

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


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


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

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

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


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

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

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

поведение

Я понимаю, что "знак" применяет строгое имя, а не authenticode к DLL или EXE. Вот почему signtool будет работа в этом случае, но "вход" в Visual studio не будет работа.

причина

в прошлом у меня был опыт работы с сертификатами от Verisign. У них есть KeySpec=2 в сертификате-который используется с функциональностью "знак" в 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" Certifiates " экспортируйте существующий набор ключей (KeySpec=1) в файл PFX. Примечание: пожалуйста, резервное копирование этого файла в безопасное место и проверить, если файл может быть импортирован ok на другой машине, если вы действительно хотите играть в нее безопасно!
  2. удалите существующий сертификат из хранилища криптографии (stlll с помощью MMC).
  3. откройте приглашение CMD.
  4. импортируйте файл PFX с помощью этой команды:
    1. certutil -importPFX -user <pfxfilename> AT_SIGNATURE
    2. Enter парольная фраза для pfx при появлении запроса.

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


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


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

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


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

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

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

надеюсь, что это помогает.


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

посмотреть подпись Манифеста ClickOnce и подпись сборки строгого имени с помощью страницы подписи конструктора проектов Visual Studio, подписи сборок.


Я повторно выбрал файл ключа (pfx) в раскрывающемся списке "выберите файл ключа строгого имени", а затем предоставил пароль во всплывающем окне "введите пароль". Спас мой проект и перестроил.сборка удалась.

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

enter image description here

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

enter image description here

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

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

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

enter image description here

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

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

Подробнее..


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

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


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

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


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

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


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


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

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


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

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

кроме того, на панели" подписать манифесты ClickOnce " информация о сертификате не заполняется.

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


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

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

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

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

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

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


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

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


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

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

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

изменение значения на false заставило ошибку исчезнуть.


к твоему сведению!--5-->

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

  • который решил проблему с паролем.

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

enter image description here