Procedura: rendere accessibili a WCF i certificati X.509

Per rendere accessibile un certificato X.509 a Windows Communication Foundation (WCF), il codice dell'applicazione deve specificare il nome e il 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

  1. Concedere all'account di esecuzione di WCF l'accesso in lettura al file contenente la chiave privata associata al certificato X.509.

    1. 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.
      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.
    2. 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")
      
    3. Determinare il percorso della chiave privata del certificato nel computer usando lo strumento FindPrivateKey.

      Lo strumento FindPrivateKey richiede il nome dell'archivio certificati, il percorso dell'archivio certificati e un elemento che identifica in modo univoco il certificato. Lo strumento accetta il nome del soggetto del certificato o l'identificazione digitale come identificatore univoco. Per altre informazioni su come determinare l'identificazione personale per un certificato, vedere Procedura: Recuperare l'identificazione personale di un certificato.

      Nell'esempio di codice seguente viene usato lo strumento FindPrivateKey per determinare la posizione della chiave privata per un certificato nell'archivio My in CurrentUser con un'identificazione personale di 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 in cui è in esecuzione 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). NETWORK SERVICE
      Servizio ospitato in IIS 5.X (Windows XP). Controllato dall'elemento <processModel> nel file Machine.config. L'account predefinito è ASPNET.
    5. Concedere al file contenente la chiave privata l'accesso in lettura all'account di esecuzione di WCF, usando uno strumento come cacls.exe.

      Nell'esempio di codice seguente viene modificato l'elenco di controllo di accesso discrezionale (DACL) per il file specificato per concedere all'account SERVIZIO DI RETE l'accesso in lettura (:R) al file.

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

Vedi anche