Errore Signtool: non sono stati trovati certificati che soddisfano tutti i criteri forniti con un'app di Windows Store?


294

Sto cercando di firmare un pacchetto appx di Windows 8 con un file pfx che ho. Sto usando un comando in questo modo:

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

E da questo, ottengo:

Errore SignTool: non sono stati trovati certificati che soddisfano tutti i criteri indicati.

Quali "criteri" non sto rispettando? Questo è solo per il test, quindi si tratta di certificati autofirmati. Ho provato a importare la chiave e quindi a firmarla, ma si verifica sempre lo stesso errore. Come posso risolvere questo problema?


Penso che Signtoolstia cercando di trovare il certificato nell'archivio certificati radice attendibile e non hai certificati di firma codice lì.
crea7 o

15
Ho avuto questo errore perché il certificato utilizzato per la firma era scaduto
Mark Homer,

1
Ho avuto un problema simile e ho pubblicato una risposta qui. Spero che questo ti aiuti.
SurenSaluka,

Risposte:


590

Quando si riceveva questo errore tramite Visual Studio, era perché c'era un'impostazione del certificato di firma che corrispondeva al computer su cui era originariamente sviluppato.

Puoi verificarlo andando nelle proprietà del progetto> scheda firma e controllando i dettagli del certificato.

È possibile deselezionare "Firma i manifest ClickOnce" per disabilitare la firma.

Proprietà della firma

Se non si desidera disattivare questa opzione, è necessario installare il certificato.


12
Solo per aggiungere ciò che ha suggerito @JDandChips: a scopo di debug e test è anche possibile utilizzare un certificato di prova temporaneo facendo clic sul pulsante "Crea certificato di prova" mostrato nella schermata sopra.
nam

Cosa intendi con "installa il certificato"?
Sean Kendle,

Nella mia situazione il certificato era disponibile dalla macchina su cui era stato originariamente sviluppato, quindi potevo scegliere "Seleziona da file ..." per installare il certificato mancante. In alternativa puoi sempre crearne uno nuovo e usarlo!
JDandChips

@JDandChips Come si crea un nuovo certificato?
erotavlas,

3
Per i neofiti di VS. Assicurati di fare clic con il pulsante destro del mouse sul progetto, non sulla soluzione, perché si aprirà un menu completamente diverso!
B5A7,

109

Prova con / debug. 1,2 Come in:

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

Ti aiuterà a scoprire cosa sta succedendo. Dovresti ottenere un output in questo modo:

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.

Puoi vedere quale filtro sta causando il mancato funzionamento del certificato o se non sono stati considerati certificati.

Ho cambiato gli hash e altre informazioni, ma dovresti avere l'idea. Spero che questo ti aiuti.


1 Nota: signtoolè particolare sulla /debugposizione dell'opzione. Deve andare dopo la signdichiarazione.
2 Nota anche: l' /debugopzione funziona solo con alcune versioni di signtool. La versione WDK ha l'opzione, mentre la versione Windows SDK no.


3
Per me va bene. Non che io capisca la risposta di signtool, ma / debug ha fatto quello che dovrebbe. Upvote!
Noelicus,

1
Questo comando è particolare nel punto in cui metti / debug Se lo metti fuori servizio, segnalerà un errore.
Daniel,

12
/ debug funziona solo per versioni specifiche di signtool.exe. Quello fornito con il WDK fornisce questa opzione, quello di Windows SDK no.
Paul Kertscher,

3
Inoltre, / debug deve seguire il segno signtool, non in mezzo.
Denis V,

Indica che il mio certificato è scaduto. Buon lavoro.
avantprime,

36

Verificare sempre prima la data di scadenza del certificato poiché la maggior parte dei certificati ha una data di scadenza. Nel mio caso il certificato è scaduto e stavo cercando di costruire un progetto.


2
Per controllare la scadenza del certificato, vai alla riga di comando, vai dove si trova il certificato, quindi inserisci certutil -dump mycertificate.pfx. Guarda l'ultima voce poiché le prime sono la CA, non il certificato di firma del codice.
HockeyJ

23

Se non è necessario firmare l'app, fare clic con il tasto destro del mouse sul progetto

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

Inoltre, come suggerisce questo articolo sulla SM,

Se stai utilizzando Visual Studio 2008 e stai utilizzando .NET 3.5 e gli aggiornamenti automatici, puoi semplicemente modificare il certificato e distribuire una nuova versione,


1
Puoi anche fare clic su Crea certificato di prova per proseguire. grazie
MindRoasterMir il

16

deseleziona semplicemente 'Firma il clic una volta manifestato' dalla scheda Firma nelle proprietà del progetto, rimuoverà l'errore e puoi crearne uno nuovo da lì.


15

Ha avuto lo stesso problema, si è scoperto che la chiave privata per il certificato non aveva autorizzazione.
Per risolvere il problema: apri la gestione certificata, trova il tuo certificato, fai clic con il pulsante destro del mouse -> Gestisci chiavi private e poi in sicurezza in alto assicurati che il tuo utente sia stato aggiunto e che abbia le autorizzazioni, che lo ha riparato per me.


15

Nel mio caso ho il tipo sbagliato di certificato che sto cercando di associare.
Ho avuto "Autenticazione del server" anziché "Firma del codice" .
Dovresti essere in grado di vederlo nello snap Certificato nella sezione Scopo previsto.
Dopodiché, funziona bene.


1
Sì, cioè, ho lottato per 2 giorni cercando questa risposta.
Hakan Fıstık,

14

Nel caso in cui qualcuno si imbatta in questo: il mio problema è che ho dovuto eseguire il prompt dei comandi come amministratore prima di utilizzare l'app signtool.exe. Quindi tutto funziona meravigliosamente.


11
Non ha aiutato nel mio caso.
bgplaya,

1
Sto eseguendo signtool da VS2015 come script e stavo affrontando lo stesso problema. Ho eseguito VS2015 come amministratore e il signtool è stato in grado di firmare il mio file>
hamaney,


9

Ho risolto questo problema usando la /smbandiera per specificare di cercare nel negozio della macchina invece del predefinito, che è il mio negozio (Utente locale). Inoltre, può essere utile attivare il debug per signtool usando /debug.


8

Ho avuto questo problema e non sono del tutto sicuro di quale passaggio di seguito lo abbia fatto funzionare, ma spero che questo aiuti qualcun altro ... questo è quello che ho fatto:

  • Installa il certificato scaricato (.crt) nei certificati (l'ho messo nell'archivio "personale") - fai clic con il tasto destro sul file .crt e fai clic su Installa certificato .
  • Esegui certmgr.msced esporta il certificato (che si trova nel punto vendita utilizzato nel primo passaggio) come file pfx che include chiave privata e proprietà estese (probabilmente non necessarie)
  • Utilizzare il file .pfx esportato quando si firma il progetto
  • Esempio signtool: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    dove la password è la stessa fornita durante l'esportazione

1
Grazie, questo ha funzionato. Stavo usando il .crtfile fornito da Comodo invece di installare il certificato e quindi esportare il .pfxfile.
Joshua Pinter,

1
Grazie mille!
Bruno Soares,

6

Sto riscontrando lo stesso problema, leggendo alcune risposte (pubblicato qui), ho visto il mio certificato scaduto.

Basta crearne uno nuovo dal mio progetto iniziale. Quindi al gestore certificati ha eliminato il certificato scaduto.

Ora tutto si compila bene.


5

I criteri includono nome dell'account (a cui è associata la chiave privata), dominio, azienda, data di scadenza, scopi previsti, tra le altre cose.

Esistono molte diverse possibili ragioni per questo errore, alcune sono già state elencate. Ecco un altro suggerimento: quando si importa un certificato, assicurarsi di lavorare con il file originale ricevuto dall'autorità di certificazione (CA) , altrimenti alcune proprietà potrebbero andare perse.

Esempio: recentemente ho provato a importare un certificato esportato da un altro account sulla stessa macchina. Il certificato è diventato visibile sul mio account ma non era associato al mio account e, di conseguenza, si è signtoolrifiutato di riconoscerlo senza fornire esplicitamente il nome del file e una password. Che, se fatto come parte del processo di compilazione e scritto esplicitamente in un file batch o file sorgente, potrebbe non essere sufficientemente sicuro. (L'importazione del certificato originale rilasciato dalla CA ha risolto il problema.)


4

Ho avuto lo stesso " Dopo il filtro chiave privata, erano rimasti 0 certificati " e ho passato troppo tempo della mia vita a cercare di capire cosa significasse il messaggio.

Il problema era che avevo installato il certificato in modo errato nell'archivio certificati di Windows, quindi non c'era una chiave privata associata al certificato di firma del codice.

Quello che avrei dovuto fare era questo:

  1. Utilizzando Firefox o Internet Explorer, inviare la richiesta all'emittente. Questo genera un TASTO PRIVATO che viene archiviato silenziosamente dal browser (una finestra di dialogo appare per una frazione di secondo in Firefox). Nota che altri browser potrebbero non funzionare: la tua vita è troppo breve per scoprire se lo fanno.

  2. Invia la richiesta, passa attraverso i cerchi e i loop di convalida dell'emittente, sacrifica una capra, prega gli dei, invia una dichiarazione firmata dai tuoi bisnonni, ecc.

  3. Scarica il certificato (.crt) e importalo nello stesso browser . Il browser ora ha sia la chiave privata che il certificato .

  4. Esporta il certificato dal browser come file di scambio di informazioni personali (.p12). Ti verrà chiesto di fornire una password per proteggere questo file.

  5. Conservare una copia di backup del file .p12.

  6. Esegui Gestione certificati (certmgr.msc), fai clic con il pulsante destro del mouse sull'archivio certificati personali , seleziona Tutte le attività / Importa ... e importa il file .p12 in Windows. Ti verrà chiesta la password utilizzata per proteggere il file. A questo punto, a seconda delle esigenze di sicurezza, è possibile contrassegnare la chiave come esportabile in modo da poter ripristinare una copia dall'archivio di Windows. È inoltre possibile contrassegnare che è necessaria una password prima dell'uso se si desidera interrompere gli script batch.

  7. Esegui signtool con successo, fai un sospiro di sollievo e medita su quanto della tua vita hai sprecato a causa di messaggi di errore errati e documentazione scarsa o mancante.


2

Ho avuto anche questo problema, provato molto. Ho usato sia l'SDK che la firma di Visual Studio, ma ovunque ho ottenuto "Non sono stati trovati certificati che soddisfacessero tutti i criteri indicati".

Soluzione: tenere presente che, se "dopo il filtro della chiave privata": '0 left' viene visualizzato con l'opzione signtool sign / debug ..., la causa è che il PC non ha la CA stessa nell'archivio. Per risolvere questo problema, installa prima la CA (nel mio caso un file .crt), quindi esegui nuovamente il segno. Dovrebbe funzionare proprio ora!

Signtool può essere utilizzato solo con una CA richiesta e di proprietà dello stesso PC.


Non ho avuto problemi con l'utilizzo di signtool con una CA proveniente da un altro PC.
bparker

2

Il mio problema è finito per non capire le opzioni signtool. Avevo fornito l'opzione / n con qualcosa che non corrispondeva al mio certificato. Quando l'ho rimosso ha smesso di lamentarsi.


2

Ho avuto un problema simile, il nome del mio computer è cambiato e il certificato è scaduto. Sono stato in grado di risolvere questo problema creando un nuovo certificato di prova.

In Visual Studio, fai clic con il pulsante destro del mouse sul progetto in Esplora soluzioni. Seleziona proprietà. Seleziona Accesso alla finestra delle proprietà. Fai clic su "Crea certificato di prova ....". Immettere le informazioni sulla password per il certificato di prova e fare clic su OK.


2

Con / debug, quando viene visualizzato questo messaggio "Dopo il filtro della chiave privata, sono stati lasciati 0 certificati.", Uno dei motivi potrebbe essere che il file pfx non ha la chiave privata. Quando si esporta il certificato installato nel file pfx, assicurarsi di abilitare la casella di controllo per includere anche la chiave privata.


1

Vai a project propertiese deseleziona tutti i campi da Firmprima della compilazione

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.