Impossibile importare il file di chiavi "blah.pfx" - errore "Il file di chiavi potrebbe essere protetto da password"


392

Abbiamo appena aggiornato i nostri progetti Visual Studio 2008 a Visual Studio 2010. Tutti i nostri assembly sono stati firmati in modo forte utilizzando un certificato di firma del codice Verisign . Dall'aggiornamento riceviamo continuamente il seguente errore:

Impossibile importare il seguente file chiave: companyname.pfx. Il file chiave potrebbe essere protetto da password. Per correggere ciò, provare a importare nuovamente il certificato o installare manualmente il certificato nel CSP con nome sicuro con il seguente nome contenitore chiave: VS_KEY_3E185446540E7F7A

Questo accade su alcuni computer degli sviluppatori e non su altri. Alcuni metodi utilizzati per risolvere questo problema che in alcuni casi hanno funzionato includono:

  • Reinstallazione del file chiave da Esplora risorse (fare clic con il tasto destro sul file PFX e fare clic su Installa)
  • L'installazione di Visual Studio 2010 su una nuova macchina per la prima volta richiede la password la prima volta che si apre il progetto, quindi funziona. Su macchine aggiornate da Visual Studio 2008, questa opzione non è disponibile.

Ho provato a utilizzare l' utilità SN.EXE (Strong Name Tool) per registrare la chiave con Strong Name CSP come suggerisce il messaggio di errore, ma ogni volta che eseguo lo strumento con qualsiasi opzione che utilizza la versione fornita con Visual Studio 2010, SN .EXE elenca solo gli argomenti della sua riga di comando invece di fare qualsiasi cosa. Questo accade indipendentemente dagli argomenti che fornisco.

Perché sta succedendo questo e quali sono i passaggi chiari per risolverlo? Sto per rinunciare alle installazioni ClickOnce e alla firma del codice Microsoft.

Risposte:


448

Stavo incontrando anche questo problema. Sono stato in grado di risolvere il problema eseguendo
sn -i <KeyFile> <ContainerName>( installa la coppia di chiavi in ​​un contenitore denominato ).

snviene in genere installato come parte di Windows SDK. Per esempio C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe. Molto probabilmente questa posizione non si trova sul percorso di ricerca per l'ambiente standard. Tuttavia, il "Prompt dei comandi per sviluppatori" installato da Visual Studio aggiunge ulteriori informazioni che di solito includono la posizione corretta.

Sulla base del tuo post che sarebbe simile

sn -i companyname.pfx VS_KEY_3E185446540E7F7A

Questo deve essere eseguito dalla posizione del tuo file PFX, se hai la soluzione caricata in VS 2010 puoi semplicemente fare clic destro sul file pfx da Esplora soluzioni e scegliere Apri prompt dei comandi che avvierà lo strumento di prompt cmd .net 2010 in la directory corretta.

Prima di eseguire questo comando sn ho reinstallato il pfx facendo clic con il tasto destro su di esso e scegliendo Installa, tuttavia, che non ha funzionato. Solo qualcosa da notare in quanto potrebbe essere la combinazione di entrambi che ha fornito la soluzione.

Spero che questo aiuti a risolvere il tuo problema.


5
Grazie Brandon - sì, come la reinstallazione manuale del file chiave "sort of" risolve il problema. Il problema è che non appena esegui il check-in nel file chiave, tutti gli altri utenti che ottengono le ultime notizie su questo file chiave registrato avranno subito questo errore. Se qualcuno di questi utenti verifica la loro "correzione" e ricevo le ultime novità, la mia macchina ora è di nuovo rotta ... e così via. Microsoft ha avviato un ticket di risoluzione e lo ha assegnato al team VS2010 e al team VSS.
JasonD,

2
Interessante. Non ho riscontrato questo problema durante l'aggiunta di pfx al nuovo CSP. Per quanto ne so SN -i non modifica il file pfx quindi non dovresti controllare nulla in seguito. Tuttavia, se si dovesse modificare il file pfx in qualsiasi modo, ad esempio reimpostare la password, ciò causerebbe un problema poiché cambierebbe il file pfx. La tua soluzione si basa su quel file pfx da qualsiasi altra macchina? In tal caso, il file pfx è corretto, ma non è impostato sul CSP corretto sul computer in cui si verificano problemi di build.
Brandon Manchester,

3
All'inizio ho provato solo la parte sn ma mi sono lamentato che la password era errata (sebbene fosse corretta). Ho rimosso il certificato, reinstallato e quindi sn -i ... ha funzionato. Fondamentalmente confermando che per me erano necessari entrambi i passaggi. Reinstalla cert quindi esegui il comando sn.
Dodgyrabbit,

1
Ho scoperto sia in VSS che in TFS che se esegui il comando sn -i non funziona a meno che tu non abbia estratto il file PFX e quando lo controlli non funziona per altri sviluppatori sulla rete. Dovrò provare a reinstallare il certificato, quindi eseguire il comando sn -i. Ne abbiamo bisogno per funzionare su tutte le macchine sviluppatore in ufficio.
JasonD,

5
Questo ha funzionato anche per me, tuttavia non ho mai dovuto farlo in passato. VS era solito pop-up e chiedere la password per ogni chiave. Cosa è cambiato?
Kevin Berridge,

126

Ho scoperto una correzione che ti aiuta a costruire con successo in un ambiente multi-sviluppatore:

Invece di modificare la password (che causa la modifica di .pfx), selezionare nuovamente il file .pfx dalla casella combinata. Questo quindi richiama la finestra di dialogo della password. Dopo aver inserito la password, il progetto verrà compilato correttamente. Ogni sviluppatore può farlo sul proprio computer locale senza modificare il file .pfx.

Ho ancora problemi a ottenere la firma degli assembly sulla nostra macchina server di build. Sto ottenendo lo stesso errore lì, tuttavia l'utilizzo del metodo sn.exe -i non risolve il problema per buildserver.


5
Trascorso un po 'di tempo non riuscendo a farlo funzionare anche sul nostro server di build TFS, mi sono reso conto che ero connesso come me stesso, non come account del servizio di build, non c'è da meravigliarsi che non fosse in grado di trovarlo - doh!
Daniel Morritt,

7
Questo dovrebbe essere contrassegnato come risposta poiché la risposta attualmente contrassegnata non funzionerà in un ambiente multi-sviluppatore. Molto bene.
Daniel McQuiston,

Se si utilizza lo stesso file .pfx per firmare più assiemi / progetti in un'unica soluzione, è necessario eseguire solo questo passaggio su un progetto e verrà applicato a tutti. Funziona alla grande.
Jon Comtois,

1
Il mio problema era che il server di build era in esecuzione con un account locale. Sono andato tra le opzioni e ho cambiato, ma non mi sono reso conto che l'ho modificato nel posto sbagliato, il che mi ha portato a risolvere i problemi per ore fino a quando non ho verificato di nuovo e realizzato il mio errore!
The Muffin Man,

3
Grazie brillante. Triste nel vedere che questo è ancora una soluzione alternativa nel 2017.
Billy Jake O'Connor il

43

Ho avuto lo stesso problema e la cancellazione del negozio e la lettura non ha funzionato. Ho dovuto fare quanto segue.

  • Ottieni una copia di OpenSSL . È disponibile per Windows . Oppure usa un box Linux perché praticamente tutti ce l'hanno.

  • Eseguire quanto segue per esportare in un file chiave:

    openssl pkcs12 -in certfile.pfx -out backupcertfile.key
    
    openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
    

Quindi nelle proprietà del progetto è possibile utilizzare il file PFX.


1
Grazie!! Penso che abbia funzionato per me. Ho preso openssl qui: gnuwin32.sourceforge.net/packages/openssl.htm
aherrick,

Vorrei aggiungere l'opzione per includere il certificato effettivo nel pfx: openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt -keysig -keyex
Pete

Assicurati di eseguire openssl come amministratore, altrimenti visualizzerai l'errore "impossibile scrivere" stato casuale "" Inoltre: dopo aver eseguito openssl dovevo ancora fare la risposta di Brandon Manchester con la cosa "sn -i ..." cosa.
Lee Richardson,


Questa è l'unica soluzione, che alla fine mi ha funzionato. Grazie!
Ladislav,

37

Ho parlato troppo presto! Rebuild ha riportato gli errori in gioco ...

Ho trovato che funziona - fare clic con il tasto destro in Esplora soluzioni ed escluderlo dal progetto. Fai clic su Mostra tutti i file , fai clic con il tasto destro e ora includilo nuovamente nel progetto. Ora annulla le modifiche in sospeso ...

Per qualche motivo questo ha risolto il problema per me ed è stato relativamente indolore!


Riprendendolo, non ha aiutato. Non ho realizzato che ha rimosso il pfx dalle impostazioni del progetto. Credo che le bugie di risposta nella risposta da Stefan stackoverflow.com/a/14644793/1735721
DennisWelu

Questa risposta è fantastica Ha funzionato per me ed è così facile.
Ben Rubin

Ha funzionato per me (VS2017 15.7.4). Grazie per la soluzione piacevole e veloce.
Meeting Attender,

Ha funzionato per me su VS2019 16.1.3. Grazie!!
JordanTDN

35

Ho scoperto che in alcuni casi dovresti provare a eliminare questa chiave prima di installarla. Quindi, procedi come segue:

  1. sn -d VS_XXXX
  2. sn -i mykey.pfx VS_XXX

1
Questo mi ha risolto! L'installazione da sola non andava a buon fine con l'oggetto già esistente.
Andy,

Ci ho provato anche io e non ha aiutato. Potrebbe esserci qualcosa di sbagliato nel certificato stesso?
Tomáš Zato - Ripristina Monica

2
Grazie, la rimozione deve essere eseguita come amministratore - se eseguito come utente normale si ottiene un errore fuorviante "Contenitore chiave nome sicuro non trovato".
astrowalker,

Grazie Ha funzionato per me.
Rikin Patel,

31

VSCommands 2010 (plugin per Visual Studio) può risolvere questo problema automaticamente: basta fare clic con il pulsante destro del mouse sull'errore e fare clic su Applica correzione dal menu. Puoi ottenerlo dalla galleria di Visual Studio .


1
Credo che questo sia per la versione pro - non ho questa opzione nella mia versione Lite
Adam Butler

2
La versione che ho appena scaricato (nel settembre 2011) è arrivata con questa opzione.
Jim conta l'

4
Richiede ancora una licenza pro.
John Baughman,

27

Dopo aver provato tutte queste soluzioni (e molte altre), ho scoperto che il problema si trova altrove. Per le persone che soffrono della mia stessa sofferenza dopo aver acquistato un certificato, condividerò la soluzione del mio problema.

Comportamento

Comprendo che "sign" applica un nome sicuro e non un authenticode a una DLL o EXE. Questo è il motivo per cui signtool sarà lavorare in questo caso, ma 'segno' in Visual Studio non funzionerà.

Motivo

In passato ho avuto esperienza con i certificati di Verisign. Hanno un KeySpec=2certificato - che viene utilizzato con la funzionalità "firma" in Visual Studio. Questi certificati funzionano bene sia per Visual Studio che signtool.

Ora ho acquistato i certificati da Comodo, che hanno errato KeySpec=1nei certificati di firma del codice. Ciò significa che questi certificati funzionano bene con signtool (authenticode) ma non con nomi forti (il segno a discesa).

Soluzione

Esistono due modi per risolvere questo problema:

  1. Crea un certificato separato per il tuo nome sicuro usando sn -k [name].snk. Firmare l'assembly utilizzando snk e successivamente utilizzare signtool con il certificato di firma del codice per firmare la DLL / EXE con la firma Authenticode. Anche se questo sembra strano, da quello che capisco questo è un modo corretto di gestire i certificati, perché i nomi forti hanno uno scopo diverso da quello Authenticode (vedi anche questo link per i dettagli su come funziona).
  2. Importa il tuo certificato come KeySpec=2. La procedura per questo è dettagliata qui .

Poiché desidero utilizzare più nomi sicuri, attualmente utilizzo l'opzione (1), sebbene l'opzione (2) funzioni anche.


Per garantire che questa soluzione non si perda mai in futuro, ecco la procedura della soluzione 2:

  1. Utilizzando il MMC "Certificati" esportare il keyset esistente ( KeySpec=1) in un file PFX. Nota: eseguire il backup di questo file in un luogo sicuro e verificare se il file può essere importato correttamente su un altro computer se si desidera davvero riprodurlo in sicurezza!
  2. Elimina il certificato esistente dal crypto store (stlll usando MMC).
  3. Apri un prompt CMD.
  4. Importa il file PFX usando questo comando:
    1. certutil -importPFX -user <pfxfilename> AT_SIGNATURE
    2. Immettere la passphrase per pfx quando richiesto.

Ora dovresti avere un keyset / certificato con KeySpec=2. Se necessario, ora puoi esportarlo in un altro file PFX usando di nuovo MMC.


La tua soluzione n. 2 è stata l'unica cosa che ha funzionato per me (senza utilizzare uno strumento o un processo da riga di comando secondaria) Grazie.
Bron Davies,

1
Sì, davvero non capisco perché alcune soluzioni qui abbiano così tanti voti; questa è davvero l'unica cosa che ha funzionato per me, e sono abbastanza sicuro che la maggior parte delle persone che acquistano un certificato CS dovrebbe avere lo stesso problema. Oh bene ...
atlaste,

1
Questa è l'unica soluzione che ha funzionato per me. Inoltre, il file .pfx non può includere informazioni sul concatenamento dei certificati per la firma degli assembly.
Shih-Wen, il

Grazie per un'istruzione così dettagliata. Ogni passaggio è descritto con precisione.
Dmitriy,

1
La tua prima soluzione è fondamentale per capire qui: non è assolutamente necessario firmare gli assembly con un costoso certificato protetto da password! Una volta che lo capisci e usi semplicemente un file snk, questo problema scompare del tutto. Vedi la nota di avviso qui e qui .
Paul

11

Per risolvere questo problema in Visual Studio 2012, faccio clic con il pulsante destro del mouse sul progetto, proprietà -> "firma", quindi deseleziono "Firma i manifesti ClickOnce".


2
Questa è una risposta perfetta se non è necessario firmare. Rimuoverà la necessità di firmare il progetto.
Tom Anderson,

8

Ho riselezionato il file Key (pfx) nella casella a discesa "Scegli un file chiave con nome sicuro", quindi ho fornito la password nella finestra a comparsa "INSERISCI PASSWORD". Ho salvato il mio progetto e ricostruito.build riuscito.

  • Apri le proprietà del progetto.
  • Fai clic sulla sezione Firma.
  • Dove dice "Scegli un file chiave con nome sicuro:", seleziona nuovamente il valore corrente dalla casella a discesa:

inserisci qui la descrizione dell'immagine

  • Visual Studio ora richiederà la password. Entra

inserisci qui la descrizione dell'immagine

  • Salva il tuo progetto e fai una ricostruzione.

  • Se viene visualizzato il messaggio di errore: "È stato effettuato un tentativo di fare riferimento a un token che non esiste", ignorarlo e continuare i passaggi seguenti

  • Fai clic sul pulsante "Cambia password":

inserisci qui la descrizione dell'immagine

  • Immettere la password originale in tutte e tre le caselle e fare clic su OK. Se desideri cambiare la tua password (o se la tua vecchia password non soddisfa i requisiti di complessità), puoi farlo ora.

  • Salva il tuo progetto e fai una ricostruzione.

Ulteriori informazioni..


3
Questo intero errore sembra completamente casuale da risolvere, ma questa soluzione ha funzionato per me. Se qualcun altro arriva così in fondo alla pagina, posso solo suggerire di provare tutto.
DeusExMachina25,

6

Per risolvere il problema, ho provato a eseguire Visual Studio 2010 come amministratore e ha funzionato per me.

Spero che questo possa essere d'aiuto.


Per qualche motivo ha smesso di funzionare. Non potevo credere che ciò risolvesse effettivamente il problema. Grazie!!!
Gerhard Powell

4

Come autore originale del work around sul report dei bug di connessione, ci sono DUE varianti di questo messaggio (l'ho scoperto in seguito)

Per una variante si utilizza sn.exe (in genere se si utilizzano nomi forti) per importare la chiave nell'archivio dei nomi forti.

L'altra variante per cui usi certmgr per importare è quando stai firmando il codice per cose come la distribuzione click-once (nota che puoi usare lo stesso certificato per entrambi gli scopi).

Spero che sia di aiuto.


Sì, abbiamo provato anche quello con il supporto Microsoft, ed è questo il modo di eseguire l'importazione della firma del codice. Il problema sembra essere la perdita della password del certificato durante la procedura di check-in sicura. Ma questo non sembra essere il vero problema. Sembra che se inserisci i dettagli del certificato sulla macchina n. 1 di Widnows 7, quindi sposti lo stesso file esatto su una macchina diversa e la registri, la registrazione funzionerà, ma la compilazione fallirà. Microsoft ci sta ancora esaminando. Per ora abbiamo dovuto disabilitare la firma del codice e firmare manualmente durante il rilascio.
JasonD,

3

Niente ha funzionato per me, ma poi sono andato a cercare il gestore certificati (mmc.exe). Il certificato non è stato importato nel negozio personale, quindi l'ho importato manualmente e quindi il progetto è stato compilato.

Vedere Firma manifest ClickOnce e Firma assembly con nome sicuro tramite la pagina Firma del progettista di Visual Studio Project, Assemblee firma .


Ciò ha risolto il problema anche per me dopo aver eseguito la correzione SN.exe -i.
Coding Samurai

2

Riselezionare il file chiave in una casella combinata e inserire la password ci aiuta a questo.

Ma è necessario farlo ogni volta che il file chiave cambia e sembra non essere OK.


2

Ho avuto lo stesso problema dopo aver spostato la mia installazione di Windows su un SSD . Nessuna delle altre soluzioni ha funzionato per me.

La mia soluzione era aprire il file di progetto in Blocco note e rimuovere tutti i riferimenti alle chiavi PFX. Una volta salvato il file, apri la soluzione in Visual Studio. Vai al progetto -> Proprietà -> Firma. Non dovresti vedere nessuna chiave elencata nella casella combinata "scegli il file chiave con nome sicuro". Nella casella combinata, seleziona la chiave, selezionala e il tuo progetto può ora essere creato.


2

Il mio problema era che TFS Build Controller era in esecuzione come servizio di rete e per qualche motivo non capivo perché i certificati del servizio Host di build di Visual Studio non fossero utilizzati. Ho cambiato l'identità del servizio Visual Studio Build in qualcosa di più gestibile, mi sono assicurato che avesse i diritti sul server TFS e ho aggiunto manualmente i certificati usando MMC.

Il problema era anche che MSBuild non poteva aggiungere i certificati protetti da password al negozio.


A quale negozio devi aggiungerlo ??
Felickz,

Ho fatto lo stesso (e anche messo certs in questo utente Root personale / Trusted / Trusted Pub .. non sono sicuro di quale sia stato risolto) e sono stato in grado di passare al successivo errore TFS che avevo aree di lavoro in conflitto, quindi per correggere che avevo anche per rimuovere e aggiungere un nuovo agente di compilazione.
Felickz,

2

Ho avuto un problema simile, ma dopo aver selezionato il pfx in un ComboBox "File chiave nome sicuro" e aver digitato la password ho ancora ricevuto un errore simile (senza la parte del nome del contenitore):

Impossibile importare il seguente file chiave: companyname.pfx. Il file chiave potrebbe essere protetto da password. Per correggere ciò, provare a importare nuovamente il certificato o installare manualmente il certificato

Inoltre, il pannello di informazioni sul certificato "Firma i manifest di ClickOnce" non è stato popolato.

Ho fatto "Seleziona da file ..." sul mio pfx e ho risolto il problema.


1

Tutti i metodi descritti qui non mi hanno aiutato. Ma quando ho eliminato il file * .pfx dal mio progetto e l'ho aggiunto di nuovo alla firma dell'assembly, ho creato il mio progetto senza errori! Non riesco a spiegare i motivi per cui. Ma ha funzionato per me.


1

Ok, questo ha funzionato per me. Aprire la vecchia soluzione / progetto come amministratore in Visual Studio 2010 e aprire la soluzione / progetto nuova o copiata. Come amministratore, rimuovi il file pfk copiato nella nuova soluzione / progetto di Visual Studio 2010 e vai alle proprietà del progetto e deselezionalo.

Con entrambi i progetti aperti, copia incolla su quello nuovo. Vai alle proprietà del progetto e seleziona Crea. Ho aperto e chiuso Visual Studio e anche dopo averlo rimosso dal nuovo progetto, l'ho creato prima di copiarlo dal vecchio progetto e selezionarlo. Ho ricevuto l'errore all'inizio di questo post all'inizio quando ho copiato il progetto e ho provato a costruirlo.


1

Nel mio scenario il servizio di compilazione non utilizzava lo stesso account utente con cui ho importato la chiave sn.exe .

Dopo aver cambiato l'account nel mio account amministratore, tutto funziona perfettamente.


Avevo lo stesso problema, la lettura del tuo commento mi ha fatto notare che avevo eseguito l'aggiornamento a Windows 10 da Windows 7 e che ora VS doveva essere eseguito come amministratore. Quindi
ho

1

Questo ha risolto il mio problema: apri il tuo progetto VS.

Fare doppio clic su Package.appxmanifest

Vai alla scheda Packaging

fai clic su scegli certificato

fai clic su configura certificato

seleziona dal file e usa example.pfx quell'unità o qualsiasi altra cosa creata


0

Ho risolto questo problema da solo, modificando la seguente riga nel file .csproj del progetto Visual Studio:

Ciò ha generato l'errore "impossibile importare":

<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>

La modifica del valore in falso ha fatto scomparire l'errore.


7
Di solito gli assembly sono firmati allo scopo e la rimozione di SignManifest potrebbe causare problemi di distribuzione in alcuni ambienti. Quindi non è una soluzione per un problema
Georgy Smirnov,

0

Ho avuto lo stesso errore. Nel mio caso, ho provato tutto quanto sopra, ma non sono riuscito a ottenere il risultato.

Alla fine mi sono reso conto che nel mio caso il motivo dell'errore era che la password del certificato non era stata inserita o inserita in modo errato. L'errore è scomparso quando ho inserito la password in modo dinamico in modo corretto. riuscito


0

Sfortunatamente, nessun approccio menzionato qui ha funzionato per me. Devo registrare una coppia PFX in un contenitore docker e devo passare la password dalla riga di comando.

Quindi ho ri-sviluppato il sn.exe -i <infile> <container>comando in C # usando RSACryptoServiceProvider . Il sorgente e l'app sono su GitHub in SnInstallPfx progetto .

Lo SnInstallPfx app accetta una chiave PFX e la sua password. Calcola automaticamente il nome del contenitore chiave (VS_KEY_ *) (preso in prestito dal codice sorgente di MSBuild) e lo installa nel nome sicuro CSP.

Uso:

SnInstallPfx.exe <pfx_infile> <pfx_password>
// or pass a container name if the default is not what you need (e.g. C++)
SnInstallPfx.exe <pfx_infile> <pfx_password> <container_name>

0

Per chi utilizza i corridori GitLab:

  • Assicurati di eseguire il corridore con un account a cui puoi accedere:./gitlab-runner.exe install --user ".\ENTER-YOUR-USERNAME" --password "ENTER-YOUR-PASSWORD" (prima ho dovuto interrompere e disinstallare)
  • seguire questa guida per garantire la compilazione all'utente l'autorizzazione ad accedere come servizio
  • accedere con tale build utente
  • usa il comando suggerito in altre risposte: sn -i certificate.pfx VS_KEY_C***6

il nome del contenitore viene suggerito nell'output del processo non riuscito su GitLab (output msbuild) inserisci qui la descrizione dell'immagine

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.