about_Certificate_Provider
Nome do fornecedor
Certificado
Unidades
Cert:
Capacidades
ShouldProcess
Breve descrição
Fornece acesso a arquivos de certificados X.509 e certificados no PowerShell.
Descrição detalhada
Estas informações aplicam-se apenas ao PowerShell em execução no Windows.
O fornecedor de Certificados do PowerShell permite-lhe obter, adicionar, alterar, limpar e eliminar certificados e arquivos de certificados no PowerShell.
A unidade Certificado é um espaço de nomes hierárquico que contém os arquivos de certificados e certificados no seu computador.
O Fornecedor de certificados suporta os seguintes cmdlets.
- 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 este fornecedor
A unidade Certificado expõe os seguintes tipos.
- Microsoft.PowerShell.Commands.X509StoreLocation, que são contentores de alto nível que agrupam os certificados para o utilizador atual e para todos os utilizadores. Cada sistema tem uma
CurrentUser
localização de arquivo eLocalMachine
(todos os utilizadores). - System.Security.Cryptography.X509Certificates.X509Store, que são arquivos físicos onde os certificados são guardados e geridos.
- System.Security.Cryptography.X509Certificates.X509Certificate2, cada um representando um certificado X.509 no computador. Os certificados são identificados pelos thumbprints.
Navegar na unidade Certificado
O fornecedor de certificados expõe o espaço de nomes do certificado como a Cert:
unidade no PowerShell. Este comando utiliza o Set-Location
comando para alterar a localização atual para o Root
arquivo de certificados na localização do LocalMachine
arquivo. Utilize uma barra invertida (\
) ou uma barra/
() para indicar um nível da Cert:
unidade.
Set-Location Cert:
Também pode trabalhar com o fornecedor de certificados de qualquer outra unidade do PowerShell. Para referenciar um alias de outra localização, utilize o nome da Cert:
unidade no caminho.
PS Cert:\> Set-Location -Path LocalMachine\Root
Para regressar a uma unidade do sistema de ficheiros, escreva o nome da unidade. Por exemplo, escreva:
Set-Location C:
Nota
O PowerShell utiliza aliases para lhe permitir uma forma familiar de trabalhar com caminhos do fornecedor. Comandos como dir
e ls
são agora aliases para Get-ChildItem, cd
é um alias para Set-Location e pwd
é um alias para Get-Location.
Apresentar o Conteúdo da unidade Cert:
Este comando utiliza o Get-ChildItem
cmdlet para apresentar os arquivos de certificados na localização do CurrentUser
arquivo de certificados.
Se não estiver na Cert:
unidade, utilize um caminho absoluto.
PS Cert:\CurrentUser\> Get-ChildItem
Apresentar as propriedades do certificado na unidade Cert:
Este exemplo obtém um certificado com Get-Item
e armazena-o numa variável.
O exemplo mostra as novas propriedades do script de certificado (DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer) com 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 utiliza 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
Este comando utiliza 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
Este comando utiliza o parâmetro SSLServerAuthentication do Get-ChildItem
cmdlet para obter todos os Certificados SSL do My
Servidor nos arquivos e.WebHosting
$getChildItemSplat = @{
Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat
Localizar certificados expirados em computadores remotos
Este comando utiliza 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
Combinar filtros para encontrar um conjunto específico de certificados
Este comando obtém todos os certificados na localização do LocalMachine
arquivo que têm os seguintes atributos:
fabrikam
no respetivo nome DNSClient Authentication
no respetivo EKU- um valor de
$true
para a propriedade SendAsTrustedIssuer - não expire 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 }
Abrir o Snap-in MMC de Certificados
O Invoke-Item
cmdlet utiliza a aplicação predefinida para abrir um caminho que especificar. Para certificados, a aplicação predefinida é o snap-in MMC de Certificados.
Este comando abre o snap-in MMC certificados para gerir o certificado especificado.
Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B
Copiar Certificados
A cópia de certificados não é suportada pelo fornecedor de Certificados . Quando tenta copiar um certificado, verá este 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
Mover Certificados
Mover todos os certificados de autenticação do SSL Server para o arquivo WebHosting
Este comando utiliza o Move-Item
cmdlet para mover um certificado do My
arquivo para o WebHosting
arquivo.
Move-Item
não consegue mover arquivos de certificados e não pode mover certificados para uma localização de arquivo diferente, como mover um certificado de LocalMachine
para CurrentUser
. O Move-Item
cmdlet pode mover certificados dentro de um arquivo, mas não move chaves privadas.
Este comando utiliza o parâmetro SSLServerAuthentication do Get-ChildItem
cmdlet para obter certificados de autenticação do servidor SSL no My
arquivo de certificados.
Os certificados devolvidos são direcionados para o Move-Item
cmdlet, que move os certificados para o WebHosting
arquivo.
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication |
Move-Item -Destination cert:\LocalMachine\WebHosting
Eliminar Certificados e Chaves Privadas
O Remove-Item
cmdlet elimina certificados que especificar. O parâmetro dinâmico DeleteKey elimina a chave privada.
Eliminar um Certificado do arquivo de AC
Este comando elimina um certificado do arquivo de certificados da AC, mas deixa a chave privada associada intacta.
Cert:
Na unidade, o Remove-Item
cmdlet suporta apenas os parâmetros DeleteKey, Path, WhatIf e Confirm. Todos os outros parâmetros são ignorados.
Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0
Eliminar um Certificado com carateres universais no nome DNS
Este comando elimina todos os certificados com um nome DNS que contém Fabrikam
. Utiliza o parâmetro DNSName do Get-ChildItem
cmdlet para obter os certificados e o Remove-Item
cmdlet para os eliminar.
Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item
Eliminar 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 eliminar uma chave privada num computador remoto, tem de utilizar credenciais delegadas.
Utilize o Enable-WSManCredSSP
cmdlet para ativar a autenticação do Fornecedor de Serviços de Segurança de Credenciais (CredSSP) num cliente no computador remoto S1.
O CredSSP permite a autenticação delegada.
Enable-WSManCredSSP -Role Client -DelegateComputer S1
Utilize o Connect-WSMan
cmdlet para ligar o computador S1 ao serviço WinRM no computador local. Quando este comando for concluído, o computador S1 é apresentado na unidade local WSMan:
no PowerShell.
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
Agora, pode utilizar o Set-Item
cmdlet na WSMan:
unidade para ativar 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 com o New-PSSession
cmdlet e especifique a autenticação CredSSP. Guarda a sessão na $s
variável .
$s = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01
Por fim, utilize o Invoke-Command
cmdlet para executar um Remove-Item
comando na sessão na $s
variável . O Remove-Item
comando utiliza o parâmetro DeleteKey para remover a chave privada juntamente com o certificado especificado.
Invoke-Command -Session $s {
$removeItemSplat = @{
Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
DeleteKey = $true
}
Remove-Item @removeItemSplat
}
Eliminar Certificados expirados
Este comando utiliza o parâmetro ExpiringInDays do Get-ChildItem
cmdlet com um valor de 0
para obter certificados no WebHosting
arquivo que expiraram.
A variável que contém os certificados devolvidos é encaminhada para o Remove-Item
cmdlet , que os elimina. O comando utiliza o parâmetro DeleteKey para eliminar a chave privada juntamente com o certificado.
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
Criar Certificados
O New-Item
cmdlet não cria novos certificados no fornecedor de Certificados . Utilize o cmdlet New-SelfSignedCertificate para criar um certificado para fins de teste.
Criar Arquivos de Certificados
Cert:
Na unidade, o New-Item
cmdlet cria arquivos de certificados na localização do LocalMachine
arquivo. Suporta os parâmetros Nome, Caminho, WhatIf e Confirmar . Todos os outros parâmetros são ignorados. O comando devolve um System.Security.Cryptography.X509Certificates.X509Store que representa o novo arquivo de certificados.
Este comando cria um novo arquivo de certificados com o nome CustomStore
na localização do LocalMachine
arquivo.
New-Item -Path cert:\LocalMachine\CustomStore
Create um novo arquivo de certificados num computador remoto
Este comando cria um novo arquivo de certificados com o nome HostingStore
na localização do LocalMachine
arquivo no computador Server01.
O comando utiliza o Invoke-Command
cmdlet para executar um New-Item
comando no computador Server01. O comando devolve um System.Security.Cryptography.X509Certificates.X509Store que representa o novo arquivo de certificados.
Invoke-Command -ComputerName Server01 -ScriptBlock {
New-Item -Path cert:\LocalMachine\CustomStore
}
Criar Certificados de Cliente para WS-Man
Este comando cria a entrada ClientCertificate que pode ser utilizada 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 tem de ser o thumbprint do certificado do emissor.
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
A eliminar arquivos de certificados
Eliminar um arquivo de certificados de um computador remoto
Este comando utiliza 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 elimina os certificados no arquivo antes de eliminar o arquivo.
Invoke-Command -ComputerName S1, S2 -ScriptBlock {
Remove-Item -Path cert:\LocalMachine\TestStore -Recurse
}
Parâmetros dinâmicos
Os parâmetros dinâmicos são parâmetros de cmdlet que são adicionados por um fornecedor do PowerShell e só estão disponíveis quando o cmdlet está a ser utilizado na unidade ativada pelo fornecedor. Estes parâmetros são válidos em todos os subdiretórios do fornecedor de Certificados , mas são eficazes apenas em certificados.
Nota
Os parâmetros que efetuam a filtragem na propriedade EnhancedKeyUsageList também devolvem itens com um valor de propriedade EnhancedKeyUsageList vazio. Os certificados que tenham uma EnhancedKeyUsageList vazia podem ser utilizados para todos os fins.
Os seguintes parâmetros do fornecedor de certificados 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
no respetivo valor de propriedade EnhancedKeyUsageList .
DeleteKey <System.Management.Automation.SwitchParameter>
Cmdlets suportados
Este parâmetro elimina a chave privada associada quando elimina o certificado.
Importante
Para eliminar uma chave privada associada a um certificado de utilizador no Cert:\CurrentUser
arquivo num computador remoto, tem de utilizar credenciais delegadas. O Invoke-Command
cmdlet suporta a delegação de credenciais com o parâmetro CredSSP . Deve considerar quaisquer riscos de segurança antes de utilizar Remove-Item
com Invoke-Command
e delegação de 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 ou padrão de nome especificado na propriedade DNSNameList do certificado. O valor deste parâmetro pode ser Unicode
ou ASCII
. Os valores de Punycode são convertidos em Unicode. Os carateres universais (*
) 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
no respetivo valor de propriedade EnhancedKeyUsageList .
EKU <System.String>
Cmdlets suportados
Este parâmetro obtém certificados que têm o padrão de texto ou texto especificado na propriedade EnhancedKeyUsageList do certificado. Os carateres universais (*
) 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 expiram em ou antes do número de dias especificado. Um valor de zero (0) obtém certificados que expiraram.
Este parâmetro foi reintroduzido no PowerShell 7.1
ItemType <System.String>
Este parâmetro é utilizado para especificar o tipo de item criado por New-Item
. O New-Item
cmdlet só suporta o valor Store
. New-Item
O cmdlet não consegue criar novos certificados.
Cmdlets Suportados
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Cmdlets suportados
Obtém apenas certificados de servidor para alojamento na Web SSL. Este parâmetro obtém certificados que têm Server Authentication
no respetivo valor de propriedade EnhancedKeyUsageList .
Este parâmetro foi reintroduzido no PowerShell 7.1
Propriedades do script
Foram adicionadas novas propriedades de script ao objeto x509Certificate2 que representa os certificados para facilitar a pesquisa e gestão dos certificados.
- DnsNameList: para preencher a propriedade DnsNameList , o fornecedor de certificados copia o conteúdo da entrada DNSName na extensão SubjectAlternativeName (SAN). Se a extensão SAN estiver vazia, a propriedade é preenchida com conteúdo do campo Assunto do certificado.
- EnhancedKeyUsageList: para preencher a propriedade EnhancedKeyUsageList , o fornecedor de certificados copia as propriedades OID do campo EnhancedKeyUsage (EKU) no certificado e cria um nome amigável para o mesmo.
- SendAsTrustedIssuer: para preencher a propriedade SendAsTrustedIssuer , o fornecedor de certificado copia a propriedade SendAsTrustedIssuer do certificado. Para obter mais informações, veja Gestão de emissores fidedignos para autenticação de cliente.
Estas novas funcionalidades permitem-lhe procurar certificados com base nos respetivos nomes DNS e datas de expiração e distinguir certificados de autenticação de cliente e servidor pelo valor das respetivas propriedades de Utilização Avançada de Chaves (EKU).
Utilizar o pipeline
Os cmdlets do fornecedor aceitam a entrada do pipeline. Pode utilizar o pipeline para simplificar as tarefas ao enviar dados do fornecedor de um cmdlet para outro cmdlet do fornecedor. Para ler mais sobre como utilizar o pipeline com cmdlets do fornecedor, veja as referências de cmdlets fornecidas ao longo deste artigo.
Obter ajuda
A partir do PowerShell 3.0, pode obter tópicos de ajuda personalizados para cmdlets de fornecedor que explicam como esses cmdlets se comportam numa unidade do sistema de ficheiros.
Para obter os tópicos de ajuda personalizados para a unidade do sistema de ficheiros, execute um comando Get-Help numa unidade do sistema de ficheiros ou utilize o -Path
parâmetro de para especificar uma unidade do sistema de Get-Help
ficheiros.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: