Esempio FindPrivateKey

Può essere difficile individuare il percorso e il nome del file di chiave privata associati a un certificato X.509 specifico nell'archivio certificati. Lo strumento FindPrivateKey.exe facilita questo processo.

Importante

Prima di usarlo, è necessario compilare l'esempio FindPrivateKey.

I certificati X.509 vengono installati da un amministratore o da qualsiasi utente nel computer. Tuttavia, è possibile accedere al certificato da un servizio in esecuzione con un account diverso, ad esempio, l'account SERVIZIO DI RETE.

Questo account può non avere accesso al file di chiave privata se il certificato non è stato originariamente installato. Lo strumento FindPrivateKey fornisce il percorso del file di chiave privata di un determinato certificato X.509. È possibile aggiungere o rimuovere autorizzazioni quando si conosce il percorso del file di chiave privata degli specifici certificati X.509.

Negli esempi in cui vengono utilizzati i certificati per la sicurezza, si adopera lo strumento FindPrivateKey nel file Setup.bat. Dopo aver individuato il file di chiave privata, è possibile utilizzare gli altri strumenti quali Cacls.exe per impostare i diritti di accesso appropriati sul file.

Quando si esegue un servizio Windows Communication Foundation (WCF) con un account utente, ad esempio un eseguibile self-hosted, assicurarsi che l'account utente abbia accesso in sola lettura al file. Quando si esegue un servizio WCF in Internet Information Services (IIS) gli account predefiniti in cui viene eseguito il servizio sono SERVIZIO DI RETE in IIS 7 e versioni precedenti, o Identità del pool di applicazioni in IIS 7.5 e versioni successive. Per ulteriori informazioni, vedere Identità del pool di applicazioni.

Privilegi di lettura

Quando si accede a un certificato per il quale il processo non dispone dei privilegi di lettura, viene visualizzato un messaggio di eccezione simile all'esempio seguente:

System.ArgumentException was unhandled
Message="The certificate 'CN=localhost' must have a private key that is capable of key exchange. The process must have access rights for the private key."
Source="System.ServiceModel"

Quando si verifica questo problema, utilizzare lo strumento FindPrivateKey per cercare il file di chiave privata e quindi impostare il diritto di accesso per il processo in cui è in esecuzione il servizio. Ad esempio, questa operazione può essere eseguita con lo strumento Cacls.exe, come illustrato nell'esempio seguente:

cacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /E /G "NETWORK SERVICE":R

Convenzioni: voci della riga di comando

"[opzione]" rappresenta un set di parametri facoltativo.

"{opzione}" rappresenta un set di parametri obbligatorio.

"opzione1 | opzione2" rappresenta una scelta tra set di opzioni.

"<valore>" rappresenta un valore di parametro da immettere.

Utilizzo

FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]

Dove:

Parametro Descrizione
<subjectName> Nome del soggetto del certificato
<thumbprint> Identificazione personale del certificato (per trovarlo è possibile usare lo strumento Certmgr.ex)
-f Solo nome file di output
-d Solo directory di output
-a nome file assoluto di output

Se al prompt dei comandi non sono specificati parametri, con queste informazioni viene visualizzato il testo della Guida.

Esempi

In questo esempio viene trovato il nome file del certificato con nome oggetto "CN=localhost", nell'archivio Personale dell'utente corrente.

FindPrivateKey My CurrentUser -n "CN=localhost"

Questo esempio trova il nome file del certificato con un nome oggetto "CN=localhost", nell'archivio Personale dell'utente corrente, e viene generato il percorso completo della directory.

FindPrivateKey My CurrentUser -n "CN=localhost" -a

In questo esempio viene ricercato il nome del file del certificato con un'identificazione digitale di "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52", nell'archivio Personale del computer locale.

FindPrivateKey My LocalMachine -t "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"