Помилка Signtool: не знайдено сертифікатів, які відповідали б усім заданим критеріям у додатку Windows Store?


293

Я намагаюся підписати пакет програм для Windows 8 з файлом pfx, який у мене є. Я використовую таку команду:

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

І з цього я отримую:

Помилка SignTool: не знайдено сертифікатів, які відповідали б усім заданим критеріям.

Яким "критеріям" я не відповідають? Це лише для тестування, тому це самопідписані сертифікати. Я намагався імпортувати ключ, а потім підписати його, але це завжди призводить до тієї ж помилки. Як це виправити?


Я думаю, що Signtoolце намагається знайти сертифікат у магазині надійних кореневих сертифікатів, і у вас немає сертифікатів підпису коду.
crea7 або

15
У мене була така помилка, тому що термін дії сертифіката, який було використано для підписання, закінчився
Mark Homer

1
У мене було подібне питання і тут було розміщено відповідь . Сподіваюсь, це допомагає.
SurenSaluka

Відповіді:


589

При отриманні цієї помилки через Visual Studio це сталося через те, що було встановлено сертифікат підпису, який відповідає комп’ютеру, на якому він був спочатку розроблений.

Ви можете перевірити це, перейшовши на властивості проекту> вкладку підписання та перевіривши дані про сертифікат.

Ви можете зняти прапорець "Підписати маніфести ClickOnce", щоб відключити підпис.

Властивості підписання

Якщо ви не хочете вимкнути цю опцію, вам доведеться встановити сертифікат.


12
Просто для додання запропонованого @JDandChips: Для налагодження та тестування ви також можете використовувати тимчасовий сертифікат тестування, натиснувши кнопку "Створити сертифікат тесту", показану на знімку екрана вище.
нам

Що ви маєте на увазі "встановити сертифікат"?
Шон Кендл

У моїй ситуації сертифікат був доступний на машині, на якій він був спочатку розроблений, тому я міг вибрати "Вибрати з файлу ...", щоб встановити відсутній сертифікат. Ви також можете завжди створити нову та використовувати це!
JDandChips

@JDandChips Як створити новий сертифікат?
erotavlas

3
Для ВШ новачків. Переконайтеся, що ви клацніть правою кнопкою миші на проекті, а не на рішенні, тому що це спливе зовсім інше меню!
B5A7

109

Спробуйте з / налагодження. 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
Працює для мене. Не те, щоб я розумів відповідь від signtool, але / debug зробив те, що повинен. Оновлення!
noelicus

1
Ця команда конкретно стосується місця, де ви ставите / debug. Якщо ви вийшли з ладу, вона повідомить про помилку.
Даніель

12
/ debug працює лише для конкретних версій signtool.exe. Той, що постачається разом із WDK, надає цей параметр, той, що входить до пакету Windows SDK, не має.
Пол Кертчер

3
Також / налагодження має пройти після знаку signtool, а не між ними.
Денис V

Показує, що термін дії мого сертифіката закінчився. Хороша робота.
авантприм

36

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


2
Щоб перевірити термін дії сертифіката, перейдіть до командного рядка, перейдіть до місця вашого сертифіката та введіть certutil -dump mycertificate.pfx. Подивіться на останній запис, оскільки першими є ЦА, а не ваш сертифікат для підписання коду.
ХокейJ

23

Якщо вам не потрібно підписувати додаток, клацніть правою кнопкою миші на вашому проекті

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

Також, як підказує ця стаття MS,

Якщо ви використовуєте Visual Studio 2008 і орієнтуєтесь на .NET 3.5 та використовуєте автоматичні оновлення, ви можете просто змінити сертифікат і розгорнути нову версію,


1
Ви також можете натиснути на створення сертифікату тесту для продовження. дякую
MindRoasterMir

16

просто зніміть прапорець "Підписати натискання одного разу" на вкладці підписання у властивостях проекту, це видалить помилку, і ви можете створити нову, як звідти.


15

Отримав ту саму проблему, виявилося, що приватний ключ у сертифікаті не мав дозволу.
Щоб виправити - відкрийте управління сертифікатом, знайдіть свій сертифікат, клацніть правою кнопкою миші -> Керуйте приватними ключами, а потім у безпеці зверху переконайтеся, що ваш користувач додано та надано дозволи, які це виправили для мене.


15

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


1
Так, тобто я два дні намагався шукати цю відповідь.
Hakan Fıstık

14

У випадку, якщо хтось інший натрапив на це: Моя проблема виявилася тим, що мені потрібно запустити командний рядок як адміністратор, перш ніж використовувати додаток signtool.exe. Тоді все чудово працює.


11
Не допомогло в моєму випадку.
bgplaya

1
Я запускаю signtool від VS2015 як сценарій, і я стикався з тією ж проблемою. Я запустив VS2015 як адміністратор, і signtool зміг підписати свій файл>
hamaney,

10

Я отримав таку ж проблему в розробці своїх консольних додатків і як швидке вирішення ,

перейти до project propertiesтого,

натисніть на signingвкладку і зніміть прапорець "Підпишіть маніфест ClickOnce".

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

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

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

FYI Ви також можете переглянути це менш однохвилинне відео рішення . Наведене вище зображення зроблене з відео.


1
Ви також можете натиснути на створення сертифікату тесту для продовження. дякую
MindRoasterMir

9

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


8

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

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

1
Спасибі, це зробило трюк. Я використовував .crtфайл, який надав Comodo замість встановлення сертифіката, а потім експортував .pfxфайл.
Джошуа Пінтер

1
Дуже дякую!
Бруно Соарес

6

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

Просто створіть нове з мого стартового проекту. Потім у менеджера сертифікатів видалили сертифікат, що минув.

Тепер все складено добре.


5

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

Існує багато різних можливих причин виникнення цієї помилки, деякі з них уже перераховані. Ось ще одна порада: імпортуючи сертифікат, переконайтеся, що ви працюєте з оригінальним файлом, отриманим від органу сертифікації (CA) , інакше деякі з властивостей можуть бути втрачені.

Приклад: нещодавно я намагався імпортувати сертифікат, експортований з іншого облікового запису на одній машині. Сертифікат став видимим для мого облікового запису, але не був пов’язаний з моїм обліковим записом, і внаслідок цього signtoolвідмовився розпізнавати його, не надаючи явно ім'я файлу та пароль. Що може бути недостатньо захищеним, якщо це виконано як частина процесу збирання та явно виписано у пакетному файлі чи вихідному файлі. (Імпорт оригінального сертифіката, виданого CA, вирішив це.)


4

У мене було те саме повідомлення « Після закритого ключа, залишилось 0 сертів », і я витратив занадто багато свого життя, намагаючись зрозуміти, що означає це повідомлення.

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

Що я повинен був зробити:

  1. За допомогою Firefox або Internet Explorer подайте запит емітенту. Це генерує ПРИЄМНИЙ КЛЮЧ, який мовчки зберігається у браузері (діалогове вікно з'являється на частку секунди у Firefox). Зауважте, що інші веб-переглядачі можуть не працювати: ваше життя занадто коротке, щоб дізнатися, чи є вони.

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

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

  4. Експортуйте сертифікат із веб-переглядача як файл обміну особистою інформацією (.p12). Вам буде запропоновано надати пароль для захисту цього файлу.

  5. Зберігайте резервну копію файлу .p12.

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

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


2

У мене теж було це питання, багато пробував. Використовувався SDK, а також підпису Visual Studio, але скрізь я отримав "Не знайдено сертифікатів, які відповідали б усім заданим критеріям".

Рішення. Майте на увазі, що, якщо "після фільтра приватного ключа": "0 зліва" з'являється з опцією Signtool знак / налагодження ..., причина полягає в тому, що ваш ПК не має СА в магазині. Щоб вирішити це, спочатку встановіть CA (у моєму випадку .crt файл), а потім запустіть знак ще раз. Це має працювати прямо зараз!

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


Я не мав жодних проблем із використанням сигнтолу з ЦА, що надходив з іншого ПК.
bparker

2

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


2

У мене була подібна проблема, ім’я комп'ютера змінилося, а термін дії сертифікату закінчився. Мені вдалося вирішити цю проблему, створивши новий сертифікат тесту.

У Visual Studio клацніть правою кнопкою миші на проект у провіднику рішень. Виберіть властивості. Виберіть вікно Вхідні властивості. Натисніть "Створити тестовий сертифікат ....". Введіть інформацію про пароль для сертифікату і натисніть кнопку ОК.


2

З / налагодження, коли ви отримуєте це повідомлення "Після фільтра приватного ключа, залишилось 0 сертів.", Одна з причин може полягати в тому, що у файлу pfx немає приватного ключа. Коли ви експортуєте встановлений сертифікат у файл pfx, переконайтеся, що увімкніть прапорець також включення приватного ключа.


1

Перейдіть project propertiesта зніміть прапорці з усіх попередніх полів Firmперед початком компіляції

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.