Błąd Signtool: Nie znaleziono certyfikatów spełniających wszystkie podane kryteria w aplikacji Windows Store?


293

Próbuję podpisać pakiet aplikacji systemu Windows 8 za pomocą pliku pfx, który mam. Używam polecenia takiego:

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

I z tego otrzymuję:

Błąd SignTool: Nie znaleziono certyfikatów spełniających wszystkie podane kryteria.

Jakie „kryteria” nie spełniam? To jest tylko do testowania, więc są to certyfikaty z podpisem własnym. Próbowałem zaimportować klucz, a następnie go podpisać, ale zawsze powoduje to ten sam błąd. Jak to naprawić?


Myślę, że Signtoolto próbuje znaleźć certyfikat w zaufanym magazynie certyfikatów głównych i nie ma tam certyfikatów do podpisywania kodu.
crea7or

15
Miałem ten błąd, ponieważ wygasł certyfikat użyty do podpisania
Mark Homer

1
Miałem podobny problem i opublikowałem tutaj odpowiedź . Mam nadzieję że to pomoże.
SurenSaluka

Odpowiedzi:


589

Podczas otrzymywania tego błędu za pośrednictwem programu Visual Studio było to spowodowane tym, że konfiguracja certyfikatu do podpisywania była zgodna z komputerem, na którym został pierwotnie opracowany.

Możesz to sprawdzić, przechodząc do właściwości projektu> karty podpisywania i sprawdzając szczegóły certyfikatu.

Możesz odznaczyć „Podpisz manifesty ClickOnce”, aby wyłączyć podpisywanie.

Właściwości podpisywania

Jeśli nie chcesz wyłączać tej opcji, będziesz musiał zainstalować certyfikat.


12
Aby dodać do sugestii @JDandChips: Do celów debugowania i testowania możesz również użyć tymczasowego certyfikatu testowego, klikając przycisk „Utwórz certyfikat testowy” pokazany na powyższym zrzucie ekranu.
nam

Co masz na myśli mówiąc „zainstaluj certyfikat”?
Sean Kendle,

W mojej sytuacji certyfikat był dostępny z komputera, na którym został pierwotnie opracowany, więc mogłem wybrać „Wybierz z pliku ...”, aby zainstalować brakujący certyfikat. Alternatywnie możesz zawsze utworzyć nowy i użyć go!
JDandChips

@JDandChips Jak utworzyć nowy certyfikat?
erotavlas

3
Dla początkujących VS. Upewnij się, że kliknąłeś prawym przyciskiem myszy na projekt, a nie na rozwiązanie, ponieważ wyświetli się zupełnie inne menu!
B5A7

109

Spróbuj z / debugowania. 1,2 Jak w:

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

Pomoże Ci dowiedzieć się, co się dzieje. Powinieneś otrzymać wynik w następujący sposób:

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.

Możesz zobaczyć, który filtr powoduje, że twój certyfikat nie działa lub jeśli nie wzięto pod uwagę żadnych certyfikatów.

Zmieniłem skróty i inne informacje, ale powinieneś o tym pomyśleć. Mam nadzieję że to pomoże.


1 Uwaga: signtooldotyczy w szczególności miejsca, w którym /debugumieszczona jest opcja. Musi iść po signoświadczeniu.
2 Uwaga: ta /debugopcja działa tylko z niektórymi wersjami signtool. Wersja WDK ma opcję, podczas gdy wersja Windows SDK nie.


3
Pracuje dla mnie. Nie, że rozumiem odpowiedź z signtool, ale / debug zrobił to, co powinien. Głosuj!
noelicus

1
To polecenie jest szczególnie ważne w przypadku umieszczenia / debugowania. Jeśli ustawisz go w niewłaściwej kolejności, zgłosi błąd.
Daniel

12
/ debug działa tylko dla określonych wersji signtool.exe. Ten, który jest dostarczany z WDK, zapewnia tę opcję, ten z Windows SDK nie.
Paul Kertscher

3
Ponadto, / debugowanie musi następować po znaku signtool, a nie pomiędzy.
Denis V

Pokazuje, że mój certyfikat wygasł. Dobra robota.
avantprime

36

Zawsze najpierw sprawdź datę ważności certyfikatu, ponieważ większość certyfikatów ma datę ważności. W moim przypadku certyfikat wygasł i próbowałem zbudować projekt.


2
Aby sprawdzić wygaśnięcie certyfikatu, przejdź do wiersza polecenia, przejdź do miejsca, w którym znajduje się certyfikat, a następnie wpisz certutil -dump mycertificate.pfx. Spójrz na ostatni wpis, ponieważ pierwsze to urząd certyfikacji, a nie certyfikat podpisu kodu.
HockeyJ

23

Jeśli nie musisz podpisywać aplikacji, kliknij projekt prawym przyciskiem myszy

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

Również, jak sugeruje ten artykuł MS,

Jeśli używasz programu Visual Studio 2008 i celujesz w .NET 3.5 i używasz automatycznych aktualizacji, możesz po prostu zmienić certyfikat i wdrożyć nową wersję,


1
Możesz także kliknąć przycisk Utwórz certyfikat testowy, aby kontynuować. dzięki
MindRoasterMir

16

po prostu usuń zaznaczenie opcji „Podpisz raz manifest” na karcie podpisywania we właściwościach projektu, usunie to błąd i od tego momentu możesz utworzyć nowy.


15

Masz ten sam problem, okazało się, że klucz prywatny do certyfikatu nie miał pozwolenia.
Aby to naprawić - otwórz zarządzanie certyfikatem, znajdź swój certyfikat, kliknij prawym przyciskiem myszy -> Zarządzaj kluczami prywatnymi, a następnie w zabezpieczeniach na górze upewnij się, że użytkownik został dodany i ma uprawnienia, które go naprawiły.


15

W moim przypadku mam niewłaściwy typ certyfikatu, który próbuję powiązać.
Miałem „Uwierzytelnianie serwera” zamiast „Podpisywanie kodu” .
Powinieneś być w stanie to zobaczyć w przystawce Certyfikat w sekcji Zamierzone przeznaczenie.
Potem po prostu działa dobrze.


1
Tak, to znaczy walczyłem przez 2 dni, szukając tej odpowiedzi.
Hakan Fıstık

14

W przypadku, gdy ktoś inny na to wpadnie: Moim problemem było to, że musiałem uruchomić wiersz polecenia jako administrator przed użyciem aplikacji signtool.exe. Wtedy wszystko działa cudownie.


11
W moim przypadku nie pomogło.
bgplaya

1
Używam signtool z VS2015 jako skryptu i napotkałem ten sam problem. Uruchomiłem VS2015 jako administrator i signtool mógł podpisać mój plik>
hamaney,


9

Rozwiązałem ten problem, używając /smflagi, aby określić, aby szukać w sklepie maszyny zamiast domyślnego, którym jest sklep Mój (użytkownik lokalny). Może także pomóc włączyć debugowanie dla signtool przy użyciu /debug.


8

Miałem ten problem i nie jestem do końca pewien, który krok poniżej sprawił, że zadziałał, ale mam nadzieję, że pomoże to komuś innemu ... oto co zrobiłem:

  • Zainstaluj pobrany certyfikat (.crt) w certyfikatach (umieszczam go w „osobistym” sklepie) - kliknij prawym przyciskiem myszy plik .crt i kliknij Zainstaluj certyfikat .
  • Uruchom certmgr.msci wyeksportuj certyfikat (znaleziony w dowolnym sklepie, którego użyłeś w pierwszym kroku) jako plik pfx zawierający klucz prywatny i rozszerzone właściwości (prawdopodobnie niepotrzebne)
  • Użyj podpisanego pliku .pfx podczas podpisywania swojego projektu
  • Przykład signtool: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    gdzie hasło jest takie samo, jak podane podczas eksportu

1
Dzięki, to załatwiło sprawę. Użyłem .crtpliku dostarczonego przez Comodo zamiast instalować certyfikat, a następnie wyeksportować .pfxplik.
Joshua Pinter

1
Dziękuję bardzo!
Bruno Soares,

6

Mam ten sam problem, czytając niektóre odpowiedzi (zamieszczone tutaj), widziałem, że mój certyfikat wygasł.

Po prostu stwórz nowy z mojego początkowego projektu. Następnie menedżer certyfikatów usunął wygasły certyfikat.

Teraz wszystko się kompiluje.


5

Kryteria obejmują między innymi nazwę konta (z którym powiązany jest klucz prywatny), domenę, firmę, datę ważności, zamierzone cele.

Istnieje wiele różnych możliwych przyczyn tego błędu, niektóre zostały już wymienione. Oto kolejna wskazówka: podczas importowania certyfikatu upewnij się, że pracujesz z oryginalnym plikiem otrzymanym od urzędu certyfikacji , w przeciwnym razie niektóre właściwości mogą zostać utracone.

Przykład: ostatnio próbowałem zaimportować certyfikat wyeksportowany z innego konta na tym samym komputerze. Certyfikat stał się widoczny dla mojego konta, ale nie został powiązany z moim kontem, w wyniku czego signtoolodmówił jego rozpoznania bez wyraźnego podania nazwy pliku i hasła. Które, wykonane w ramach procesu kompilacji i zapisane bezpośrednio w pliku wsadowym lub źródłowym, mogą nie być wystarczająco bezpieczne. (Importowanie oryginalnego certyfikatu wydanego przez urząd certyfikacji rozwiązało go).


4

Miałem ten sam komunikat „ Po filtrze klucza prywatnego pozostało 0 certyfikatów ” i spędziłem zbyt wiele życia próbując zrozumieć, co oznacza ta wiadomość.

Problem polegał na tym, że nieprawidłowo zainstalowałem certyfikat w magazynie certyfikatów systemu Windows, więc nie było klucza prywatnego powiązanego z certyfikatem podpisującym kod.

Powinienem był to zrobić:

  1. Korzystając z przeglądarki Firefox lub Internet Explorer, prześlij żądanie do wystawcy. To generuje PRYWATNY KLUCZ, który jest cicho przechowywany przez przeglądarkę (okno dialogowe ukazuje się na ułamek sekundy w przeglądarce Firefox). Pamiętaj, że inne przeglądarki mogą nie działać: Twoje życie jest zbyt krótkie, aby dowiedzieć się, czy tak.

  2. Prześlij prośbę, przejrzyj obręcze i pętle zatwierdzające emitenta, poświęć kozę, módl się do bogów, złóż podpisane oświadczenie od swoich pradziadków itp.

  3. Pobierz certyfikat (.crt) i zaimportuj go do tej samej przeglądarki . Przeglądarka ma teraz zarówno klucz prywatny, jak i certyfikat .

  4. Wyeksportuj certyfikat z przeglądarki jako plik wymiany informacji osobistych (.p12). Zostaniesz poproszony o podanie hasła w celu ochrony tego pliku.

  5. Zachowaj kopię zapasową pliku .p12.

  6. Uruchom Menedżera certyfikatów (certmgr.msc), kliknij prawym przyciskiem myszy Osobisty magazyn certyfikatów, wybierz Wszystkie zadania / Importuj ... i zaimportuj plik .p12 do systemu Windows. Zostaniesz poproszony o podanie hasła użytego do ochrony pliku. W tym momencie, w zależności od wymagań bezpieczeństwa, możesz oznaczyć klucz jako eksportowalny, aby móc przywrócić kopię ze sklepu Windows. Możesz także zaznaczyć, że hasło jest wymagane przed użyciem, jeśli chcesz złamać skrypty wsadowe.

  7. Uruchom signtool z powodzeniem, odetchnij z ulgą i zastanów się, ile życia zmarnowałeś z powodu złych komunikatów o błędach oraz złej lub brakującej dokumentacji.


2

Też miałem ten problem, dużo próbowałem. Użyłem SDK oraz podpisywania w Visual Studio, ale wszędzie dostałem „Nie znaleziono certyfikatów spełniających wszystkie podane kryteria”.

Rozwiązanie: Należy pamiętać, że jeśli „po filtrze klucza prywatnego”: „0 pozostało” pojawia się z opcją signtool sign / debug ..., przyczyną jest to, że na twoim komputerze nie ma samego urzędu certyfikacji w sklepie. Aby rozwiązać ten problem, najpierw zainstaluj urząd certyfikacji (w moim przypadku plik .crt), a następnie ponownie uruchom znak. Powinno już działać!

Signtool może być używany tylko z urzędem certyfikacji, który jest wymagany i jest własnością tego samego komputera.


Nie miałem problemu z użyciem signtool z urzędem certyfikacji pochodzącym z innego komputera.
bparker

2

Mój problem polegał na tym, że nie rozumiałem opcji signtool. Podałem opcję / n czegoś, co nie pasuje do mojego certyfikatu. Kiedy usunąłem, przestało narzekać.


2

Miałem podobny problem, zmieniła się nazwa mojego komputera i certyfikat wygasł. Udało mi się rozwiązać ten problem, tworząc nowy certyfikat testowy.

W Visual Studio kliknij prawym przyciskiem myszy projekt w eksploratorze rozwiązań. Wybierz właściwości. Wybierz opcję Podpisywanie w oknie właściwości. Kliknij „Utwórz certyfikat testowy ....”. Wprowadź informacje dotyczące hasła do certyfikatu testowego i kliknij OK.


2

W przypadku / debug, gdy pojawia się komunikat „Po filtrze klucza prywatnego pozostało 0 certyfikatów.”, Jednym z powodów może być to, że plik pfx nie ma klucza prywatnego. Podczas eksportowania zainstalowanego certyfikatu do pliku pfx upewnij się, że pole wyboru zawiera również klucz prywatny.


1

Przejdź do project propertiesi usuń zaznaczenie wszystkich pól z Firmprzed rozpoczęciem kompilacji

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.