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


10 Answers

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

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

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

Question

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




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

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

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

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

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

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

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

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

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




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




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

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




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




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

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




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

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




FYI

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

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

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




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

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

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

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




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

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

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

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




Related