Partilhar via


Fornecedor de Certificados

Nome do fornecedor

Certificado

Unidades

Cert:

Capacidades

ShouldProcess

Breve descrição

Fornece acesso a certificados e arquivos de certificados X.509 no PowerShell.

Descrição detalhada

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 e certificados cerificados no seu computador.

O Fornecedor de certificados suporta os seguintes cmdlets, abrangidos neste artigo.

Tipos expostos por este fornecedor

A unidade Certificado expõe os seguintes tipos.

  • Armazenar localizações (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 localização de arquivo CurrentUser e LocalMachine (todos os utilizadores).

  • Arquivos de certificados (System.Security.Cryptography.X509Certificates.X509Store), que são arquivos físicos nos quais os certificados são guardados e geridos.

  • Certificados X.509 System.Security.Cryptography.X509Certificates.X509Certificate2 , cada um dos quais representa um certificado X.509 no computador. Os certificados são identificados pelos respetivos thumbprints.

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 arquivo de certificados raiz na localização do arquivo LocalMachine. 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 a partir 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:

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

Este comando utiliza o Get-ChildItem cmdlet para apresentar os arquivos de certificados na localização do arquivo de certificados CurrentUser.

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 de Atribuição de Código

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 irão expirar 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 Servidor nos arquivos O Meu e WebHosting.

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

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.

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

Combinar filtros para encontrar um conjunto específico de certificados

Este comando obtém todos os certificados na localização do arquivo LocalMachine que têm os seguintes atributos:

  • "fabrikam" no nome DNS
  • "Autenticação de Cliente" 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.

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

Abrir o Snap-in MMC de Certificados

O Invoke-Item cmdlet utilizará a aplicação predefinida para abrir um caminho que especificar. Para certificados, a aplicação predefinida é o snap-in certificados MMC.

Este comando abre o snap-in Certificados MMC 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, vê este 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

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 meu arquivo para o arquivo WebHosting.

Move-Item não moverá arquivos de certificados e não moverá certificados para uma localização de arquivo diferente, como mover um certificado de LocalMachine para CurrentUser. O Move-Item cmdlet move certificados, 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 arquivo de certificados MY.

Os certificados devolvidos são direcionados para o Move-Item cmdlet, que move os certificados para o arquivo WebHosting.

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

Eliminar Certificados e Chaves Privadas

O Remove-Item cmdlet removerá os certificados que especificar. O -DeleteKey parâmetro dinâmico 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 que têm 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. CredSSP permite 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 cmdlet Set-Item na unidade WSMan: 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 { Remove-Item `
  -Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
  -DeleteKey
  }

Eliminar Certificados expirados

Este comando utiliza o parâmetro ExpiringInDays do Get-ChildItem cmdlet com um valor de 0 para obter certificados no arquivo WebHosting que expirou.

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

Na unidade Cert: , o New-Item cmdlet cria arquivos de certificados na localização do arquivo LocalMachine. 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 arquivo LocalMachine.

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 arquivo LocalMachine 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 { New-Item -Path cert:\LocalMachine\CustomStore } `
  -ComputerName Server01

Criar Certificados de Cliente para WS-Man

Este comando cria a entrada ClientCertificate que pode ser utilizada pelo cliente WS-Management . O novo ClientCertificate será apresentado no diretório ClientCertificate como "ClientCertificate_1234567890". Todos os parâmetros são obrigatórios. O Emissor tem de ser o thumbprint do certificado dos emissores.

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

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 { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
  -ComputerName S1, S2

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 EnhancedKeyUsageList propriedade também devolvem itens com um valor de propriedade vazio EnhancedKeyUsageList . Os certificados que tenham uma EnhancedKeyUsageList vazia podem ser utilizados para todos os fins.

Cadeia ItemType <>

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

Certificate Numa unidade, são permitidos os seguintes valores:

  • Fornecedor de Certificados
  • Certificado
  • Armazenamento
  • StoreLocation

Cmdlets Suportados

CodeSigningCert <System.Management.Automation.SwitchParameter>

Cmdlets suportados

Este parâmetro obtém certificados com "Assinatura de Código" no respetivo valor de propriedade EnhancedKeyUsageList .

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 introduzido no Windows PowerShell 3.0.

EKU <System.String>

Cmdlets suportados

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

Este parâmetro foi introduzido no Windows PowerShell 3.0.

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 0 (zero) obtém certificados que expiraram.

Este parâmetro foi introduzido no Windows PowerShell 3.0.

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 "Autenticação do Servidor" no respetivo EnhancedKeyUsageList valor de propriedade.

Este parâmetro foi introduzido no Windows PowerShell 3.0.

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 introduzido no Windows PowerShell 3.0.

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 DnsNameList propriedade, 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 EnhancedKeyUsageList propriedade, 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 SendAsTrustedIssuer propriedade, o Fornecedor de certificados copia a SendAsTrustedIssuer propriedade 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 a tarefa ao enviar dados do fornecedor de um cmdlet para outro cmdlet do fornecedor. Para ler mais sobre como utilizar o pipeline com cmdlets de fornecedor, veja as referências de cmdlets fornecidas ao longo deste artigo.

Obter ajuda

A partir do Windows 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 Get-Help para especificar uma unidade do sistema de ficheiros.

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

Ver também

about_Providers

about_Signing

Get-AuthenticodeSignature

Set-AuthenticodeSignature

Get-PfxCertificate