Gerenciamento de Certificados do Windows com PowerShell

Se você é um administrador de sistema Windows, talvez tenha sido obrigado a trabalhar com certificados do Windows. Trabalhar com certificados no Windows é geralmente uma daquelas 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 oportunidade 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 artigo, o Tutorial de Certificado X.509.

Entendendo os Armazenamentos de Certificados

Dentro do gerenciador de certificados do Windows, todos os certificados existem em locais de armazenamento lógicos 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ê aprenderá 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ê às vezes verá os repositórios de certificados referidos como repositórios físicos ou lógicos. Os repositórios físicos se referem ao local real do sistema de arquivos ou registro onde a(s) chave(s) de registro e/ou arquivo(s) são armazenados. Os repositórios lógicos são referências dinâmicas que apontam para um ou mais repositórios físicos. Os repositórios lógicos são muito mais fáceis de trabalhar do que os repositórios físicos 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 um repositório de certificados de usuário dentro do gerenciador de certificados do Windows é ideal. Esse é o caso de uso comum para processos de autenticação baseados em certificados, como IEEE 802.1x com fio.

Os certificados de usuário estão localizados dentro do perfil do usuário atual e são mapeados apenas de forma lógica dentro do contexto desse usuário. Os certificados de usuário são “mapeados” e são exclusivos para cada usuário, mesmo em sistemas diferentes.

Certificados de Computador

Se um certificado for usado por todos os usuários em um computador ou por um processo do sistema, ele deve ser colocado dentro de uma loja no contexto do computador. Por exemplo, se um certificado for 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 é mapeada logicamente 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 Sistemas.

Os certificados de computador estão localizados nos registros das colmeias Local Machine e na pasta Program Data. Os certificados de usuário estão localizados nos registros das colmeias 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:

  • Sistema operacional Windows Vista, Windows Server 2008 ou mais recente. Os exemplos mostrados usam o Windows 10 Enterprise versão 1903.
  • Familiaridade com o PowerShell. Embora não seja obrigatório, esta será a linguagem usada para fazer referência a 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 Microsoft Management Console (MMC) (certmgr.msc)
  • O PowerShell
  • A ferramenta de linha de comando certutil

Neste artigo, você aprenderá como gerenciar certificados por meio do Certificates MMC snap-in e do PowerShell. Se você deseja saber mais sobre como usar o certutil, confira a Microsoft Docs.

PowerShell vs. Windows Security Certificate Manager

Já que os certificados podem ser gerenciados de várias maneiras no Windows, qual você escolhe? Você deve seguir a rota da GUI (MMC) ou usar o PowerShell na linha de comando?

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

Primeiro, considere o ciclo de vida de um certificado. Se você pretende apenas instalar ou remover um único certificado uma vez, considere usar o MMC. Mas se você estiver gerenciando vários certificados ou se encontrar executando a mesma tarefa repetidamente, a rota da linha de comando pode ser a melhor opção. Mesmo que você não saiba como 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 no menu Iniciar e digite 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 depois em Opções. Você verá então opções para escolher para 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 fazer isso é fazendo referência ao 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 abrindo-o no MMC, como mostrado abaixo.

Inspecting a Windows certificate

Um recurso importante a ser destacado é a existência de chaves privadas embutidas. Certificados no Windows também podem ter uma chave privada correspondente. Essas chaves privadas são armazenadas em arquivos criptografados em lojas físicas correspondentes.

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 parecer apenas um pedaço de papel com uma fita, não há chave privada correspondente. Se um certificado tiver uma chave privada, você verá um ícone de chave no 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 suas lojas físicas (registro e sistema de arquivos).

Por Loja Física

Usando o cmdlet do PowerShell Get-ChildItem, você pode enumerar todas as chaves e valores dentro do caminho da chave do registro 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á à impressão digital do certificado para uma AC confiável e seu certificado correspondente na propriedade correspondente. Você pode ver um exemplo de saída disso abaixo.

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

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

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

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 de Assunto do certificado. Cada chave privada que você instalar 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á 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 a Cert: PSDrive. O PSDrive Cert: mapeia certificados para as lojas físicas, assim como o MMC faz.

Infelizmente, o MMC e o PSDrive Cert 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 PSDrive Cert.

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

Ao trabalhar com certificados, você precisará de uma maneira de filtrar e selecionar certificados para realizar operações específicas. Na maioria das vezes, você irá 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 da AC 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 Emissor, são úteis para encontrar o certificado que você está procurando. As extensões fornecem informações sobre o certificado, como para quem foi emitido, para que pode ser usado e quaisquer restrições sobre ele.

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

As ScriptProperties existentes disponíveis no objeto mostram exemplos de interação com essas extensões. No comando abaixo, você extrairá manualmente os Usos de Chave para visualizar 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 que introduzimos 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 de uma única linha ou de várias linhas.

Você utilizará o valor de Impressão Digital (Thumbprint) do certificado na Figura 7 no comando abaixo. O valor de Impressão Digital é 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 Certificadora (CA).

Agora vamos criar um certificado autoassinado nas lojas do Usuário Atual e da Máquina Local para usar como 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 tudo nas 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 padronizadas de compartilhar certificados de forma eficaz. Igualmente importante é a segurança das suas chaves privadas. Armazenar chaves privadas em mídias inacessíveis ou com materiais de recuperação de desastres é uma prática comum para certas chaves privadas.

Ambos os casos 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 utilizem formatos de arquivo amplamente aceitos. A importação permite trazer 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 depois 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ê precisará 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 deve 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 apenas com uma chave pública. Quando exportado, você deve agora ter a opção de selecionar Sim, exportar a chave privada como mostrado abaixo.

Certificate Export Wizard with exportable private key.

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

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

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 é se o arquivo inclui 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.

Quando você usa o Assistente de Importação de Certificados para um PFX, você precisará fornecer a senha usada para criptografar a chave privada. Aqui está mais 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 deve ter cuidado. Provavelmente, você terá 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, é usado o Usuário Atual, 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 sujeito.

$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 ver como exportar também a chave privada. Abaixo, você está verificando se o certificado selecionado tem uma chave privada; se isso não retornar true, então o comando Get-Item provavelmente selecionou o certificado errado.

$certificate.HasPrivateKey

Abaixo, você vai definir uma senha para criptografar a chave privada. Em seguida, exporte o certificado selecionado em um arquivo PFX e use a senha que você digitou 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 a 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

Digamos que você queira instalar também 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\), você precisará executar o comando a partir de 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. A configuração padrão é não ser exportável. Chaves privadas exportáveis são outra consideração de segurança e merecem mais atenção em relação à forma como você as protege.

Também existem 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 de 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, é possível ver as propriedades de 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 cautela. Ao passar o objeto $certificate através do pipeline para o cmdlet Remove-Item no comando abaixo, você irá excluir todo o conteúdo do certificado sem qualquer 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/