about_Certificate_Provider

Nome do provedor

Certificado

Unidades

Cert:

Funcionalidades

Processo Deve

Descrição breve

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

Descrição detalhada

O provedor de certificados do PowerShell permite obter, adicionar, alterar, limpar e excluir certificados e repositórios de certificados no PowerShell.

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

O provedor de certificado dá suporte aos cmdlets a seguir.

Tipos expostos por este provedor

A unidade de certificado expõe os seguintes tipos.

  • 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 CurrentUser e LocalMachine (todos os usuários) local de armazenamento.
  • System.Security.Cryptography.X509Certificates.X509Store, que são repositórios físicos onde os certificados são salvos e gerenciados.
  • System.Security.Cryptography.X509Certificates.X509Certificate2, cada um representando um certificado X.509 no computador. Os certificados são identificados por suas impressões digitais.

O provedor de certificado expõe o namespace do certificado como a Cert: unidade no PowerShell. Esse comando usa o Set-Location comando para alterar o local atual para o Root repositório de certificados no local do LocalMachine repositório. 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 da Cert: unidade no caminho.

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

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

Set-Location C:

Observação

O PowerShell usa aliases para permitir que você trabalhe com caminhos de provedor. Comandos como dir e ls agora são aliases para Get-ChildItem, cd é um alias para Set-Location e pwd é um alias para Get-Location.

Exibindo o conteúdo da unidade Cert:

Esse comando usa o Get-ChildItem cmdlet para exibir os repositórios de certificados no local do CurrentUser repositório de certificados.

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 e Get-Item 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 de CodeSigning

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

Get-ChildItem -Path cert: -CodeSigningCert -Recurse

Localizar certificados expirados

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

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

Localizar certificados SSL do servidor

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

$getChildItemSplat = @{
    Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
    SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat

Localizar certificados expirados em computadores remotos

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

$invokeCommandSplat = @{
    ComputerName = 'Srv01', 'Srv02'
    ScriptBlock = {
        Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
    }
}
Invoke-Command @invokeCommandSplat

Combinando filtros para localizar um conjunto específico de certificados

Esse comando obtém todos os certificados no local do LocalMachine repositório que possuem os seguintes atributos:

  • fabrikam em seu nome DNS
  • Client Authentication em seu EKU
  • um valor de $true para a propriedade SendAsTrustedIssuer
  • não expiram nos próximos 30 dias.

A propriedade NotAfter armazena a data de expiração do certificado.

[DateTime] $ValidThrough = (Get-Date) + (New-TimeSpan -Days 30)
$getChildItemSplat = @{
    Path = 'cert:\*'
    Recurse = $true
    DnsName = "*fabrikam*"
    Eku = "*Client Authentication*"
}
Get-ChildItem @getChildItemSplat |
    Where-Object {$_.SendAsTrustedIssuer -and $_.NotAfter -gt $ValidThrough }

Abrindo o snap-in MMC de certificados

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

Esse comando abre o snap-in MMC de Certificados para gerenciar o certificado especificado.

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

Copiando certificados

Não há suporte para a cópia de certificados pelo provedor de certificados . Ao tentar copiar um certificado, você verá esse erro.

$path = "Cert:\LocalMachine\Root\E2C0F6662D3C569705B4B31FE2CBF3434094B254"
PS Cert:\LocalMachine\> Copy-Item -Path $path -Destination .\CA\
Copy-Item : Provider operation stopped because the provider doesn't 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 a loja WebHosting

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

Move-Itemnão é possível mover repositórios de certificados e não pode mover certificados para um local de repositório diferente, como mover um certificado de LocalMachine para .CurrentUser O Move-Item cmdlet pode mover certificados dentro de um repositório, mas não move chaves privadas.

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

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

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

Excluindo certificados e chaves privadas

O Remove-Item cmdlet exclui os certificados especificados. O parâmetro dinâmico DeleteKey exclui a chave privada.

Excluir um certificado do repositório de CA

Esse comando exclui um certificado do repositório de certificados da autoridade de certificação, mas deixa a chave privada associada intacta.

Cert: Na unidade, o Remove-Item cmdlet dá suporte apenas aos parâmetros DeleteKey, Path, WhatIf e Confirm. Todos os outros parâmetros são ignorados.

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

Excluir um certificado usando curingas no nome DNS

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

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

Excluir chaves privadas de um computador remoto

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

Use o cmdlet para habilitar a Enable-WSManCredSSP autenticação do Provedor de Serviços de Segurança de Credenciais (CredSSP) em um cliente no computador remoto S1. O CredSSP permite a autenticação delegada.

Enable-WSManCredSSP -Role Client -DelegateComputer S1

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

Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01

Agora, você pode usar o Set-Item cmdlet na WSMan: unidade 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 $s variável.

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

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

Invoke-Command -Session $s {
    $removeItemSplat = @{
        Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
        DeleteKey = $true
    }
    Remove-Item @removeItemSplat
}

Excluir certificados expirados

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

A variável que contém os certificados retornados é canalizada para o Remove-Item cmdlet, 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

Criando 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

Cert: Na unidade, o New-Item cmdlet cria repositórios de certificados no local do LocalMachine repositório. Ele dá suporte aos parâmetros Name, Path, WhatIf e Confirmate . Todos os outros parâmetros são ignorados. O comando retorna um System.Security.Cryptography.X509Certificates.X509Store que representa o novo repositório de certificados.

Esse comando cria um novo repositório de certificados nomeado CustomStore no local do LocalMachine repositório.

New-Item -Path cert:\LocalMachine\CustomStore

Criar um novo repositório de certificados em um computador remoto

Esse comando cria um novo repositório de certificados nomeado HostingStore no local do LocalMachine repositório no computador Server01.

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

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

Criando certificados de cliente para WS-Man

Esse comando cria uma entrada ClientCertificate que pode ser usada pelo cliente WS-Management . O novo ClientCertificate aparece no diretório ClientCertificate como ClientCertificate_1234567890. Todos os parâmetros são obrigatórios. O emissor precisa ter a impressão digital do certificado do emissor.

$newItemSplat = @{
    Path = 'WSMan:\localhost\ClientCertificate'
    Credential = Get-Credential
    Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
    URI = 'wmicimv2/*'
}
New-Item @newItemSplat

Excluindo armazenamentos de certificados

Excluir um repositório de certificados de um computador remoto

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

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

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 certificados , mas são efetivos somente em certificados.

Observação

Os parâmetros que executam a filtragem na propriedade EnhancedKeyUsageList também retornam itens com um valor de propriedade EnhancedKeyUsageList vazio. Os certificados que têm um EnhancedKeyUsageList vazio podem ser usados para todas as finalidades.

Os seguintes parâmetros do provedor de certificados foram reintroduzidos no PowerShell 7.1.

  • DNSName
  • DocumentEncryptionCert
  • EKU
  • Expirando em dias
  • SSLServerAuthentication

CodeSigningCert <System.Management.Automation.SwitchParameter>

Cmdlets com suporte

Esse parâmetro obtém certificados que têm Code Signing em seu valor de propriedade EnhancedKeyUsageList .

DeleteKey <System.Management.Automation.SwitchParameter>

Cmdlets com suporte

Esse 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 repositório em um computador remoto, você deve usar credenciais delegadas. O Invoke-Command cmdlet dá suporte à delegação de credenciais usando o parâmetro CredSSP . Você deve considerar quaisquer riscos de segurança antes de usar Remove-Item com Invoke-Command uma delegação de credenciais.

Esse parâmetro foi introduzido no PowerShell 3.0.

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

Cmdlets com suporte

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

Esse parâmetro foi introduzido no PowerShell 3.0.

DocumentEncryptionCert <System.Management.Automation.SwitchParameter>

Cmdlets com suporte

Esse parâmetro obtém certificados que têm Document Encryption em seu valor de propriedade EnhancedKeyUsageList .

EKU <System.String>

Cmdlets com suporte

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

Esse parâmetro foi introduzido no PowerShell 3.0.

ExpirandoEmDias <System.Int32>

Cmdlets com suporte

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

Esse parâmetro foi reintroduzido no PowerShell 7.1

ItemType <System.String>

Esse parâmetro é usado para especificar o tipo de item criado pelo New-Item. O New-Item cmdlet só dá suporte ao valor Store. New-Item cmdlet não pode criar novos certificados.

Cmdlets com suporte

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

Cmdlets com suporte

Obtém somente os certificados de servidor de hospedagem web SSL. Esse parâmetro obtém certificados que têm Server Authentication em seu valor de propriedade EnhancedKeyUsageList .

Esse parâmetro foi introduzido no 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 propriedade DnsNameList , o provedor de certificados copia o conteúdo da entrada DNSName na extensão SubjectAlternativeName (SAN). Se a extensão de SAN estiver vazia, a propriedade será preenchida com o conteúdo do campo Assunto do certificado.
  • EnhancedKeyUsageList: para preencher a propriedade EnhancedKeyUsageList , o provedor de certificados copia as propriedades OID do campo EnhancedKeyUsage (EKU) no certificado e cria um nome amigável para ele.
  • SendAsTrustedIssuer: para preencher a propriedade SendAsTrustedIssuer , o provedor de certificados copia a propriedade SendAsTrustedIssuer do certificado. Para obter mais informações, consulte Gerenciamento de emissores confiáveis para autenticação de cliente.

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

Usando o pipeline

Os cmdlets do provedor aceitam a entrada do pipeline. Você pode usar o pipeline para simplificar tarefas enviando dados do provedor de um cmdlet para outro cmdlet do provedor. Para ler mais sobre como usar o pipeline com cmdlets de provedor, consulte as referências de cmdlet fornecidas ao longo deste artigo.

Obtendo ajuda

A partir do PowerShell 3.0, você pode obter tópicos de ajuda personalizados para cmdlets de provedor que explicam como esses cmdlets se comportam em uma unidade do sistema de arquivos.

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 -Path parâmetro de para especificar uma unidade do sistema de Get-Help arquivos.

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

Confira também