2009-06-25 12 views
6

Sto firmando un programma EXE con un certificato emesso da una CA attendibile. Sto usando signtool.exe da Windows SDK v6.0a.Errore SignTool: ISignedCode :: Errore restituito segno: 0x80092006

Il certificato si trova nell'archivio del computer e si trova nella cartella "Personali".

La mia linea di comando è:

sign /sm /n "My company" /d MyProductName /du http://my.url.com "C:\Setup\setup.exe" 

Quando eseguo questo comando sulla riga di comando, funziona benissimo. Quando si esegue questo comando in un processo batch (chiamato da un webservice, quindi non c'è utente connesso quando viene eseguito il comando), il seguente errore si verifica:

Numero di errori: 1 SignTool errore: ISignedCode :: Errore restituito segno: 0x80092006 Nessun provider è stato specificato per il negozio o l'oggetto.

Chiunque può aiutare in questo?

risposta

1

Ho [solo ora, solo una volta] ha sperimentato la stessa condizione (immediatamente dopo una chiamata riuscita con gli stessi parametri tranne su un file MSI diverso). Rerunning ha avuto successo alla prossima esecuzione dello script di build. Anche utilizzando, come te

/sm /d /du
Non usando
/n
Inoltre utilizzando
/t

2

Il problema è che il processo di servizio non può accedere alla chiave privata, che è memorizzata sotto il vostro account.

Accedere all'account che esegue il servizio Web e importare la chiave privata in un contenitore di chiavi. È possibile farlo ad esempio utilizzando l'strong name tool (sn.exe) di .NET:

sn -i MyCertificate.pfx MyCodeSigningKey 

Ora, cambiare il vostro script di build a utilizzare questo contenitore chiave:

signtool sign /sm /a /v /csp "Microsoft Strong Cryptographic Provider" /kc MyCodeSigningKey <other parameters...> 

/kc specifica il contenitore di chiavi. /kc richiede di specificare il "CSP" (provider di servizi di crittografia) tramite lo switch /csp. "Microsoft Strong Cryptographic Provider" è il provider predefinito utilizzato da sn.

+0

Domanda ingiustificabile: la chiave privata non deve essere archiviata nello store del computer, dal momento che sta usando/sm sopra? Sto lottando con la stessa cosa e sperando di evitare di mettere un altro strumento (sn.exe) su una macchina di produzione. – DougN

+0

Il certificato è archiviato nell'archivio della macchina, ma non nella chiave privata. sn fa parte dell'installazione standard di .Net. – oefe

1

Per risparmiare tempo a qualcuno, ho avuto questo problema. Si è scoperto che il mio certificato in qualche modo è stato danneggiato. Dopo averlo rimosso dall'archivio certificati e importato di nuovo, il problema è andato via. Suggerisco di creare il file PFX dappertutto o di copiarlo da una posizione in cui si sa che non è danneggiato.

0

Ho avuto questo problema pure. Ancora non sono sicuro di cosa lo abbia causato dal momento che non ho mai avuto il tempo di scoprirlo. La cosa che ho trovato è che la chiave privata è scomparsa !?

Ho fatto ciò che coder_2007 suggerisce e ha funzionato per una build completa automatizzata, ma la prossima avrebbe dato lo stesso errore. Quindi qualcosa sul mio server di build ha rotto la chiave privata dopo una compilazione completa (incluse diverse applicazioni firmate).

Quello che alla fine ho finito è stato, immediatamente dopo l'importazione del PFX, per andare a %allusersprofile%\Microsoft\Crypto\RSA\MachineKeys e scrivere proteggere l'ultimo file (quello che corrisponde al tempo di importazione).

0

Ciò può accadere se la password di Windows viene modificata dopo l'installazione del certificato. Cambiando la password in base a ciò che è stata, la risolverà. Se non puoi farlo dovrai reinstallare il certificato.

Problemi correlati