Procedura: rendere accessibili a WCF i certificati X.509
Per rendere accessibile un certificato X.509 a Windows Communication Foundation (WCF), è necessario che il codice dell'applicazione specifichi nome e percorso dell'archivio certificati. In alcuni casi l'identità del processo deve avere accesso al file contenente la chiave privata associata al certificato X.509. Per ottenere la chiave privata associata a un certificato X.509 contenuto in un archivio certificati, WCF deve ricevere apposita autorizzazione. Per impostazione predefinita solo il proprietario e l'account di sistema possono accedere alla chiave privata di un certificato.
Per rendere accessibili a WCF i certificati X.509
Concedere all'account di esecuzione di WCF l'accesso in lettura al file contenente la chiave privata associata al certificato X.509.
Stabilire se per WCF è necessario l'accesso in lettura alla chiave privata del certificato X.509.
Nella tabella seguente viene indicato dettagliatamente se una chiave privata deve essere disponibile in caso di utilizzo di un certificato X.509.
Utilizzo di certificati X.509 Chiave privata Firma digitale di un messaggio SOAP in uscita.
Sì
Verifica della firma di un messaggio SOAP in arrivo.
No
Crittografia di un messaggio SOAP in uscita.
No
Decrittografia di un messaggio SOAP in arrivo.
Sì
Determinare il percorso e il nome dell'archivio certificati in cui è archiviato il certificato.
L'archivio certificati nel quale il certificato è archiviato è specificato nel codice dell'applicazione o nella configurazione. Nel codice seguente, ad esempio, viene specificato che il certificato si trova nell'archivio certificati CurrentUser denominato My.
cc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "contoso.com")
cc.ClientCredentials.ClientCertificate.SetCertificate( StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "contoso.com");
Determinare il percorso della chiave privata del certificato nel computer utilizzando lo strumento FindPrivateKey.
Lo strumento FindPrivateKey richiede il nome dell'archivio certificati, il percorso dell'archivio certificati e qualche informazione che identifichi in modo univoco il certificato. Lo strumento accetta il nome del soggetto del certificato o l'identificazione personale come identificatore univoco. Per ulteriori informazioni su su come determinare l'identificazione personale di un certificato, vedere Procedura: recuperare l'identificazione personale di un certificato.
Nell'esempio di codice seguente viene utilizzato lo strumento FindPrivateKey per determinare il percorso della chiave privata per un certificato nell'archivio
My
diCurrentUser
con l'identificazione personale46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d
.findprivatekey.exe My CurrentUser -t "46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d" -a
Determinare l'account di esecuzione di WCF.
Nella tabella seguente viene dettagliato l'account nel quale WCF è eseguito per un determinato scenario.
Scenario Identità del processo Client (console o applicazione Windows Form).
Utente attualmente connesso.
Servizio indipendente.
Utente attualmente connesso.
Servizio ospitato in IIS 6.0 (Windows Server 2003) o IIS 7.0 (Windows Vista).
SERVIZIO DI RETE
Servizio ospitato in IIS 5.X (Windows XP).
Controllato dall'elemento <processModel> nel file Machine.config. L'account predefinito è ASPNET.
Concedere al file contenente la chiave privata l'accesso in lettura all'account di esecuzione di WCF, utilizzando uno strumento come cacls.exe.
Nell'esempio di codice seguente viene modificato (/E) l'elenco di controllo di accesso (ACL) per il file specificato per concedere (/G) all'account NETWORK SERVICE l'accesso in lettura (:R) al file.
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
Vedere anche
Attività
FindPrivateKey
Procedura: recuperare l'identificazione personale di un certificato