Ошибка Signtool: не были найдены сертификаты, которые удовлетворяли бы всем заданным критериям с приложением Магазина Windows?

294

Я пытаюсь подписать пакет appx для Windows 8 с помощью файла pfx, который у меня есть. Я использую команду так:

signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"

И из этого я получаю:

Ошибка SignTool: не найдено сертификатов, соответствующих всем заданным критериям.

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

Earlz
источник
Я думаю, что Signtoolпытается найти сертификат в хранилище доверенных корневых сертификатов, и у вас нет сертификатов подписи кода там.
crea7or
15
У меня была эта ошибка, потому что истек срок действия сертификата, использованного для подписи
Марк Гомер
1
У меня была похожая проблема, и я разместил здесь ответ . Надеюсь это поможет.
Сурен Салука

Ответы:

590

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

Вы можете проверить это, перейдя в свойства проекта> вкладка подписи и проверив данные сертификата.

Вы можете снять флажок «Подписывать манифесты ClickOnce», чтобы отключить подпись.

Подписание недвижимости

Если вы не хотите отключать эту опцию, вам придется установить сертификат.

JDandChips
источник
12
Просто добавьте к тому, что предложил @JDandChips: Для целей отладки и тестирования вы также можете использовать временный тестовый сертификат, нажав кнопку «Создать тестовый сертификат», показанную на скриншоте выше.
Nam
Что значит "установить сертификат"?
Шон Кендл
В моей ситуации сертификат был доступен с машины, на которой он был изначально разработан, поэтому я мог выбрать «Выбрать из файла ...» для установки отсутствующего сертификата. Кроме того, вы всегда можете создать новый и использовать это!
JDandChips
@JDandChips Как вы создаете новый сертификат?
Еротавлас
3
Для новичков VS. Убедитесь, что вы щелкнули правой кнопкой мыши по проекту, а не по решению, потому что это вызовет совершенно другое меню!
B5A7
109

Попробуйте с / debug. 1,2 как в:

signtool sign /debug /f mypfxfile.pfx /p <password> (mydllexectuable).exe

Это поможет вам узнать, что происходит. Вы должны получить вывод, как это:

The following certificates were considered:
    Issued to: <issuer>
    Issued by: <certificate authority> Class 2 Primary Intermediate Server CA
    Expires:   Sun Mar 01 14:18:23 2015
    SHA1 hash: DD0000000000000000000000000000000000D93E

    Issued to: <certificate authority> Certification Authority
    Issued by: <certificate authority> Certification Authority
    Expires:   Wed Sep 17 12:46:36 2036
    SHA1 hash: 3E0000000000000000000000000000000000000F

After EKU filter, 2 certs were left.
After expiry filter, 2 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.

Вы можете увидеть, какой фильтр вызывает ваш сертификат, или если сертификаты не рассматривались.

Я изменил хеш и другую информацию, но вы должны понять. Надеюсь это поможет.


1 Обратите внимание: signtoolв частности, о том, где находится /debugопция. Это должно идти после signзаявления.
2 Также обратите внимание: /debugопция работает только с некоторыми версиями signtool. Версия WDK имеет опцию, а версия Windows SDK - нет.

Даниил
источник
3
Работает для меня. Не то чтобы я понял ответ от signtool, но / debug сделал то, что должен. Upvote!
noelicus
1
Эта команда особенно относится к тому, где вы поставили / debug. Если вы поставите его не по порядку, он сообщит об ошибке.
Даниэль
12
/ debug работает только для определенных версий signtool.exe. Тот, что поставляется с WDK, предоставляет эту опцию, а тот, что в Windows SDK - нет.
Пол Керчер,
3
Кроме того, / debug должен идти после знака signtool, а не между ними.
Денис V
Показывает, что мой сертификат истек. Хорошая работа.
avantprime
36

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

вундеркинд
источник
2
Чтобы проверить срок действия сертификата, перейдите в командную строку, перейдите туда, где находится ваш сертификат, затем введите certutil -dump mycertificate.pfx. Посмотрите на последнюю запись, поскольку первыми являются CA, а не сертификат подписи кода.
HockeyJ
23

Если вам не нужно подписывать приложение, щелкните правой кнопкой мыши ваш проект

Project Properties -> Signing -> uncheck "Sign the ClickOnce Manifest"

Также, как предлагает эта статья MS,

Если вы используете Visual Studio 2008 и нацелены на .NET 3.5 и используете автоматические обновления, вы можете просто изменить сертификат и развернуть новую версию,

nPcomp
источник
1
Вы также можете нажать на создать тестовый сертификат, чтобы продолжить. спасибо
MindRoasterMir
16

просто снимите флажок «Подписывать клик один раз» на вкладке подписи в свойствах проекта, это уберет ошибку, и вы можете создать новый как оттуда.

Сурав Шарма
источник
15

Получил такую ​​же проблему, оказалось, что закрытый ключ к сертификату не имел разрешения.
Чтобы исправить - откройте управление сертификатами, найдите свой сертификат, щелкните правой кнопкой мыши -> Управление личными ключами, а затем в безопасности сверху убедитесь, что ваш пользователь добавлен и у него есть разрешения, которые исправили его для меня.

user3740240
источник
15

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

maridob
источник
1
Да, то есть я боролся 2 дня в поисках этого ответа.
Хакан Фистик,
14

В случае, если кто-то столкнется с этим: моя проблема закончилась тем, что мне нужно было запустить командную строку от имени администратора перед использованием приложения signtool.exe. Тогда все работает чудесно.

Дейв
источник
11
Не помогло в моем случае.
bgplaya
1
Я запускаю signtool из VS2015 в качестве скрипта, и я столкнулся с той же проблемой. Я запустил VS2015 в качестве администратора, и табло смогло подписать мой файл>
hamaney
10

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

тогда иди project properties,

нажмите на signing вкладку и снимите флажок «Подписать манифест ClickOnce».

Описание изображения:

введите описание изображения здесь

введите описание изображения здесь

К вашему сведению, вы также можете увидеть это менее одной минуты видео решение . Приведенное выше изображение взято из видео.

Мухаммед Файзан Хан
источник
1
Вы также можете нажать на создать тестовый сертификат, чтобы продолжить. спасибо
MindRoasterMir
9

Я решил это с помощью /sm флаг, чтобы указать, чтобы искать в хранилище машины вместо хранилища по умолчанию, которое является Моим (локальным пользователем) хранилищем. Кроме того, это может помочь включить отладку для signtool с помощью /debug.

JLE
источник
8

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

  • Установите загруженный сертификат (.crt) в сертификаты (я помещаю его в «личное» хранилище) - щелкните правой кнопкой мыши файл .crt и выберите « Установить сертификат». .
  • Запустить certmgr.mscи экспортировать сертификат (найденный в любом хранилище, которое вы использовали на первом шаге) в виде файла pfx, включая закрытый ключ и расширенные свойства (возможно, ненужные).
  • Используйте экспортированный файл .pfx при подписании проекта
  • Пример signtool: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    где пароль совпадает с паролем, указанным при экспорте
noelicus
источник
1
Спасибо, это помогло. Я использовал .crtфайл, предоставленный Comodo, вместо установки сертификата, а затем экспортировал .pfxфайл.
Джошуа Пинтер
1
Спасибо вам большое!
Бруно Соареш
6

У меня та же проблема, читая некоторые ответы (размещенные здесь), я видел, что мой сертификат истек.

Просто создайте новый из моего стартового проекта. Затем у менеджера сертификатов удалили просроченный сертификат.

Теперь все компилируется нормально.

Хуан Пабло Гомес
источник
5

Критерии включают, среди прочего, имя учетной записи (с чьим закрытым ключом он связан), домен, компанию, срок действия, предполагаемые цели.

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

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

Саймон Хокин
источник
4

У меня было то же самое " После фильтра закрытого ключа, осталось 0 сертификатов », и я потратил слишком много времени, пытаясь выяснить, что означает это сообщение.

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

Что я должен был сделать, это:

  1. Используя Firefox или Internet Explorer, отправьте запрос эмитенту. Это генерирует PRIVATE KEY, который хранится в браузере в режиме без вывода сообщений (в Firefox на несколько секунд появляется диалоговое окно). Обратите внимание, что другие браузеры могут не работать: ваша жизнь слишком коротка, чтобы узнать, работают ли они.

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

  3. Загрузите сертификат (.crt) и импортируйте его в тот же браузер . Браузер теперь имеет как закрытый ключ, так и сертификат .

  4. Экспортируйте сертификат из браузера в виде файла обмена личной информацией (.p12). Вам будет предложено ввести пароль для защиты этого файла.

  5. Сохраните резервную копию файла .p12.

  6. Запустите диспетчер сертификатов (certmgr.msc), щелкните правой кнопкой мыши на хранилище личных сертификатов, выберите Все задачи / Импорт ... и импортируйте файл .p12 в Windows. Вам будет предложено ввести пароль, который вы использовали для защиты файла. На данный момент, в зависимости от ваших требований безопасности, вы можете пометить ключ как экспортируемый, чтобы вы могли восстановить копию из хранилища Windows. Вы также можете отметить, что перед использованием требуется пароль, если вы хотите нарушить пакетные сценарии.

  7. Успешно запустите signtool, вздохните с облегчением и подумайте, сколько жизни вы потратили впустую из-за плохих сообщений об ошибках и плохой или отсутствующей документации.

MZB
источник
2

У меня тоже была эта проблема, много пробовал. Использовал SDK, а также подпись Visual Studio, но везде я получал «Не найдено сертификатов, соответствующих всем заданным критериям».

Решение. Имейте в виду, что если «после фильтра закрытого ключа»: «0 осталось» отображается с параметром signtool sign / debug ..., причина в том, что на вашем ПК нет самого CA в хранилище. Чтобы решить эту проблему, сначала установите CA (в моем случае это файл .crt), затем снова запустите sign. Это должно работать прямо сейчас!

Signtool можно использовать только с ЦС, который запрашивается и принадлежит тому же ПК.

Джон Шеллингерхаут
источник
У меня не было проблем с использованием signtool с ЦС, который пришел с другого ПК.
bparker
2

Моя проблема закончилась тем, что я не понимал параметры signtool. Я предоставил параметру / n что-то, что не соответствовало моему сертификату. Когда я убрал то он перестал жаловаться.

Silwing
источник
2

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

В Visual Studio щелкните правой кнопкой мыши проект в обозревателе решений. Выберите свойства. Выберите Подпись в окне свойств. Нажмите «Создать тестовый сертификат ....». Введите информацию о пароле для тестового сертификата и нажмите ОК.

nate_weldon
источник
2

С / debug, когда вы получаете это сообщение «После фильтра закрытого ключа, осталось 0 сертификатов», одной из причин может быть то, что файл pfx не имеет закрытого ключа. При экспорте установленного сертификата в файл pfx убедитесь, что флажок также включает закрытый ключ.

Прабхакаран Раджагопал
источник
1

Перейти project propertiesи снять все поля сFirm перед инициацией компиляции.

ionsofa
источник