Procedura: rendere accessibili a WCF i certificati X.509How to: Make X.509 Certificates Accessible to WCF

Per rendere accessibile da Windows Communication Foundation (WCF) un certificato X.509, il codice dell'applicazione deve specificare il nome dell'archivio certificati e il percorso.To make an X.509 certificate accessible to Windows Communication Foundation (WCF), application code must specify the certificate store name and location. In alcuni casi l'identità del processo deve avere accesso al file contenente la chiave privata associata al certificato X.509.In certain circumstances, the process identity must have access to the file that contains the private key associated with the X.509 certificate. Per ottenere la chiave privata associata a un certificato X.509 in un archivio certificati, WCF deve disporre dell'autorizzazione per eseguire questa operazione.To obtain the private key associated with an X.509 certificate in a certificate store, WCF must have permission to do so. Per impostazione predefinita solo il proprietario e l'account di sistema possono accedere alla chiave privata di un certificato.By default, only the owner and the System account can access the private key of a certificate.

Per rendere accessibili a WCF i certificati X.509To make X.509 certificates accessible to WCF

  1. Assegnare all'account con cui WCF viene eseguito l'accesso in lettura al file che contiene la chiave privata associata al certificato X.509.Give the account under which WCF is running read access to the file that contains the private key associated with the X.509 certificate.

    1. Stabilire se WCF richiede l'accesso in lettura alla chiave privata del certificato X.509.Determine whether WCF requires read access to the private key for the X.509 certificate.

      Nella tabella seguente viene indicato dettagliatamente se una chiave privata deve essere disponibile in caso di utilizzo di un certificato X.509.The following table details whether a private key must be available when using an X.509 certificate.

      Utilizzo di certificati X.509X.509 certificate use Chiave privataPrivate key
      Firma digitale di un messaggio SOAP in uscita.Digitally signing an outbound SOAP message. YesYes
      Verifica della firma di un messaggio SOAP in arrivo.Verifying the signature of an inbound SOAP message. NoNo
      Crittografia di un messaggio SOAP in uscita.Encrypting an outbound SOAP message. NoNo
      Decrittografia di un messaggio SOAP in arrivo.Decrypting an inbound SOAP message. YesYes
    2. Determinare il percorso e il nome dell'archivio certificati in cui è archiviato il certificato.Determine the certificate store location and name in which the certificate is stored.

      L'archivio certificati nel quale il certificato è archiviato è specificato nel codice dell'applicazione o nella configurazione.The certificate store in which the certificate is stored is specified either in application code or in configuration. Nel codice seguente, ad esempio, viene specificato che il certificato si trova nell'archivio certificati CurrentUser denominato My.For example, the following example specifies that the certificate is located in the CurrentUser certificate store named 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")
      
    3. Determinare dove la chiave privata per il certificato si trova nel computer utilizzando il FindPrivateKey strumento.Determine where the private key for the certificate is located on the computer by using the FindPrivateKey tool.

      Il FindPrivateKey strumento richiede il nome dell'archivio certificati, percorso dell'archivio certificati e un valore che identifica in modo univoco il certificato.The FindPrivateKey tool requires the certificate store name, certificate store location, and something that uniquely identifies the certificate. Lo strumento accetta il nome del soggetto del certificato o l'identificazione digitale come identificatore univoco.The tool accepts either the certificate's subject name or its thumbprint as a unique identifier. Per ulteriori informazioni su come determinare l'identificazione personale per un certificato, vedere procedura: recuperare l'identificazione personale del certificato.For more information about how to determine the thumbprint for a certificate, see How to: Retrieve the Thumbprint of a Certificate.

      Nell'esempio di codice viene illustrato come utilizzare il FindPrivateKey strumento per determinare la posizione della chiave privata di un certificato nella My archiviare in CurrentUser con un'identificazione digitale di 46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d.The following code example uses the FindPrivateKey tool to determine the location of the private key for a certificate in the My store in CurrentUser with a thumbprint of 46 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  
      
    4. Determinare l'account cui WCF è in esecuzione.Determine the account that WCF is running under.

      Nella tabella seguente illustra in dettaglio l'account con cui WCF è in esecuzione per un determinato scenario.The following table details the account under which WCF is running for a given scenario.

      ScenarioScenario Identità del processoProcess identity
      Client (console o applicazione Windows Form).Client (console or WinForms application). Utente attualmente connesso.Currently logged in user.
      Servizio indipendente.Service that is self-hosted. Utente attualmente connesso.Currently logged in user.
      Servizio ospitato in IIS 6.0 (Windows Server 2003Windows Server 2003) o IIS 7.0 (Windows VistaWindows Vista).Service that is hosted in IIS 6.0 (Windows Server 2003Windows Server 2003) or IIS 7.0 (Windows VistaWindows Vista). SERVIZIO DI RETENETWORK SERVICE
      Servizio ospitato in IIS 5.X (Windows XPWindows XP).Service that is hosted in IIS 5.X (Windows XPWindows XP). Controllato dall'elemento <processModel> nel file Machine.config.Controlled by the <processModel> element in the Machine.config file. L'account predefinito è ASPNET.The default account is ASPNET.
    5. Concedere l'accesso in lettura al file che contiene la chiave privata per l'account di cui WCF è in esecuzione, mediante uno strumento quale cacls.exe.Grant read access to the file that contains the private key to the account that WCF is running under, using a tool such as 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.The following code example edits (/E) the access control list (ACL) for the specified file to grant (/G) the NETWORK SERVICE account read (:R) access to the 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 ancheSee Also

FindPrivateKeyFindPrivateKey
Procedura: Recuperare l'identificazione personale di un certificatoHow to: Retrieve the Thumbprint of a Certificate
Uso di certificatiWorking with Certificates