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.
- 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
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.
Spostamento dell'unità certificato
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
, SSLServerAuthentication
e 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 laDnsNameList
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 laEnhancedKeyUsageList
proprietà, il provider di certificati copia le proprietà OID del campo EnhancedKeyUsage (EKU) nel certificato e ne crea un nome descrittivo.SendAsTrustedIssuer
: per popolare laSendAsTrustedIssuer
proprietà , il provider di certificati copia laSendAsTrustedIssuer
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: