Condividi tramite


Provider Certificate

Nome provider

Certificato

Unità

Cert:

Funzionalità

ShouldProcess

Breve descrizione

Fornisce l'accesso agli archivi e ai certificati X.509 in PowerShell.

Descrizione dettagliata

Il provider di certificati di PowerShell consente di ottenere, aggiungere, modificare, cancellare ed eliminare i certificati e gli archivi certificati in PowerShell.

L'unità Certificato è uno spazio dei nomi gerarchico contenente gli archivi e i certificati cerificate nel computer.

Il provider di certificati supporta i cmdlet seguenti, illustrati in questo articolo.

Tipi esposti da questo provider

L'unità Certificato espone i tipi seguenti.

  • Percorsi di archiviazione (Microsoft.PowerShell.Commands.X509StoreLocation), che sono contenitori di alto livello che raggruppano i certificati per l'utente corrente e per tutti gli utenti. Ogni sistema ha i percorsi di archivi CurrentUser e LocalMachine (tutti gli utenti).

  • Archivi certificati (System.Security.Cryptography.X509Certificates.X509Store), che sono archivi fisici in cui vengono salvati e gestiti i certificati.

  • Certificati X.509 System.Security.Cryptography.X509Certificates.X509Certificate2 , ognuno dei quali rappresenta un certificato X.509 nel computer. I certificati sono identificati dalle relative identificazioni personali.

Il provider di certificati espone lo spazio dei nomi del certificato come Cert: unità in PowerShell. Questo comando usa il Set-Location comando per modificare il percorso corrente nell'archivio certificati radice nel percorso dell'archivio LocalMachine. Usare una barra rovesciata (\) o una barra in avanti (/) per indicare un livello dell'unità Cert: .

Set-Location Cert:

È anche possibile usare il provider di certificati da qualsiasi altra unità di PowerShell. Per fare riferimento a un alias da un'altra posizione, usare il nome dell'unità Cert: nel percorso.

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

Per tornare in un'unità di file system, digitare il relativo nome. Ad esempio, digitare il comando seguente:

Set-Location C:

Nota

PowerShell usa gli alias per consentire un modo familiare per usare i percorsi del provider. I comandi come dir e ls sono ora alias per Get-ChildItem, cd è un alias per Set-Location. e pwd è un alias per Get-Location.

Visualizzazione del contenuto dell'unità Cert:

Nuovi parametri dinamici, DnsName, EKU, SSLServerAuthenticatione ExpiringInDays sono stati aggiunti al Get-ChildItem cmdlet nell'unità Cert: . I nuovi parametri dinamici sono disponibili nelle versioni di PowerShell Windows PowerShell 3.0 e versioni successive di PowerShell. I parametri del provider funzionano con IIS 8.0 in Windows Server 2012 e versioni successive.

Questo comando usa il Get-ChildItem cmdlet per visualizzare gli archivi certificati nel percorso dell'archivio certificati CurrentUser.

Se non si è presenti nell'unità Cert: , usare un percorso assoluto.

PS Cert:\CurrentUser\> Get-ChildItem

Visualizzazione delle proprietà del certificato all'interno dell'unità Cert:

Questo esempio ottiene un certificato con Get-Item e lo archivia in una variabile. L'esempio mostra le nuove proprietà dello script di certificato (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

Trovare tutti i certificati CodeSigning

Questo comando usa i parametri CodeSigningCert e Recurse del Get-ChildItem cmdlet per ottenere tutti i certificati nel computer con autorità di firma del codice.

Get-ChildItem -Path cert: -CodeSigningCert -Recurse

Trovare i certificati scaduti

Questo comando usa il parametro ExpiringInDays del Get-ChildItem cmdlet per ottenere i certificati che scadono entro i 30 giorni successivi.

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

Trovare certificati SSL server

Questo comando usa il parametro SSLServerAuthentication del cmdlet per ottenere tutti i certificati SSL server Get-ChildItem negli archivi My and WebHosting.

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

Trovare i certificati scaduti nei computer remoti

Questo comando usa il Invoke-Command cmdlet per eseguire un Get-ChildItem comando nei computer Srv01 e Srv02. Un valore pari a zero (0) nel parametro ExpiringInDays ottiene i certificati nei computer Srv01 e Srv02 scaduti.

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

Combinazione di filtri per trovare un set specifico di certificati

Questo comando ottiene tutti i certificati nel percorso dell'archivio LocalMachine con gli attributi seguenti:

  • "fabrikam" nel nome DNS
  • "Autenticazione client" nel relativo EKU
  • valore di $true per la proprietà SendAsTrustedIssuer
  • non scade entro i prossimi 30 giorni.

La proprietà NotAfter archivia la data di scadenza del certificato.

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

Apertura dello snap-in MMC Certificates

Il Invoke-Item cmdlet userà l'applicazione predefinita per aprire un percorso specificato. Per i certificati, l'applicazione predefinita è lo snap-in MMC Certificati.

Questo comando apre lo snap-in MMC Certificates per gestire il certificato specificato.

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

Copia di certificati

La copia dei certificati non è supportata dal provider di certificati . Quando si tenta di copiare un certificato, viene visualizzato questo errore.

$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

Spostamento dei certificati

Spostare tutti i certificati di autenticazione del server SSL nell'archivio WebHosting

Questo comando usa il Move-Item cmdlet per spostare un certificato dall'archivio personale all'archivio WebHosting.

Move-Item non sposta gli archivi certificati e non sposta i certificati in un percorso di archivio diverso, ad esempio lo spostamento di un certificato da LocalMachine a CurrentUser. Il Move-Item cmdlet sposta i certificati, ma non sposta le chiavi private.

Questo comando usa il parametro SSLServerAuthentication del cmdlet per ottenere i certificati di autenticazione del Get-ChildItem server SSL nell'archivio certificati MY.

I certificati restituiti vengono inviati tramite pipe al cmdlet, che sposta i certificati nell'archivio Move-Item WebHosting.

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

Eliminazione di certificati e chiavi private

Il Remove-Item cmdlet rimuoverà i certificati specificati. Il -DeleteKey parametro dinamico elimina la chiave privata.

Eliminare un certificato dall'archivio CA

Questo comando elimina un certificato dall'archivio certificati della CA, ma lascia inalterata la chiave privata associata.

Nell'unità Cert: il Remove-Item cmdlet supporta solo i parametri DeleteKey, Path, WhatIf e Confirm . Tutti gli altri parametri vengono ignorati.

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

Eliminare un certificato usando un carattere jolly nel nome DNS

Questo comando elimina tutti i certificati il cui nome DNS contiene "Fabrikam". Usa il parametro DNSName del Get-ChildItem cmdlet per ottenere i certificati e il Remove-Item cmdlet per eliminarli.

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

Eliminare chiavi private da un computer remoto

Questa serie di comandi abilita la delega e quindi elimina il certificato e la chiave privata associata da un computer remoto. Per eliminare una chiave privata da un computer remoto, è necessario usare credenziali delegate.

Usare il cmdlet per abilitare l'autenticazione Enable-WSManCredSSP del provider di servizi di sicurezza delle credenziali (CredSSP) in un client nel computer remoto S1. CredSSP permette l'autenticazione delegata.

Enable-WSManCredSSP -Role Client -DelegateComputer S1

Usare il Connect-WSMan cmdlet per connettere il computer S1 al servizio WinRM nel computer locale. Al termine di questo comando, il computer S1 viene visualizzato nell'unità locale WSMan: in PowerShell.

Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01

È ora possibile usare il cmdlet Set-Item nell'unità WSMan: per abilitare l'attributo CredSSP per il servizio WinRM.

Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true

Avviare una sessione remota nel computer s1 usando il New-PSSession cmdlet e specificare l'autenticazione CredSSP. Salva la sessione nella $s variabile .

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

Infine, usare il Invoke-Command cmdlet per eseguire un Remove-Item comando nella sessione nella $s variabile . Il Remove-Item comando usa il parametro DeleteKey per rimuovere la chiave privata insieme al certificato specificato.

Invoke-Command -Session $s { Remove-Item `
  -Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
  -DeleteKey
  }

Elimina certificati scaduti

Questo comando usa il parametro ExpiringInDays del Get-ChildItem cmdlet con il valore 0 per ottenere i certificati nell'archivio WebHosting scaduto.

La variabile contenente i certificati restituiti viene inviata tramite pipe al Remove-Item cmdlet , che le elimina. Il comando usa il parametro DeleteKey per eliminare la chiave privata insieme al certificato.

$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey

Creazione di certificati

Il New-Item cmdlet non crea nuovi certificati nel provider di certificati. Usare il cmdlet New-SelfSignedCertificate per creare un certificato a scopo di test.

Creazione di archivi certificati

Nell'unità Cert: il New-Item cmdlet crea archivi certificati nel percorso dell'archivio LocalMachine. Supporta i parametri Name, Path, WhatIf e Confirm . Tutti gli altri parametri vengono ignorati. Il comando restituisce un oggetto System.Security.Cryptography.X509Certificates.X509Store che rappresenta il nuovo archivio certificati.

Questo comando crea un nuovo archivio certificati denominato "CustomStore" nel percorso di archivi LocalMachine.

New-Item -Path cert:\LocalMachine\CustomStore

Create un nuovo archivio certificati in un computer remoto

Questo comando crea un nuovo archivio certificati denominato "HostingStore" nel percorso di archivi LocalMachine nel computer Server01.

Il comando usa il Invoke-Command cmdlet per eseguire un New-Item comando nel computer Server01. Il comando restituisce un oggetto System.Security.Cryptography.X509Certificates.X509Store che rappresenta il nuovo archivio certificati.

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

Creazione di certificati client per WS-Man

Questo comando crea la voce ClientCertificate che può essere usata dal client WS-Management . Il nuovo clientCertificate verrà visualizzato nella directory ClientCertificate come "ClientCertificate_1234567890". Tutti i parametri sono obbligatori. L'autorità emittente deve essere identificazione personale del certificato dell'autorità emittente.

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

Eliminazione di archivi certificati

Eliminare un archivio certificati da un computer remoto

Questo comando usa il Invoke-Command cmdlet per eseguire un Remove-Item comando nei computer S1 e S2. Il Remove-Item comando include il parametro Recurse , che elimina i certificati nell'archivio prima di eliminare l'archivio.

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

Parametri dinamici

I parametri dinamici sono parametri cmdlet aggiunti da un provider di PowerShell e sono disponibili solo quando il cmdlet viene usato nell'unità abilitata per il provider. Questi parametri sono validi in tutte le sottodirectory del provider di certificati, ma sono valide solo per i certificati.

Nota

I parametri che eseguono filtri in base alla EnhancedKeyUsageList proprietà restituiscono anche elementi con un valore di proprietà vuoto EnhancedKeyUsageList . I certificati con un oggetto EnhancedKeyUsageList vuoto possono essere usati per tutti gli scopi.

ItemType <String>

Questo parametro consente di specificare il tipo di elemento creato da New-Item.

In un'unità Certificate sono consentiti i valori seguenti:

  • Provider Certificate
  • Certificato
  • Archiviazione
  • StoreLocation

Cmdlet supportati

CodeSigningCert <System.Management.Automation.SwitchParameter>

Cmdlet supportati

Questo parametro ottiene i certificati con "Firma codice" nel valore della proprietà EnhancedKeyUsageList .

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

Cmdlet supportati

Questo parametro ottiene i certificati con il nome di dominio o il modello di nome specificato nella proprietà DNSNameList del certificato. Il valore di questo parametro può essere "Unicode" o "ASCII". I valori Punycode vengono convertiti in Unicode. I caratteri jolly (*) sono consentiti.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

EKU <System.String>

Cmdlet supportati

Questo parametro ottiene i certificati con il testo o il modello di testo specificato nella EnhancedKeyUsageList proprietà del certificato. I caratteri jolly (*) sono consentiti. La EnhancedKeyUsageList proprietà contiene il nome descrittivo e i campi OID dell'EKU.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

ExpiringInDays <System.Int32>

Cmdlet supportati

Questo parametro ottiene i certificati in scadenza o prima del numero di giorni specificato. Il valore 0 (zero) ottiene i certificati scaduti.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

Cmdlet supportati

Ottiene solo i certificati del server per l'hosting Web SSL. Questo parametro ottiene i certificati con "Autenticazione server" nel valore EnhancedKeyUsageList della proprietà.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

DeleteKey <System.Management.Automation.SwitchParameter>

Cmdlet supportati

Questo parametro elimina la chiave privata associata quando elimina il certificato.

Importante

Per eliminare una chiave privata associata a un certificato utente nell'archivio Cert:\CurrentUser in un computer remoto, è necessario usare le credenziali delegate. Il Invoke-Command cmdlet supporta la delega delle credenziali usando il parametro CredSSP . È consigliabile considerare eventuali rischi per la sicurezza prima di usare Remove-Item con Invoke-Command la delega delle credenziali e .

Questo parametro è stato introdotto in Windows PowerShell 3.0.

Proprietà script

Sono state aggiunte nuove proprietà dello script all'oggetto x509Certificate2 che rappresenta i certificati per semplificare la ricerca e la gestione dei certificati.

  • DnsNameList: per popolare la DnsNameList proprietà, il provider di certificati copia il contenuto dalla voce DNSName nell'estensione SubjectAlternativeName (SAN). Se l'estensione SAN è vuota, la proprietà viene popolata con il contenuto del campo Subject del certificato.

  • EnhancedKeyUsageList: per popolare la EnhancedKeyUsageList proprietà, il provider di certificati copia le proprietà OID del campo EnhancedKeyUsage (EKU) nel certificato e ne crea un nome descrittivo.

  • SendAsTrustedIssuer: per popolare la SendAsTrustedIssuer proprietà , il provider di certificati copia la SendAsTrustedIssuer proprietà dal certificato. Per altre informazioni, vedere Gestione di autorità emittenti attendibili per l'autenticazione client.

Queste nuove funzionalità consentono di cercare i certificati in base ai relativi nomi DNS e alle date di scadenza, oltre a differenziare i certificati di autenticazione client e server in base al valore delle relative proprietà di utilizzo chiavi avanzato (EKU).

Uso della pipeline

I cmdlet del provider accettano l'input della pipeline. È possibile usare la pipeline per semplificare l'attività inviando i dati del provider da un cmdlet a un altro cmdlet del provider. Per altre informazioni su come usare la pipeline con i cmdlet del provider, vedere i riferimenti ai cmdlet forniti in questo articolo.

Risorse della Guida

A partire da Windows PowerShell 3.0, è possibile ottenere argomenti della Guida personalizzati per i cmdlet del provider che ne illustrano il comportamento in un'unità di file system.

Per ottenere gli argomenti della Guida personalizzati per l'unità file system, eseguire un comando Get-Help in un'unità file system o usare il -Path parametro Get-Help per specificare un'unità file system.

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

Vedi anche

about_Providers

about_Signing

Get-AuthenticodeSignature

Set-AuthenticodeSignature

Get-PfxCertificate