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

Ao desenvolver um serviço ou cliente seguro usando o WCF (Windows Communication Foundation), geralmente é necessário fornecer um certificado X.509 para ser usado como credencial. Normalmente, o certificado faz parte de uma cadeia de certificados com uma autoridade raiz encontrada no repositório Autoridades de Certificação Raiz Confiáveis do computador. Ter uma cadeia de certificados permite que você tenha um 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 tempo de desenvolvimento, você pode criar dois certificados para atender aos requisitos de segurança. O primeiro é um certificado autoassinado colocado no repositório Autoridades de Certificação Raiz Confiáveis e o segundo certificado é criado a partir do primeiro e é colocado no repositório Pessoal do Computador Local ou no repositório Pessoal do Usuário Atual. Este tópico explica 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, procure usar um certificado apropriado fornecido por uma autoridade de certificação. Pode ser de um servidor de certificado do Windows Server da sua organização ou de terceiros.

Por padrão, o cmdlet New-SelfSignedCertificate cria certificados autoassinados e esses certificados não são seguros. Colocar os certificados autoassinados no repositório Autoridades de Certificação Raiz Confiáveis permite criar um ambiente de desenvolvimento que simule com mais exatidão o seu ambiente de implantação.

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

Criar um certificado autoassinado de autoridade raiz e exportar a chave privada

O comando a seguir cria um certificado autoassinado com um nome de entidade "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 o local em que será necessário em uma etapa posterior. Ao exportar um certificado com a chave privada, uma senha é necessária para protegê-lo. Salvamos a senha em 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'

Criar um certificado assinado por um certificado de autoridade raiz

O comando a seguir cria um certificado assinado por RootCA com um nome de entidade "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 repositório Autoridades de Certificação Raiz Confiáveis

Depois que um certificado autoassinado for criado, você poderá instalá-lo no repositório Autoridades de Certificação Raiz Confiáveis. Todos os certificados assinados com o certificado neste momento são confiáveis no computador. Por esse motivo, exclua o certificado do repositório assim que você não precisar mais dele. Quando você exclui esse certificado de autoridade raiz, todos os outros certificados assinados com ele tornam-se 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, pois você simplesmente confia na identidade de um indivíduo pelo certificado fornecido.

Instalar um certificado autoassinado em Autoridades de Certificação Raiz Confiáveis

  1. Abra o snap-in do certificado. Para saber mais, 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 mouse na pasta Certificados, clique em Todas as Tarefas e em Importar.

  5. Siga as instruções do assistente na tela para importar o RootCA.pfx para o repositório.

Usando certificados com o WCF

Depois de configurar os certificados temporários, use-os para desenvolver soluções WCF que especifiquem os 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 tipo de credencial do cliente.

Para especificar um certificado como 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 está no repositório do usuário e pode ser encontrado pesquisando no campo SubjectName o valor "CohoWinery".

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

Para obter mais informações sobre o uso de certificados no WCF, confira Trabalhando com certificados.

Segurança do .NET Framework

Exclua todos os certificados de autoridade raiz temporários das pastas Autoridades de Certificação Raiz Confiáveis e Pessoal, clicando com o botão direito do mouse no certificado e clicando em Excluir.

Confira também