it-swarm.com.ru

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

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

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

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

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

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

231
Earlz

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

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

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

Signing Properties

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

506
JDandChips

Попробуйте с/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 - нет.

84
Daniel

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

30
whizkid

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

15
Sourav Sharma

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

14
user3740240

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

12
Dave

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

11
maridob

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

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

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

6
jle

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

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

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

5
Juan Pablo Gomez

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

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

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

5
Simon Hawkin

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

2
Silwing

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

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

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

2
John Schellingerhout

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

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

2
nate_weldon

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

2
Prabhakaran Rajagopal

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

1
ionsofa

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

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

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

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

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

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

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

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

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

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

0
MZB

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

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

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

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

0
nPcomp