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

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

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

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

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

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


person Earlz    schedule 08.04.2014    source источник
comment
Я думаю, что Signtool пытается найти сертификат в хранилище доверенных корневых сертификатов, а у вас там нет сертификатов для подписи кода.   -  person crea7or    schedule 09.04.2014
comment
У меня была эта ошибка, потому что срок действия сертификата, который использовался для подписи, истек.   -  person Mark Homer    schedule 04.11.2015
comment
У меня была аналогичная проблема, и я разместил здесь ответ. Надеюсь это поможет.   -  person SurenSaluka    schedule 16.09.2019


Ответы (19)


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

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

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

Свойства подписи

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

person JDandChips    schedule 16.12.2014
comment
Просто чтобы добавить к тому, что предлагает @JDandChips: для целей отладки и тестирования вы также можете использовать временный тестовый сертификат, нажав кнопку «Создать тестовый сертификат», показанную на скриншоте выше. - person nam; 30.07.2015
comment
Что значит установить сертификат? - person Sean Kendle; 16.03.2016
comment
В моей ситуации сертификат был доступен с машины, на которой он был первоначально разработан, поэтому я мог выбрать «Выбрать из файла ...», чтобы установить недостающий сертификат. В качестве альтернативы вы всегда можете создать новый и использовать его! - person JDandChips; 16.03.2016
comment
@JDandChips Как создать новый сертификат? - person erotavlas; 29.11.2016
comment
Для новичков в VS. Убедитесь, что вы щелкнули правой кнопкой мыши по проекту, а не по решению, потому что это приведет к появлению совершенно другого меню! - person B5A7; 02.06.2017
comment
У меня возникла эта проблема после изменения пароля администратора моей машины сборки. У меня нет VS, чтобы открыть решение на машине сборки, поэтому я снова переустановил сертификат в обоих местах: Personal / Certificates и Trusted Root Certification Authority / Certificates. Тем не менее не повезло, вы, ребята, придумали этот сценарий - person OmGanesh; 14.01.2019
comment
Примечание для людей, которые предпочитают продукты JetBrains: вы должны использовать VS для этого. Райдер, похоже, не поддерживает такой сертификат. - person Hutch Moore; 08.12.2020
comment
Это было для меня решением - с той разницей, что проект был старым и тестовый сертификат нужно было просто обновить. - person Gustav; 18.12.2020

Попробуйте использовать /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 - нет.

person Daniel    schedule 14.04.2014
comment
Работает для меня. Не то, чтобы я понял ответ signtool, но / debug сделал то, что должен. Голосовать за! - person noelicus; 10.02.2015
comment
Эта команда предназначена для того, где вы помещаете / debug. Если вы поставите ее не в порядке, она сообщит об ошибке. - person Daniel; 21.02.2015
comment
/ debug работает только для определенных версий signtool.exe. Тот, который поставляется с WDK, предоставляет эту возможность, а тот, который из Windows SDK - нет. - person Paul Kertscher; 24.02.2015
comment
Кроме того, / debug должен идти после знака signtool, а не между ними. - person Denis V; 17.07.2015
comment
Показывает, что срок действия моего сертификата истек. Молодец. - person Observer; 02.09.2015
comment
Я пробовал это, и в нем перечислены сертификаты, которые он пытается сопоставить, но помимо этого я не знаю, как мне поступить с этой информацией. Любая помощь будет принята - person dhiraj suvarna; 29.11.2016
comment
Параметр / debug перечисляет сертификаты компьютеров, которые он ищет, а затем сообщает вам, почему или если он отфильтровал некоторые. Это помогло мне напомнить, что сертификаты подписи кода ищутся в контейнере компьютера (возможно, по умолчанию?), А не в контейнере пользователя. - person AbeyMarquez; 24.11.2020

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

затем перейдите к project properties,

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

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

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

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

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

person Muhammad Faizan Khan    schedule 12.11.2019
comment
Вы также можете нажать на «Создать тестовый сертификат», чтобы продолжить. Благодарность - person MindRoasterMir; 26.04.2020
comment
Снятие этого флажка означает, что, когда третьи лица попытаются установить ваше программное обеспечение из Интернета, Безопасность Windows заблокирует запуск приложения. Вам нужен правильный сертификат подписи кода, и вы должны подписать им манифест ClickOne. - person Chris Bordeman; 08.07.2020
comment
@ChrisBordeman Спасибо за информацию! Я просто поделился быстрым решением, так что разработка не должна останавливаться :) В любом случае, функция безопасности должна быть исправлена ​​должным образом, как вы упомянули. - person Muhammad Faizan Khan; 17.07.2020
comment
Имейте в виду, что если приложение уже было развернуто с сертификатом до ошибки, а затем вы снимите этот флажок, для конечных пользователей это будет похоже на установку нового приложения. Это также означает, что они не смогут автоматически обновляться. Если вы не выполняете развертывание, это может быть быстрым решением, но вам придется исправить это перед повторным развертыванием. - person bkqc; 01.09.2020

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

person whizkid    schedule 19.10.2015
comment
Чтобы проверить срок действия сертификата, перейдите в командную строку, перейдите туда, где находится ваш сертификат, затем введите certutil -dump mycertificate.pfx. Посмотрите на последнюю запись, так как первые - это CA, а не ваш сертификат подписи кода. - person HockeyJ; 01.06.2017

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

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

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

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

person nPcomp    schedule 17.01.2019
comment
Вы также можете нажать на «Создать тестовый сертификат», чтобы продолжить. Благодарность - person MindRoasterMir; 26.04.2020

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

person maridob    schedule 22.10.2014
comment
Да, то есть 2 дня бился в поисках этого ответа. - person Hakan Fıstık; 02.06.2017
comment
где поменять эту опцию? - person sinsedrix; 18.01.2021

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

person Sourav Sharma    schedule 21.01.2018

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

person user3740240    schedule 21.11.2014

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

person Dave    schedule 20.08.2014
comment
В моем случае не помогло. - person bgplaya; 15.10.2014
comment
Я запускаю signtool из VS2015 в качестве сценария, и я столкнулся с той же проблемой. Я запустил VS2015 как администратор, и signtool смог подписать мой файл › - person hamaney; 11.07.2018

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

person jle    schedule 23.05.2017

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

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

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

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

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

person Juan Pablo Gomez    schedule 15.08.2016

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

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

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

person Simon Hawkin    schedule 05.02.2015

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

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

Я должен был сделать вот что:

  1. Используя Firefox или Internet Explorer, отправьте запрос издателю. Это генерирует ЧАСТНЫЙ КЛЮЧ, который автоматически сохраняется браузером (в Firefox на долю секунды появляется диалоговое окно). Обратите внимание, что другие браузеры могут не работать: ваша жизнь слишком коротка, чтобы понять, работают ли они.

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

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

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

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

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

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

person MZB    schedule 12.02.2019

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

person Silwing    schedule 31.10.2016

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

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

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

person John Schellingerhout    schedule 15.06.2016
comment
У меня не было проблем с использованием signtool с CA, пришедшим с другого компьютера. - person bparker; 24.03.2018

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

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

person nate_weldon    schedule 26.04.2017

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

person Prabhakaran Rajagopal    schedule 04.07.2017

Перейдите к project properties и снимите флажки со всех полей из Firm перед запуском компиляции

person ionsofa    schedule 19.11.2014