Como: Criar certificados temporários para uso durante o desenvolvimento

Ao desenvolver um serviço ou cliente seguro usando o Windows Communication Foundation (WCF), muitas vezes é necessário fornecer um certificado X.509 para ser usado como uma credencial. O certificado normalmente faz parte de uma cadeia de certificados com uma autoridade raiz encontrada no armazenamento de Autoridades de Certificação Raiz Confiáveis do computador. Ter uma cadeia de certificados permite que você defina o escopo de um conjunto de certificados em que normalmente a autoridade raiz é da sua organização ou unidade de negócios. Para emular isso no momento do desenvolvimento, você pode criar dois certificados para atender aos requisitos de segurança. O primeiro é um certificado autoassinado que é colocado no armazenamento de Autoridades de Certificação Raiz Confiáveis e o segundo certificado é criado a partir do primeiro e é colocado no armazenamento Pessoal do local do Computador Local ou no repositório Pessoal do local do Usuário Atual. Este tópico percorre as etapas para criar esses dois certificados usando o cmdlet New-SelfSignedCertificate do PowerShell.

Importante

Os certificados que o cmdlet New-SelfSignedCertificate gera são fornecidos apenas para fins de teste. Ao implantar um serviço ou cliente, certifique-se de usar um certificado apropriado fornecido por uma autoridade de certificação. Isso pode ser de um servidor de certificados do Windows Server em sua organização ou de terceiros.

Por padrão, o cmdlet New-SelfSignedCertificate cria certificados que são autoassinados e esses certificados são inseguros. Colocar os certificados autoassinados no armazenamento de Autoridades de Certificação Raiz Confiáveis permite criar um ambiente de desenvolvimento que simula mais de perto seu ambiente de implantação.

Para obter mais informações sobre como criar e usar certificados, consulte Trabalhando com certificados. Para obter mais informações sobre como usar um certificado como credencial, consulte Protegendo serviços e clientes. Para obter um tutorial sobre como usar a tecnologia Microsoft Authenticode, consulte Visão geral e tutoriais do Authenticode.

Para criar um certificado de autoridade raiz autoassinado e exportar a chave privada

O comando a seguir cria um certificado autoassinado com um nome de assunto "RootCA" no repositório pessoal do usuário atual.

$rootCert = New-SelfSignedCertificate -CertStoreLocation Cert:\CurrentUser\My -DnsName "RootCA" -TextExtension @("2.5.29.19={text}CA=true") -KeyUsage CertSign,CrlSign,DigitalSignature

Precisamos exportar o certificado para um arquivo PFX para que ele possa ser importado para onde for necessário em uma etapa posterior. Ao exportar um certificado com a chave privada, é necessária uma senha para protegê-lo. Salvamos a senha em um SecureString e usamos o cmdlet Export-PfxCertificate para exportar o certificado com a chave privada associada para um arquivo PFX. Também salvamos apenas o certificado público em um arquivo CRT usando o cmdlet Export-Certificate .

[System.Security.SecureString]$rootCertPassword = ConvertTo-SecureString -String "password" -Force -AsPlainText
[String]$rootCertPath = Join-Path -Path 'cert:\CurrentUser\My\' -ChildPath "$($rootCert.Thumbprint)"
Export-PfxCertificate -Cert $rootCertPath -FilePath 'RootCA.pfx' -Password $rootCertPassword
Export-Certificate -Cert $rootCertPath -FilePath 'RootCA.crt'

Para criar um novo certificado assinado por um certificado de autoridade raiz

O comando a seguir cria um certificado assinado pelo RootCA com um nome de assunto de "SignedByRootCA" usando a chave privada do emissor.

$testCert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "SignedByRootCA" -KeyExportPolicy Exportable -KeyLength 2048 -KeyUsage DigitalSignature,KeyEncipherment -Signer $rootCert

Da mesma forma, salvamos o certificado assinado com chave privada em um arquivo PFX e apenas a chave pública em um arquivo CRT.

[String]$testCertPath = Join-Path -Path 'cert:\LocalMachine\My\' -ChildPath "$($testCert.Thumbprint)"
Export-PfxCertificate -Cert $testCertPath -FilePath testcert.pfx -Password $rootCertPassword
Export-Certificate -Cert $testCertPath -FilePath testcert.crt

Instalando um certificado no armazenamento de autoridades de certificação raiz confiáveis

Depois que um certificado autoassinado for criado, você poderá instalá-lo no armazenamento de Autoridades de Certificação Raiz Confiáveis. Todos os certificados assinados com o certificado neste momento são confiáveis pelo computador. Por esse motivo, exclua o certificado da loja assim que não precisar mais dele. Quando você exclui esse certificado de autoridade raiz, todos os outros certificados assinados com ele se tornam não autorizados. Os certificados de autoridade raiz são simplesmente um mecanismo pelo qual um grupo de certificados pode ser definido conforme necessário. Por exemplo, em aplicativos ponto a ponto, normalmente não há necessidade de uma autoridade raiz porque você simplesmente confia na identidade de um indivíduo por meio de seu certificado fornecido.

Para instalar um certificado autoassinado nas Autoridades de Certificação Raiz Confiáveis

  1. Abra o snap-in de certificado. Para obter mais informações, consulte Como exibir certificados com o snap-in do MMC.

  2. Abra a pasta para armazenar o certificado, o Computador Local ou o Usuário Atual.

  3. Abra a pasta Autoridades de Certificação Raiz Confiáveis .

  4. Clique com o botão direito do rato na pasta Certificados, clique em Todas as Tarefas e, em seguida, clique em Importar.

  5. Siga as instruções do assistente na tela para importar o RootCA.pfx para a loja.

Usando certificados com WCF

Depois de configurar os certificados temporários, você pode usá-los para desenvolver soluções WCF que especificam certificados como um tipo de credencial de cliente. Por exemplo, a configuração XML a seguir especifica a segurança da mensagem e um certificado como o tipo de credencial do cliente.

Para especificar um certificado como o tipo de credencial do cliente

  1. No arquivo de configuração de um serviço, use o XML a seguir para definir o modo de segurança como mensagem e o tipo de credencial do cliente como certificado.

    <bindings>
      <wsHttpBinding>
        <binding name="CertificateForClient">
          <security>
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    
  2. No arquivo de configuração de um cliente, use o XML a seguir para especificar que o certificado é encontrado no armazenamento do usuário e pode ser encontrado pesquisando no campo SubjectName pelo valor "CohoWinery".

    <behaviors>
      <endpointBehaviors>
        <behavior name="CertForClient">
          <clientCredentials>
            <clientCertificate findValue="CohoWinery" x509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    

Para obter mais informações sobre como usar certificados no WCF, consulte Trabalhando com certificados.

Segurança do .NET Framework

Certifique-se de excluir todos os certificados de autoridade raiz temporários das Autoridades de Certificação Raiz Confiáveis e das pastas Particulares clicando com o botão direito do mouse no certificado e clicando em Excluir.

Consulte também