about_Certificate_Provider
Nome do provedor
Certificado
Unidades
Cert:
Funcionalidades
ShouldProcess
Descrição breve
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 Certificados do PowerShell permite obter, adicionar, alterar, limpar e excluir certificados e repositórios de certificados no PowerShell.
A unidade certificado é um namespace hierárquico que contém os repositórios de certificados e certificados no computador.
O provedor de certificados dá suporte aos cmdlets a seguir.
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Get-ItemProperty
- Set-ItemProperty
- Clear-ItemProperty
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
Tipos expostos por esse provedor
A unidade 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
local de repositório eLocalMachine
(todos os usuários). - System.Security.Cryptography.X509Certificates.X509Store, que são repositórios físicos em que os certificados são salvos e gerenciados.
- System.Security.Cryptography.X509Certificates.X509Certificate2, cada um representando um certificado X.509 no computador. Certificados são identificados por suas impressões digitais.
Navegando na unidade certificado
O provedor de certificados 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 repositório Root
de certificados no local do repositório 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 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 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-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 repositório CurrentUser
de certificados.
Se você não estiver na Cert:
unidade, use um caminho absoluto.
PS Cert:\CurrentUser\> Get-ChildItem
Exibindo propriedades de certificado dentro da 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
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 My
Servidor nos 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 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 têm os seguintes atributos:
fabrikam
em seu nome DNSClient Authentication
em seu EKU- um valor de
$true
para a propriedade SendAsTrustedIssuer - não expire 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 }
Abrir os certificados Snap-in MMC
O Invoke-Item
cmdlet usa o aplicativo padrão para abrir um caminho especificado. Para certificados, o aplicativo padrão é o snap-in MMC certificados.
Esse comando abre o snap-in de certificados do MMC 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 SSL Server para o repositório WebHosting
Esse comando usa o Move-Item
cmdlet 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 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 Get-ChildItem
cmdlet para obter certificados de autenticação de servidor SSL no repositório My
de certificados.
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 exclui os certificados que você especificar. O parâmetro dinâmico DeleteKey exclui a chave privada.
Excluir um certificado do repositório de AC
Esse comando exclui um certificado do repositório de certificados de AC, 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 caracteres curinga no nome DNS
Esse comando exclui todos os certificados que têm 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
Esta série de comandos permite a delegação e, em seguida, a exclusão do certificado e da chave privada associada em um computador remoto. Para excluir uma chave privada em um computador remoto, você deve usar credenciais delegadas.
Use o Enable-WSManCredSSP
cmdlet para habilitar a autenticação credSSP (Provedor de Serviços de Segurança de Credencial) 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 é concluído, o computador S1 aparece 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 New-PSSession
cmdlet e especifique a 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.
Criação de repositórios de certificados
Cert:
Na unidade, o New-Item
cmdlet cria repositórios de certificados no local do repositórioLocalMachine
. Ele dá suporte aos parâmetros Nome, Caminho, WhatIf e Confirmar . 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 chamado CustomStore
no local do repositório LocalMachine
.
New-Item -Path cert:\LocalMachine\CustomStore
Create um novo repositório de certificados em um computador remoto
Esse comando cria um novo repositório de certificados chamado 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 a 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 ser a impressão digital do certificado do emissor.
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
Excluindo repositórios 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 eficazes apenas 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. 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
- ExpirandoInDays
- 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 um certificado de usuário no repositório Cert:\CurrentUser
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
e delegação de credenciais.
Esse parâmetro foi reintroduzido no PowerShell 7.1
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
Cmdlets com suporte
Esse parâmetro obtém certificados que têm o nome de domínio ou o 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 reintroduzido no PowerShell 7.1
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 .
System.String do EKU <>
Cmdlets com suporte
Esse parâmetro obtém certificados que têm o padrão de texto ou 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 reintroduzido no PowerShell 7.1
Sistema ExpiringInDays.Int32 <>
Cmdlets com suporte
Esse parâmetro obtém certificados que estão expirando em ou antes do número especificado de dias. Um valor 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 por New-Item
. O New-Item
cmdlet só dá suporte ao valor Store
. New-Item
O 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 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 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 certificado copia as propriedades OID do campo EKU (EnhancedKeyUsage) 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 vencimento e distinguir os certificados de autenticação de cliente e servidor, o 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.
Obtendo ajuda
A partir do PowerShell 3.0, você pode obter tópicos de ajuda personalizados para cmdlets do 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: