Share via


Como: criar certificados X.509 que podem ser acessados pelo 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 repositório 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 repositório de certificados, o WCF deve ter permissão para fazer isso. 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. Forneça a conta na qual o WCF está executando o 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
      Assinando digitalmente uma mensagem SOAP de saída. Sim
      Verificando a assinatura de uma mensagem SOAP de entrada. No
      Criptografando uma mensagem SOAP de saída. No
      Descriptografando uma mensagem SOAP de entrada. Sim
    2. Determine o local do repositório de certificados e o nome no qual o certificado é armazenado.

      O repositório 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 repositório de certificados CurrentUser 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 repositório de certificados, o local do repositório de certificados e algo que identifica exclusivamente o certificado. A ferramenta aceita o nome da entidade 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 repositório My em CurrentUser com 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 em que o WCF está sendo executado.

      A tabela a seguir detalha a conta na qual o WCF está em execução para um determinado cenário.

      Cenário Identidade do processo
      Cliente (console ou aplicativo WinForms). Usuário atualmente conectado.
      Serviço que é auto-hospedado. Usuário atualmente conectado.
      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 elemento <processModel> 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 em que 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 à leitura da conta de SERVIÇO DE REDE (:R) acesso 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  
      

Confira também