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

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

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

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

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

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

Ответы

Ответ 1

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

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

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

Signing Properties

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

Ответ 2

Попробуйте /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 имеет такую возможность, в то время как версия SDK для Windows этого не делает.

Ответ 3

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

Ответ 4

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

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

Кроме того, как эта статья MS предлагает,

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

  • Установите загруженный сертификат (.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)
    где пароль такой же, как и при экспорте

Ответ 11

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

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

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

Ответ 12

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

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

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

Ответ 13

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

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

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

Ответ 14

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

Ответ 15

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

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

Ответ 16

С помощью /debug, когда вы получаете это сообщение "After Private Key filter, осталось 0 сертификатов". Одна из причин может заключаться в том, что файл pfx не имеет закрытого ключа. При экспорте установленного сертификата в файл pfx убедитесь, что флажок также включает закрытый ключ.

Ответ 17

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

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

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

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

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

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

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

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

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

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

Ответ 18

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