Como: Tornar certificados X.509 acessíveis ao WCF

Para tornar um certificado X.509 acessível ao Windows Communication Foundation (WCF), o código do aplicativo deve especificar o nome e o local do armazenamento de certificados. Em determinadas circunstâncias, a identidade do processo deve ter acesso ao arquivo que contém a chave privada associada ao certificado X.509. Para obter a chave privada associada a um certificado X.509 em um armazenamento de certificados, o WCF deve ter permissão para fazê-lo. Por padrão, somente o proprietário e a conta do sistema podem acessar a chave privada de um certificado.

Para tornar os certificados X.509 acessíveis ao WCF

  1. Dê à conta sob a qual o WCF está executando acesso de leitura ao arquivo que contém a chave privada associada ao certificado X.509.

    1. Determine se o WCF requer acesso de leitura à chave privada para o certificado X.509.

      A tabela a seguir detalha se uma chave privada deve estar disponível ao usar um certificado X.509.

      Uso do certificado X.509 Chave privada
      Assinar digitalmente uma mensagem SOAP de saída. Sim
      Verificando a assinatura de uma mensagem SOAP de entrada. Não
      Criptografando uma mensagem SOAP de saída. Não
      Desencriptar uma mensagem SOAP de entrada. Sim
    2. Determine o local e o nome do armazenamento de certificados no qual o certificado está armazenado.

      O armazenamento de certificados no qual o certificado é armazenado é especificado no código do aplicativo ou na configuração. Por exemplo, o exemplo a seguir especifica que o certificado está localizado no CurrentUser armazenamento de certificados chamado 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. Determine onde a chave privada do certificado está localizada no computador usando a ferramenta FindPrivateKey .

      A ferramenta FindPrivateKey requer o nome do armazenamento de certificados, o local do armazenamento de certificados e algo que identifique exclusivamente o certificado. A ferramenta aceita o nome do assunto do certificado ou sua impressão digital como um identificador exclusivo. Para obter mais informações sobre como determinar a impressão digital de um certificado, consulte Como recuperar a impressão digital de um certificado.

      O exemplo de código a seguir usa a ferramenta FindPrivateKey para determinar o local da chave privada para um certificado no My armazenamento com CurrentUser uma impressão digital de 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. Determine a conta na qual o WCF está sendo executado.

      A tabela a seguir detalha a conta na qual o WCF está sendo executado para um determinado cenário.

      Cenário Identidade do processo
      Cliente (console ou aplicativo WinForms). Usuário conectado no momento.
      Serviço auto-hospedado. Usuário conectado no momento.
      Serviço hospedado no IIS 6.0 (Windows Server 2003) ou IIS 7.0 (Windows Vista). SERVIÇO DE REDE
      Serviço hospedado no IIS 5.X (Windows XP). Controlado pelo <processModel> elemento no arquivo Machine.config. A conta padrão é ASPNET.
    5. Conceda acesso de leitura ao arquivo que contém a chave privada para a conta na qual o WCF está sendo executado, usando uma ferramenta como icacls.exe.

      O exemplo de código a seguir edita a lista de controle de acesso discricionário (DACL) para o arquivo especificado para conceder à conta NETWORK SERVICE acesso de leitura (:R) ao arquivo.

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

Consulte também