Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Nome do fornecedor
Certidão
Drives
Cert:
Capabilities
DeveProcessar
Breve descrição
Fornece acesso a repositórios de certificados X.509 e certificados no PowerShell.
Descrição detalhada
Essas informações só se aplicam ao PowerShell em execução no Windows.
O provedor de de Certificados do PowerShell permite obter, adicionar, alterar, limpar e excluir certificados e armazenamentos de certificados no PowerShell.
A unidade Certificate é um namespace hierárquico que contém os repositórios de certificados e certificados em seu computador.
O provedor Certificate oferece suporte aos cmdlets a seguir.
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- Novo Item
- Remove-Item
- Get-ItemProperty
- Set-ItemProperty
- Clear-ItemProperty
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
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
CurrentUsereLocalMachine(todos os usuários) local de armazenamento. - System.Security.Cryptography.X509Certificates.X509Store, que são armazenamentos 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 pelas suas impressões digitais.
Navegando na unidade de certificado
O provedor Certificate expõe o namespace do certificado como a unidade Cert: no PowerShell. Este comando usa o comando Set-Location para alterar o local atual para o armazenamento de certificados Root no local de armazenamento de LocalMachine. Use uma barra invertida (\) ou uma barra (/) para indicar um nível da unidade de Cert:.
Set-Location Cert:
Você também pode trabalhar com o provedor de certificado de qualquer outra unidade do PowerShell. Para fazer referência a um alias de outro local, use o nome da unidade 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 usa aliases para permitir uma maneira familiar de trabalhar com caminhos de provedor. Comandos como dir e ls agora são aliases para Get-ChildItem, cd é um alias para Set-Locatione pwd é um alias para Get-Location.
Exibindo o conteúdo da unidade Cert:
Este comando usa o cmdlet Get-ChildItem para exibir os repositórios de certificados no local de armazenamento de certificados CurrentUser.
Se você não estiver na unidade Cert:, 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 Get-ChildItem 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
Este comando usa o parâmetro ExpiringInDays do cmdlet Get-ChildItem para obter certificados que expiram 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 Get-ChildItem para obter todos os Certificados SSL do Servidor nos armazenamentos My e WebHosting.
$getChildItemSplat = @{
Path = 'Cert:\LocalMachine\My', 'Cert:\LocalMachine\WebHosting'
SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat
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 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
Este comando obtém todos os certificados no local de armazenamento LocalMachine que têm os seguintes atributos:
-
fabrikamem seu nome DNS -
Client Authenticationno seu EKU - um valor de
$truepara a propriedade SendAsTrustedIssuer - não expira nos próximos 30 dias.
A propriedade NotAfter armazena a data de validade 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 Certificados do MMC
O cmdlet Invoke-Item usa 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 fornecedor de 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 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 o repositório WebHosting
Este comando usa o cmdlet Move-Item para mover um certificado do repositório My para o repositório WebHosting.
Move-Item não pode mover repositórios de certificados e não pode mover certificados para um local de armazenamento diferente, como mover um certificado de LocalMachine para CurrentUser. O cmdlet Move-Item pode mover certificados dentro de um armazenamento, mas não move chaves privadas.
Este comando usa o parâmetro SSLServerAuthentication do cmdlet Get-ChildItem para obter certificados de autenticação de servidor SSL no armazenamento de certificados My.
Os certificados retornados são canalizados para o cmdlet Move-Item, que move os certificados para o WebHosting armazenamento.
Get-ChildItem Cert:\LocalMachine\My -SSLServerAuthentication |
Move-Item -Destination Cert:\LocalMachine\WebHosting
Excluindo certificados e chaves privadas
O cmdlet Remove-Item exclui os certificados especificados. O parâmetro dinâmico DeleteKey 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 New-PSSession e especifique a 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 {
$removeItemSplat = @{
Path = 'Cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
DeleteKey = $true
}
Remove-Item @removeItemSplat
}
Excluir certificados expirados
Este comando usa o parâmetro ExpiringInDays do cmdlet Get-ChildItem com um valor de 0 para obter certificados no repositório de 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 cmdlet New-Item não cria novos certificados no provedor Certificate. Use o cmdlet New-SelfSignedCertificate para criar um certificado para fins de teste.
Criação de repositórios de certificados
Na unidade Cert:, o cmdlet New-Item 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 -ComputerName Server01 -ScriptBlock {
New-Item -Path Cert:\LocalMachine\CustomStore
}
Criando certificados de cliente para WS-MAN
Este comando cria entrada de 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 do emissor deve ser a impressão digital do certificado do emitente.
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
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 -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 de certificados, mas são efetivos apenas em certificados.
Observação
Os parâmetros que executam a filtragem em relação ao EnhancedKeyUsageList propriedade também retornam itens com um vazio EnhancedKeyUsageList valor da propriedade. Os certificados que têm um EnhancedKeyUsageList vazio podem ser usados para todos os fins.
Os seguintes parâmetros do provedor de certificado foram reintroduzidos no PowerShell 7.1.
- DNSName
- DocumentEncryptionCert
- EKU
- ExpiringInDays
- SSLServerAuthentication
CodeSigningCert <System.Management.Automation.SwitchParameter>
Cmdlets suportados
Este parâmetro obtém certificados que têm Code Signing em seus EnhancedKeyUsageList valor da propriedade.
DeleteKey <System.Management.Automation.SwitchParameter>
Cmdlets suportados
Este parâmetro exclui a chave privada associada quando exclui o certificado.
Importante
Para excluir uma chave privada associada a um certificado de usuário no armazenamento de Cert:\CurrentUser 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.
Este parâmetro foi reintroduzido no PowerShell 7.1
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
Cmdlets suportados
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.
Este parâmetro foi reintroduzido no PowerShell 7.1
DocumentEncryptionCert <System.Management.Automation.SwitchParameter>
Cmdlets suportados
Este parâmetro obtém certificados que têm Document Encryption em seus EnhancedKeyUsageList valor da propriedade.
EKU <System.String>
Cmdlets suportados
Este parâmetro obtém certificados que têm o texto especificado ou padrão de texto 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.
Este parâmetro foi reintroduzido no PowerShell 7.1
ExpiringInDays <System.Int32>
Cmdlets suportados
Este parâmetro obtém certificados que estão expirando dentro ou antes do número especificado de dias. Um valor zero (0) obtém certificados que expiraram.
Este parâmetro foi reintroduzido no PowerShell 7.1
ItemType <System.String>
Este parâmetro é usado para especificar o tipo de item criado por New-Item. O cmdlet New-Item suporta apenas o valor Store.
New-Item cmdlet não pode criar novos certificados.
Cmdlets suportados
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Cmdlets suportados
Obtém apenas certificados de servidor para hospedagem na Web SSL. Este parâmetro obtém certificados que têm Server Authentication em seus EnhancedKeyUsageList valor da propriedade.
Este parâmetro foi reintroduzido no PowerShell 7.1
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 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 propriedade EnhancedKeyUsageList, 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 propriedade SendAsTrustedIssuer, o provedor de certificado 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 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 o pipeline
Os cmdlets do provedor aceitam entrada de 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.
Obter 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 parâmetro -Path de Get-Help para especificar uma unidade do sistema de arquivos.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path Cert:
Consulte também
- about_Providers
- about_Signing
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
- Get-PfxCertificate