Gerenciamento de certificados do Windows com PowerShell

Se você é um administrador de sistema Windows, provavelmente já teve que lidar com certificados do Windows. Trabalhar com certificados no Windows é geralmente uma das tarefas extras que um administrador de sistema precisa assumir. Usando o Gerenciador de Certificados do Windows como uma ferramenta, você pode fazer isso!

Os certificados são notoriamente complexos e difíceis de entender, mas neste artigo você terá a chance de descobrir que os certificados não são tão assustadores no Windows!

Este artigo abordará principalmente o trabalho com certificados no Windows. Se você gostaria de aprender mais sobre como os certificados funcionam em geral, confira o artigo complementar deste tutorial sobre Certificado X.509.

Entendendo os Armazenamentos de Certificados

No Gerenciador de Certificados do Windows, todos os certificados existem em locais de armazenamento lógico chamados armazenamentos de certificados. Os armazenamentos de certificados são “recipientes” onde o Windows mantém todos os certificados que estão atualmente instalados, e um certificado pode estar em mais de um armazenamento.

Infelizmente, os armazenamentos de certificados não são o conceito mais intuitivo com o qual se trabalhar. Você lerá sobre como diferenciar esses armazenamentos e como trabalhar com eles abaixo.

Cada armazenamento está localizado no Registro do Windows e no sistema de arquivos. Consulte a tabela abaixo para obter detalhes. Ao trabalhar com um certificado em um armazenamento, você está interagindo com o armazenamento lógico, não modificando diretamente o registro ou o sistema de arquivos. Essa forma mais simples permite que você trabalhe com um único objeto, enquanto o Windows cuida de como representar esse objeto no disco.

Você verá às vezes as lojas de certificados referidas como lojas físicas ou lógicas. As lojas físicas fazem referência à localização real no sistema de arquivos ou no registro onde a(s) chave(s) do registro e/ou arquivo(s) são armazenados. As lojas lógicas são referências dinâmicas que referenciam uma ou mais lojas físicas. As lojas lógicas são muito mais fáceis de trabalhar do que as lojas físicas na maioria dos casos de uso comuns.

O Windows armazena certificados em duas áreas diferentes – um contexto de usuário e um contexto de computador. Um certificado é colocado em um desses dois contextos dependendo se o certificado deve ser usado por um único usuário, vários usuários ou pelo próprio computador. Para o restante deste artigo, um certificado em um contexto de usuário e computador será informalmente chamado de certificados de usuário e certificados de computador.

Certificados de Usuário

Se você pretende que um certificado seja usado por um único usuário, então uma loja de certificados de usuário dentro do gerenciador de certificados do Windows é ideal. Este é o caso de uso comum para processos de autenticação baseados em certificado, como wired IEEE 802.1x.

Certificados de usuário estão localizados dentro do perfil do usuário atual e são mapeados apenas logicamente dentro do contexto desse usuário. Certificados de usuário são “mapeados” e são únicos para cada usuário, mesmo nos mesmos sistemas.

Certificados de Computador

Se um certificado será usado por todos os usuários em um computador ou em um processo do sistema, ele deve ser colocado dentro de uma loja no contexto do computador. Por exemplo, se um certificado será usado em um servidor web para criptografar a comunicação para todos os clientes, colocar um certificado em uma loja no contexto do computador seria ideal.

Você verá que a loja de certificados de um computador é logicamente mapeada para todos os contextos de usuário. Isso permite que certificados em uma loja de certificados de computador sejam usados por todos os usuários, dependendo das permissões configuradas para a chave privada.

Para obter mais informações sobre chaves privadas, certifique-se de verificar o artigo Tutorial de Certificados X.509: Um Guia para Administradores de Sistema.

Os certificados de computador estão localizados no registro Local Machine e na pasta Program Data. Os certificados de usuário estão localizados nos registros Current User e na pasta App Data. Abaixo você pode ver uma divisão de onde cada tipo de loja está localizado no registro e no sistema de arquivos.

Context Registry Path Explanation
User HKCU:\SOFTWARE\Microsoft\SystemCertificates\ Physical store for user-specific public keys
User HKCU:\SOFTWARE\Policies\Microsoft\SystemCertificates\ Physical store for user-specific public keys installed by Active Directory (AD) Group Policy Objects (GPOs)
Computer HKLM:\SOFTWARE\Microsoft\SystemCertificates\ Physical store for machine-wide public keys
Computer HKLM:\SOFTWARE\Microsoft\Cryptography\Services\ Physical store for keys associated with a specific service
Computer HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\ Physical store for machine-wide public keys installed by GPOs
Computer HKLM:\SOFTWARE\Microsoft\EnterpriseCertificates\ Physical store for machine-wide public keys installed by the Enterprise PKI Containers within an AD domain
Context File Location Explanation
User $env:APPDATA\Microsoft\SystemCertificates\ Physical store for user-specific public keys and pointers to private keys
User $env:APPDATA\Microsoft\Crypto\ Physical store for user-specific private key containers
Computer $env:ProgramData\Microsoft\Crypto\ Physical store for machine-wide private key containers

Pré-requisitos

Ao longo do restante deste artigo, você encontrará vários exemplos mostrando interações com as lojas de certificados do Windows. Para replicar esses exemplos, certifique-se de atender aos seguintes pré-requisitos:

  • Windows Vista, Windows Server 2008 ou um sistema operacional mais recente. Os exemplos mostrados utilizam o Windows 10 Enterprise versão 1903.
  • Familiaridade com o PowerShell. Embora não seja obrigatório, esta será a linguagem usada para referenciar certificados quando apropriado. Os exemplos mostrados foram todos criados com o Windows PowerShell 5.1.
  • Você não precisará de certificados específicos instalados para acompanhar, mas o uso de um certificado autoassinado é benéfico.

Gerenciando Certificados no Windows

No Windows, existem três maneiras principais de gerenciar certificados:

  • O snap-in Certificates do Microsoft Management Console (MMC) (certmgr.msc)
  • O PowerShell
  • A ferramenta de linha de comando certutil

Neste artigo, você aprenderá como gerenciar certificados através do snap-in Certificates do MMC e do PowerShell. Se você quiser saber mais sobre como usar o certutil, confira a Documentação da Microsoft.

PowerShell vs. Windows Security Certificate Manager

Já que os certificados podem ser gerenciados de algumas maneiras diferentes no Windows, qual você escolhe? Deve-se seguir a rota GUI (MMC) ou usar a linha de comando com o PowerShell?

Observação: Este artigo é relevante tanto para os snap-ins Windows 7 Certificate Manager quanto Windows 10 Certificate Manager do MMC.

Primeiro, considere o ciclo de vida de um certificado. Se você pretende instalar ou remover apenas um certificado uma vez, considere usar o MMC. Mas se você estiver gerenciando vários certificados ou se encontrar realizando a mesma tarefa repetidamente, pode ser melhor seguir a rota da linha de comando. Mesmo que você não saiba escrever scripts do PowerShell, valeria a pena aprender se tiver muitos certificados diferentes para gerenciar.

Vamos primeiro dar uma olhada em como descobrir os certificados instalados no Windows usando tanto o Gerenciador de Certificados quanto o PowerShell.

Usando o Gerenciador de Certificados do Windows (certmgr.msc)

Para visualizar certificados com o MMC, abra o Gerenciador de Certificados a partir do menu Iniciar digitando certmgr.msc. Isso abrirá o MMC de Certificados do Windows. Essa visualização inicial fornecerá uma visão geral de todas as lojas lógicas exibidas na janela esquerda.

Você pode ver na captura de tela abaixo que a loja lógica Autoridades de Certificação Raiz Confiáveis está selecionada.

Trusted Root Certification Authorities store

Visualizando Lojas Físicas

Por padrão, o gerenciador de certificados do Windows não mostrará as lojas físicas reais. Para mostrar as lojas, clique em Exibir e, em seguida, em Opções. Você verá opções para escolher mostrar as lojas físicas de certificados. Habilitar essa opção facilita a identificação dos caminhos específicos dentro do Windows.

Figure 2 – The Certificates MMC View Options with Physical certificate stores selected.

Agora você pode ver que contêineres adicionais são mostrados sob a loja lógica de exemplo Autoridades de Certificação Raiz Confiáveis mostrada anteriormente. Os certificados ainda estão agrupados em relação às suas lojas lógicas, mas agora você pode ver a loja física “Registro”.

Inspecting the physical cert stores

Inspecionando Atributos no Gerenciador de Certificados do Windows

Há muitos atributos de um certificado que você pode ver ao visualizá-los com o MMC. Por exemplo, você provavelmente desejará selecionar certificados específicos.

A maneira mais fácil de realizar isso é referenciar o valor da extensão Número de Série ou Thumbprint do certificado. Se o certificado foi assinado por uma autoridade de certificação (CA), ele terá um número de série quando emitido. O Thumbprint é calculado toda vez que o certificado é visualizado.

Você pode ver alguns dos atributos de um certificado ao abri-lo no MMC, como mostrado abaixo.

Inspecting a Windows certificate

Uma característica importante a ser destacada são as chaves privadas incorporadas. Os certificados no Windows também podem ter uma chave privada correspondente. Essas chaves privadas são armazenadas em locais físicos correspondentes como arquivos criptografados.

Para distinguir rapidamente um certificado com e sem uma chave privada correspondente, observe o ícone do certificado. No gerenciador de certificados do Windows, se o ícone simplesmente parecer um pedaço de papel com uma fita, não há chave privada correspondente. Se um certificado tiver uma chave privada, você verá uma chave no ícone do MMC e verá uma chave na parte inferior da guia Geral ao abrir o certificado.

Certificate without an embedded private key

Usando o PowerShell

Assim como no MMC, você também pode visualizar e gerenciar certificados com o PowerShell. Vamos primeiro inspecionar certificados em seus locais físicos (registro e sistema de arquivos).

Por Local Físico

Usando o cmdlet Get-ChildItem do PowerShell, você pode enumerar todas as chaves e valores dentro do caminho da chave de registro pai HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates\.

O comando abaixo enumerará todos os certificados do usuário atualmente conectado no repositório lógico Autoridades de Certificação Intermediárias.

Get-ChildItem -Path HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates\

Cada entrada no registro do sistema corresponderá ao Thumbprint do certificado para uma AC confiável e seu certificado correspondente na propriedade correspondente. Você pode ver um exemplo de saída abaixo.

Results of the installed certificates from the example commands, limited to the first 5 entries.

Outro repositório comum é o repositório Pessoal. Seus certificados para este repositório estão localizados no sistema de arquivos, em vez do registro. Nos comandos a seguir, mostraremos esses caminhos físicos diferentes e seus propósitos.

Cada arquivo no diretório retornado pelo comando abaixo corresponde a um certificado instalado no repositório do usuário atual Pessoal.

Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Certificates\

Cada arquivo retornado no comando abaixo é uma referência ao objeto de uma chave privada criada pelo Provedor de Armazenamento de Chaves (KSP). O nome do arquivo corresponde ao Identificador de Chave do Sujeito do certificado. Cada chave privada que você instala terá um arquivo correspondente adicionado.

Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Keys\

Cada arquivo no diretório retornado pelo comando abaixo é o contêiner único para a chave privada criptografada criada pelo KSP. Não há uma relação direta entre o nome do arquivo e o certificado, mas o arquivo é o alvo do ponteiro no comando anterior.

Get-ChildItem -Path $env:APPDATA\Microsoft\Crypto\Keys

Por Repositório Lógico

Uma vez que trabalhar com certificados em seus caminhos físicos é incomum, você estará trabalhando com as lojas lógicas para o restante dos exemplos.

O PowerShell pode acessar as lojas lógicas do Windows usando o Cert: PSDrive. O Cert: PSDrive mapeia os certificados para as lojas físicas, assim como o MMC faz.

Infelizmente, o MMC e o Cert PSDrive não rotulam as lojas lógicas da mesma forma. Abaixo você pode ver uma tabela de comparação das lojas comuns e seus nomes tanto no MMC quanto no Cert PSDrive.

Cert: Certificates MMC
My Personal
Remote Desktop Remote Desktop
Root Trusted Root Certification Authorities
CA Intermediate Certification Authorities
AuthRoot Third-Party Root Certification Authorities
TrustedPublisher Trusted Publishers
Trust Enterprise Trust
UserDS Active Directory User Object
Selecionando Certificados

Quando você está trabalhando com certificados, você precisará de uma maneira de filtrar e selecionar certificados para realizar operações específicas. Na maioria das vezes, você filtrará e selecionará certificados com base no valor de uma extensão específica.

Para os exemplos a seguir, você precisa começar listando todos os certificados instalados na loja CA raiz.

Get-ChildItem -Path Cert:\CurrentUser\Root\

Os objetos retornados serão objetos de certificado que você pode usar nos exemplos a seguir.

As extensões comuns já estão disponíveis como propriedades dos objetos de certificado. No exemplo abaixo, você está usando Get-Member para listar todas as propriedades dos objetos retornados.

Get-ChildItem -Path Cert:\CurrentUser\Root\ | Get-Member -MemberType Properties
Figure 9 – The properties available for the returned certificate objects.

Como você pode ver na Figura 9, algumas dessas extensões, como Emitente, são úteis para encontrar o certificado que você está procurando. As extensões fornecem informações sobre o certificado, como para quem ele foi emitido, para que pode ser usado e quaisquer restrições que possua.

Em casos de uso mais complexos, você desejará encontrar certificados por outras extensões, como o modelo de certificado utilizado. A dificuldade é que os valores dessas extensões são retornados como um array de inteiros. Esses inteiros correspondem a conteúdo codificado em ASN.1.

As ScriptProperties existentes disponíveis no objeto mostram exemplos de como interagir com eles. No comando abaixo, você irá extrair manualmente as utilizações da chave para ver essa relação.

((Get-ChildItem -Path Cert:\CurrentUser\Root\ | select -First 1).Extensions | Where-Object {$_.Oid.FriendlyName -eq "Key Usage"}).format($true)

A nova parte introduzida no comando acima é o método format, que realiza a decodificação ASN.1. Você passa um valor booleano (por exemplo, $true) acima para identificar se deseja que o objeto retornado seja em uma única linha ou várias linhas.

Você usará o valor Thumbprint do certificado na Figura 7 no comando abaixo. O valor Thumbprint é definido como uma variável do PowerShell e usado para selecionar o certificado específico nos comandos abaixo.

$thumb = "cdd4eeae6000ac7f40c3802c171e30148030c072"
Get-ChildItem -Path Cert:\CurrentUser\Root\ | Where-Object {$_.Thumbprint -eq $thumb}

Criando Certificados Autoassinados com o PowerShell

O PowerShell pode criar certificados autoassinados usando o cmdlet New-SelfSignedCertificate. Certificados autoassinados são úteis para testes, pois permitem gerar um par de chaves pública e privada sem o uso de uma Autoridade de Certificação (CA).

Vamos agora criar um certificado autoassinado nas Lojas do Usuário Atual e da Máquina Local para usar em exemplos nos próximos passos.

No exemplo abaixo, o PowerShell está gerando um par de chaves pública e privada, um certificado autoassinado e instalando-os em todas as lojas de certificados apropriadas.

PS51> New-SelfSignedCertificate -Subject 'User-Test' -CertStoreLocation 'Cert:\CurrentUser\My'
PS51> New-SelfSignedCertificate -Subject 'Computer-Test' -CertStoreLocation 'Cert:\LocalMachine\My'

O uso de certificados autoassinados para serviços de produção não é encorajado, pois todos os mecanismos baseados em confiança não existem.

Importação/Exportação de Certificados

A criptografia de chave pública é fundamentalmente baseada na ampla acessibilidade da chave pública. Dado esse princípio, é necessário ter maneiras padrão de compartilhar certificados de forma eficaz. Igualmente importante é a segurança das suas chaves privadas. Armazenar as chaves privadas em mídias inacessíveis ou com materiais de recuperação de desastres é uma prática comum para certas chaves privadas.

Ambas as situações requerem maneiras de armazenar esses objetos criptográficos em formatos padrão. A exportação fornece as funções para realizar o armazenamento desses objetos e garantir que eles usem formatos de arquivo amplamente aceitos. A importação permite que você traga os objetos criptográficos para sistemas operacionais Windows.

Usando o Gerenciador de Certificados do Windows (certmgr.msc)

A exportação de certificados pelo MMC é relativamente simples. Para exportar um certificado sem uma chave privada, clique no certificado no MMC, clique no menu Todas as Tarefas e, em seguida, em Exportar.

Durante a exportação, será solicitado um formato de arquivo, como mostrado abaixo. As opções mais comuns são DER ou Codificado em Base-64.

Figure 10 – Exporting a certificate with no private key or one that is marked as not exportable.

Exportação de Chaves Privadas

Para exportar um certificado com uma chave privada associada, você terá que atender a dois critérios; a conta logada deve ter permissão para a chave privada (apenas para certificados de computador) e a chave privada precisa estar marcada como exportável.

Para verificar as permissões das chaves privadas de um computador local, você pode selecionar um certificado com uma chave privada, escolher Todas as Tarefas e Gerenciar Chaves Privadas dentro do MMC de Certificados. A caixa de diálogo que se abre mostra as entradas de controle de acesso para as chaves privadas.

The Basic Security Property Page for the private keys of a certificate with the Subject of ServerName.

Quando esses dois ou três pré-requisitos forem atendidos, você pode selecionar um certificado, clicar em Todas as Tarefas e depois em Exportar, assim como faria com um certificado que possui apenas uma chave pública. Quando exportado, você deve agora ter a opção de selecionar Sim, exportar a chave privada, conforme mostrado abaixo.

Certificate Export Wizard with exportable private key.

Ao exportar uma chave privada no Windows, você só pode salvar o arquivo como um PFX. Esses tipos de arquivo e formatos de codificação são detalhados em esta postagem.

Para as configurações restantes mostradas no assistente de exportação, você pode usar as configurações padrão. A tabela abaixo apresenta um resumo rápido de cada uma delas.

Setting Description
Including all certificates in the certification path if possible Helps with portability of certificate issuers, and includes all pertinent public keys in the PFX
Delete the private key if the export is successful Removes the private key from the file and has few common use cases, but one example is to test access to private keys
Export all extended properties Will include any extensions within the current certificate, these relate to the certificates [specific settings]() for Windows interfaces
Enable certificate privacy Normally only the private key will be encrypted in the exported PFX file, this setting encrypts the entire contents of the PFX file
Group or user names You can use a group or user security principal from Active Directory for encrypting the contents of the PFX file, but a password is the most portable option across legacy systems or computers not joined to the same domain

Importando Certificados

A função de importação é a mesma para todos os tipos de arquivo de certificado suportados. A única diferença é que, se o arquivo incluir uma chave privada, você pode “Marcar esta chave como exportável”, o que você lerá mais abaixo. O Windows usará o Assistente de Importação de Certificados.

Figure 12 – Certificate Import Wizard with a PFX file.

Ao usar o Assistente de Importação de Certificados para um PFX, você precisará fornecer a senha usada para criptografar a chave privada. Aqui está um resumo das opções de importação.

Setting Description
Enable strong private key protection Requires a password for each access of a private key, be cautious of newer functions as they will not be supported in all software
Mark this key as exportable You should try to avoid using this setting on any end system, private keys should be treated similarly to storing passwords
Protect private key using [virtualization-based security] The setting provides more security functionality for protecting private keys from advanced malware attacks
Include all extended properties Relates to the same Windows-specific settings discussed as with exporting

Os certificados de assinatura de código do PowerShell são um bom caso de uso para proteção forte da chave privada.

A colocação automática de certificados pode ser algo com o qual se ter cautela. Você provavelmente terá os melhores resultados selecionando manualmente a loja de certificados.

Usando o PowerShell

Agora, com o PowerShell, exporte um dos certificados autoassinados que você criou anteriormente. No exemplo, o Usuário Atual é usado, mas você pode usar qualquer um.

Abaixo, você está selecionando um certificado na loja lógica Pessoal do Usuário Atual que foi autoassinado, ou seja, onde o emissor corresponde ao assunto.

$certificate = Get-Item (Get-ChildItem -Path Cert:\CurrentUser\My\ | Where-Object {$_.Subject -eq $_.Issuer}).PSPath

Agora que você selecionou um certificado, pode usar o comando Export-Certificate para salvar um arquivo codificado em DER usando o comando abaixo.

Export-Certificate -FilePath $env:USERPROFILE\Desktop\certificate.cer -Cert $certificate

Agora vamos analisar a exportação da chave privada também. Abaixo, você está verificando se o certificado que você selecionou tem uma chave privada, se isso não retornar verdadeiro, então o comando Get-Item provavelmente selecionou o certificado errado.

$certificate.HasPrivateKey

Abaixo, você irá definir uma senha para usar na criptografia da chave privada. Em seguida, exporte o certificado selecionado para um arquivo PFX e use a senha que você inseriu anteriormente para criptografar o arquivo.

$pfxPassword = "ComplexPassword!" | ConvertTo-SecureString -AsPlainText -Force
Export-PfxCertificate -FilePath $env:USERPROFILE\Desktop\certificate.pfx -Password $pfxPassword -Cert $certificate

Da mesma forma que na exportação, existem dois comandos. Um comando para importar certificados e outro para importar arquivos PFX.

Abaixo o comando Import-Certificate importa o arquivo codificado em DER que você exportou anteriormente para a Loja Pessoal do Usuário Atual.

Import-Certificate -FilePath $env:USERPROFILE\Desktop\certificate.cer -CertStoreLocation Cert:\CurrentUser\My

Vamos dizer que você também queira instalar a chave privada desse certificado.

$pfxPassword = "ComplexPassword!" | ConvertTo-SecureString -AsPlainText -Force
Import-PfxCertificate -Exportable -Password $pfxPassword -CertStoreLocation Cert:\CurrentUser\My -FilePath $env:USERPROFILE\Desktop\certificate.pfx

Lembre-se de que a senha precisa ser uma String Segura. Além disso, se você estiver importando para a Loja da Máquina Local (por exemplo, Cert:\LocalMachine\), será necessário executar o comando em um prompt de Administrador elevado.

No exemplo acima, você também usa o parâmetro Exportable com o comando, marcando a chave privada como exportável no futuro. O padrão é não ser exportável. Chaves privadas exportáveis são outra consideração de segurança e merecem uma atenção adicional sobre como você as protege.

Também há muitas outras coisas a fazer com certificados no Windows, então você deve explorar mais.

Removendo Certificados com o PowerShell

Ao remover certificados, você precisa ter em mente que não há Lixeira. Uma vez que você exclui um certificado, ele desaparece. Isso significa que é fundamental confirmar que você está excluindo o certificado correto, validando um identificador único, como o número de série ou o valor de extensão da impressão digital (Thumbprint).

Da mesma forma que acima, no comando abaixo selecionamos um certificado autoassinado da Loja Pessoal do Usuário Atual.

$certificate = Get-Item (Get-ChildItem -Path Cert:\CurrentUser\My\ | Where-Object {$_.Subject -eq $_.Issuer}).PSPath

Abaixo você pode ver as propriedades Impressão Digital (Thumbprint), Número de Série e Assunto do certificado selecionado para garantir que seja o certificado que você pretende selecionar.

$certificate.Thumbprint
$certificate.SerialNumber
$certificate.Subject

Verifique se você selecionou o certificado correto que pretende excluir.

O comando abaixo remove todos os objetos de certificado selecionados, por favor, use com cuidado. Ao passar o objeto $certificate através do pipeline para o cmdlet Remove-Item no comando abaixo, você excluirá todo o conteúdo do certificado sem nenhuma solicitação de validação.

$certificate | Remove-Item

Resumo

Ao longo deste artigo, você trabalhou com certificados no Windows, aprendendo como acessá-los e algumas ferramentas para usar ao trabalhar com eles. Há muito mais a explorar sobre o assunto, incluindo como associar certificados instalados a serviços específicos ou até mesmo como implementar uma Infraestrutura de Chave Pública (PKI) privada, implantando suas próprias Autoridades de Certificação (CA).

Leitura adicional

Source:
https://adamtheautomator.com/windows-certificate-manager/