Partilhar via


Provedor de certificados

Nome do fornecedor

Certidão

Dispositivos

Cert:

Capacidades

Deve Processar

Breve descrição

Fornece acesso a repositórios de certificados X.509 e certificados no PowerShell.

Descrição detalhada

O provedor de de Certificados do PowerShell permite obter, adicionar, alterar, limpar e excluir certificados e armazenamentos de certificados no PowerShell.

A unidade de certificado é um namespace hierárquico que contém os armazenamentos e certificados cerificados em seu computador.

O provedor de certificado oferece suporte aos cmdlets a seguir, que são abordados neste artigo.

Tipos expostos por este provedor

A unidade de certificado expõe os seguintes tipos.

  • Locais de armazenamento (Microsoft.PowerShell.Commands.X509StoreLocation), que são contêineres de alto nível que agrupam os certificados para o usuário atual e para todos os usuários. Cada sistema tem um local de armazenamento CurrentUser e LocalMachine (todos os usuários).

  • Armazenamentos de certificados (System.Security.Cryptography.X509Certificates.X509Store), que são armazenamentos físicos nos quais os certificados são salvos e gerenciados.

  • Certificados X.509 System.Security.Cryptography.X509Certificates.X509Certificate2 , cada um dos quais representa um certificado X.509 no computador. Os certificados são identificados pelas suas impressões digitais.

O provedor Certificate expõe o namespace do certificado como a unidade Cert: no PowerShell. Este comando usa o Set-Location comando para alterar o local atual para o armazenamento de certificados raiz no local de armazenamento LocalMachine. Use uma barra invertida (\) ou uma barra (/) para indicar um nível da Cert: unidade.

Set-Location Cert:

Você também pode trabalhar com o provedor de certificados de qualquer outra unidade do PowerShell. Para fazer referência a um alias de outro local, use o nome do drive Cert: no caminho.

PS Cert:\> Set-Location -Path LocalMachine\Root

Para retornar a uma unidade do sistema de arquivos, digite o nome da unidade. Por exemplo, digite:

Set-Location C:

Observação

O PowerShell utiliza aliases para proporcionar uma forma familiar de interagir com os caminhos dos fornecedores. Comandos como dir e ls agora são sinónimos para Get-ChildItem, e cd é um sinónimo para Set-Location. e pwd é um alias para Get-Location.

Exibindo o conteúdo da unidade Cert:

Novos parâmetros dinâmicos, DnsName, , SSLServerAuthenticationEKU, e ExpiringInDays foram adicionados ao Get-ChildItem cmdlet na Cert: unidade. Os novos parâmetros dinâmicos estão disponíveis no Windows PowerShell 3.0 e versões mais recentes do PowerShell. Os parâmetros do provedor funcionam com o IIS 8.0 no Windows Server 2012 e posterior.

Este comando usa o Get-ChildItem cmdlet para exibir os repositórios de certificados no local de armazenamento de certificados CurrentUser.

Se você não estiver na Cert: unidade, use um caminho absoluto.

PS Cert:\CurrentUser\> Get-ChildItem

Exibindo propriedades de certificado na unidade Cert:

Este exemplo obtém um certificado com Get-Item e o armazena em uma variável. O exemplo mostra as novas propriedades de script de certificado (DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer) usando Select-Object.

$c = Get-Item cert:\LocalMachine\My\52A149D0393CE8A8D4AF0B172ED667A9E3A1F44E
$c | Format-List DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer
DnsNameList          : {SERVER01.contoso.com}
EnhancedKeyUsageList : {WiFi-Machine (1.3.6.1.4.1.311.42.2.6),
                       Client Authentication (1.3.6.1.5.5.7.3.2)}
SendAsTrustedIssuer  : False

Localizar todos os certificados CodeSigning

Este comando usa os parâmetros CodeSigningCert e Recurse do cmdlet para obter todos os certificados no computador que têm autoridade de assinatura de Get-ChildItem código.

Get-ChildItem -Path cert: -CodeSigningCert -Recurse

Localizar certificados expirados

Este comando usa o parâmetro ExpiringInDays do Get-ChildItem cmdlet para obter certificados que expirarão nos próximos 30 dias.

Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30

Localizar certificados SSL do servidor

Este comando usa o parâmetro SSLServerAuthentication do cmdlet para obter todos os Certificados SSL do Get-ChildItem Servidor nos repositórios My e WebHosting.

Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
  -SSLServerAuthentication

Localizar certificados expirados em computadores remotos

Este comando usa o cmdlet Invoke-Command para executar um comando Get-ChildItem nos computadores Srv01 e Srv02. Um valor de zero (0) no parâmetro ExpiringInDays obtém certificados nos computadores Srv01 e Srv02 que expiraram.

Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* `
  -Recurse -ExpiringInDays 0}

Combinando filtros para localizar um conjunto específico de certificados

Este comando obtém todos os certificados no local de armazenamento LocalMachine que têm os seguintes atributos:

  • "fabrikam" no seu nome DNS
  • "Autenticação de Cliente" em seu EKU
  • um valor de $true para a propriedade SendAsTrustedIssuer
  • não expirar nos próximos 30 dias.

A propriedade NotAfter armazena a data de validade do certificado.

Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
  -EKU "*Client Authentication*" | Where-Object {
                                     $_.SendAsTrustedIssuer -and `
                                     $_.NotAfter -gt (get-date).AddDays.(30)
                                   }

Abrindo o snap-in Certificados MMC

O Invoke-Item cmdlet usará o aplicativo padrão para abrir um caminho especificado. Para certificados, o aplicativo padrão é o snap-in Certificados MMC.

Este comando abre o snap-in Certificados do MMC para gerenciar o certificado especificado.

Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B

Cópia de certificados

A cópia de certificados não é suportada pelo provedor de certificados . Quando você tenta copiar um certificado, você vê esse erro.

$path = "Cert:\LocalMachine\Root\E2C0F6662D3C569705B4B31FE2CBF3434094B254"
PS Cert:\LocalMachine\> Copy-Item -Path $path -Destination .\CA\
Copy-Item : Provider operation stopped because the provider does not support
this operation.
At line:1 char:1
+ Copy-Item -Path $path -Destination .\CA\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotImplemented: (:) [Copy-Item],
                              PSNotSupportedException
    + FullyQualifiedErrorId : NotSupported,
                              Microsoft.PowerShell.Commands.CopyItemCommand

Movendo certificados

Mover todos os certificados de autenticação do Servidor SSL para o repositório WebHosting

Este comando usa o Move-Item cmdlet para mover um certificado do repositório My store para o repositório WebHosting.

Move-Item não moverá repositórios de certificados e não moverá certificados para um local de armazenamento diferente, como mover um certificado de LocalMachine para CurrentUser. O Move-Item cmdlet move certificados, mas não move chaves privadas.

Este comando usa o parâmetro SSLServerAuthentication do cmdlet para obter certificados de autenticação de servidor SSL no repositório de Get-ChildItem certificados MY.

Os certificados retornados são canalizados para o Move-Item cmdlet, que move os certificados para o repositório WebHosting.

Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication | Move-Item `
  -Destination cert:\LocalMachine\WebHosting

Excluindo certificados e chaves privadas

O Remove-Item cmdlet removerá os certificados que você especificar. O -DeleteKey parâmetro dynamic exclui a chave privada.

Excluir um certificado do armazenamento da autoridade de certificação

Este comando exclui um certificado do armazenamento de certificados da autoridade de certificação, mas deixa a chave privada associada intacta.

Na unidade Cert:, o cmdlet Remove-Item suporta apenas os parâmetros DeleteKey, Path, WhatIfe Confirm parâmetros. Todos os outros parâmetros são ignorados.

Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0

Excluir um certificado usando curingas no nome DNS

Este comando exclui todos os certificados que têm um nome DNS que contém "Fabrikam". Ele usa o parâmetro DNSName do cmdlet Get-ChildItem para obter os certificados e o cmdlet Remove-Item para excluí-los.

Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item

Excluir chaves privadas de um computador remoto

Esta série de comandos permite a delegação e, em seguida, elimina o certificado e a chave privada associada num computador remoto. Para excluir uma chave privada em um computador remoto, você deve usar credenciais delegadas.

Use o cmdlet Enable-WSManCredSSP para habilitar a autenticação CredSSP (Credential Security Service Provider) em um cliente no computador remoto S1. CredSSP permite autenticação delegada.

Enable-WSManCredSSP -Role Client -DelegateComputer S1

Use o cmdlet Connect-WSMan para conectar o computador S1 ao serviço WinRM no computador local. Quando esse comando for concluído, o computador S1 aparecerá na unidade WSMan: local no PowerShell.

Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01

Agora, você pode usar o cmdlet Set-Item na unidade WSMan: para habilitar o atributo CredSSP para o serviço WinRM.

Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true

Inicie uma sessão remota no computador s1 usando o cmdlet e especifique a New-PSSession autenticação CredSSP. Salva a sessão na variável $s.

$s  = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01

Por fim, use o cmdlet Invoke-Command para executar um comando Remove-Item na sessão na variável $s. O comando Remove-Item usa o parâmetro DeleteKey para remover a chave privada junto com o certificado especificado.

Invoke-Command -Session $s { Remove-Item `
  -Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
  -DeleteKey
  }

Excluir certificados expirados

Este comando usa o parâmetro ExpiringInDays do Get-ChildItem cmdlet com um valor de 0 para obter certificados no repositório WebHosting que expiraram.

A variável que contém os certificados retornados é canalizada para o cmdlet Remove-Item, que os exclui. O comando usa o parâmetro DeleteKey para excluir a chave privada junto com o certificado.

$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey

Criação de certificados

O New-Item cmdlet não cria novos certificados no provedor de certificados . Use o cmdlet New-SelfSignedCertificate para criar um certificado para fins de teste.

Criando repositórios de certificados

Na unidade Cert:, o New-Item cmdlet cria repositórios de certificados no local de armazenamento LocalMachine. Ele suporta os parâmetros Name, Path, WhatIfe Confirm parâmetros. Todos os outros parâmetros são ignorados. O comando retorna um System.Security.Cryptography.X509Certificates.X509Store que representa o novo armazenamento de certificados.

Este comando cria um novo armazenamento de certificados chamado "CustomStore" no local de armazenamento LocalMachine.

New-Item -Path cert:\LocalMachine\CustomStore

Criar um novo armazenamento de certificados em um computador remoto

Este comando cria um novo armazenamento de certificados chamado "HostingStore" no local de armazenamento LocalMachine no computador Server01.

O comando usa o cmdlet Invoke-Command para executar um comando New-Item no computador Server01. O comando retorna um System.Security.Cryptography.X509Certificates.X509Store que representa o novo armazenamento de certificados.

Invoke-Command { New-Item -Path cert:\LocalMachine\CustomStore } `
  -ComputerName Server01

Criando certificados de cliente para WS-Man

Este comando cria entrada de ClientCertificate que pode ser usada pelo cliente WS-Management. O novo ClientCertificate aparecerá no diretório ClientCertificate como "ClientCertificate_1234567890". Todos os parâmetros são obrigatórios. O Emissor precisa ser impressão digital do certificado do emitente.

$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
         -Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
         -URI wmicimv2/* -Credential $cred

Excluindo repositórios de certificados

Excluir um armazenamento de certificados de um computador remoto

Este comando usa o cmdlet Invoke-Command para executar um comando Remove-Item nos computadores S1 e S2. O comando Remove-Item inclui o parâmetro Recurse, que exclui os certificados no repositório antes de excluí-lo.

Invoke-Command { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
  -ComputerName S1, S2

Parâmetros dinâmicos

Parâmetros dinâmicos são parâmetros de cmdlet adicionados por um provedor do PowerShell e estão disponíveis somente quando o cmdlet está sendo usado na unidade habilitada para provedor. Esses parâmetros são válidos em todos os subdiretórios do provedor de certificado, mas são eficazes apenas em certificados.

Observação

Os parâmetros que executam a filtragem em relação à EnhancedKeyUsageList propriedade também retornam itens com um valor de propriedade vazio EnhancedKeyUsageList . Os certificados que têm um EnhancedKeyUsageList vazio podem ser usados para todos os fins.

TipoDeItem <Cadeia>

Este parâmetro permite especificar o tipo de item criado pelo New-Item.

Em uma unidade Certificate, os seguintes valores são permitidos:

  • Provedor de certificados
  • Certidão
  • Store
  • LojaLocalização

Cmdlets suportados

CodeSigningCert <System.Management.Automation.SwitchParameter>

Cmdlets suportados

  • Obter-Item

  • Get-ChildItem

Este parâmetro obtém certificados que têm "Assinatura de código" em seu valor de propriedade EnhancedKeyUsageList .

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

Cmdlets suportados

  • Get-ChildItem

Este parâmetro obtém certificados que têm o nome de domínio especificado ou padrão de nome na propriedade DNSNameList do certificado. O valor deste parâmetro pode ser "Unicode" ou "ASCII". Os valores Punycode são convertidos em Unicode. Caracteres curinga (*) são permitidos.

Esse parâmetro foi introduzido no Windows PowerShell 3.0.

EKU <System.String>

Cmdlets suportados

  • Get-ChildItem

Este parâmetro obtém certificados que têm o texto especificado ou padrão de texto na EnhancedKeyUsageList propriedade do certificado. Caracteres curinga (*) são permitidos. A EnhancedKeyUsageList propriedade contém o nome amigável e os campos OID do EKU.

Esse parâmetro foi introduzido no Windows PowerShell 3.0.

ExpiringInDays <System.Int32>

Cmdlets suportados

  • Get-ChildItem

Este parâmetro obtém certificados que estão expirando dentro ou antes do número especificado de dias. Um valor de 0 (zero) obtém certificados que expiraram.

Esse parâmetro foi introduzido no Windows PowerShell 3.0.

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

Cmdlets suportados

  • Get-ChildItem

Obtém apenas certificados de servidor para hospedagem na Web SSL. Este parâmetro obtém certificados que têm "Autenticação do Servidor" em seu EnhancedKeyUsageList valor de propriedade.

Esse parâmetro foi introduzido no Windows PowerShell 3.0.

DeleteKey <System.Management.Automation.SwitchParameter>

Cmdlets suportados

  • Comando "Remove-Item"

Este parâmetro exclui a chave privada associada quando exclui o certificado.

Importante

Para excluir uma chave privada associada a Cert:\CurrentUser um certificado de usuário no armazenamento em um computador remoto, você deve usar credenciais delegadas. O cmdlet Invoke-Command oferece suporte à delegação de credenciais usando o parâmetro CredSSP. Você deve considerar quaisquer riscos de segurança antes de usar Remove-Item com delegação de Invoke-Command e credenciais.

Esse parâmetro foi introduzido no Windows PowerShell 3.0.

Propriedades do script

Novas propriedades de script foram adicionadas ao objeto x509Certificate2 que representa os certificados para facilitar a pesquisa e o gerenciamento dos certificados.

  • DnsNameList: Para preencher a DnsNameList propriedade, o provedor de certificado copia o conteúdo da entrada DNSName na extensão SubjectAlternativeName (SAN). Se a extensão SAN estiver vazia, a propriedade será preenchida com conteúdo do campo Assunto do certificado.

  • EnhancedKeyUsageList: Para preencher a EnhancedKeyUsageList propriedade, o provedor de certificado copia as propriedades OID do campo EnhancedKeyUsage (EKU) no certificado e cria um nome amigável para ele.

  • SendAsTrustedIssuer: Para preencher a SendAsTrustedIssuer propriedade, o provedor de certificado copia a SendAsTrustedIssuer propriedade do certificado. Para obter mais informações, consulte Gerenciamento de emissores confiáveis para autenticação de cliente.

Esses novos recursos permitem pesquisar certificados com base em seus nomes DNS e datas de expiração, e distinguir certificados de autenticação de cliente e servidor pelo valor de suas propriedades de Uso Avançado de Chave (EKU).

Usando a linha de processamento

Os cmdlets do fornecedor aceitam entradas do pipeline. Você pode usar o pipeline para simplificar a execução de uma tarefa enviando dados do provedor de um cmdlet para outro cmdlet do provedor. Para ler mais sobre como usar o pipeline com os cmdlets do fornecedor, consulte as referências aos cmdlets fornecidas ao longo deste artigo.

Obter ajuda

A partir do Windows PowerShell 3.0, pode-se obter tópicos de ajuda personalizados para cmdlets de provedor que explicam como esses cmdlets se comportam numa unidade de disco do sistema de ficheiros.

Para obter os tópicos de ajuda personalizados para a unidade do sistema de arquivos, execute um comando Get-Help em uma unidade do sistema de arquivos ou use o parâmetro -Path de Get-Help para especificar uma unidade do sistema de arquivos.

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert:

Ver também

sobre_Fornecedores

sobre_Assinatura

Get-AuthenticodeSignature

Set-AuthenticodeSignature

Get-PfxCertificate