about_Certificate_Provider
Nome provider
Certificato
Unità
Cert:
Funzionalità
ShouldProcess
Breve descrizione
Fornisce l'accesso agli archivi certificati X.509 e ai certificati in PowerShell.
Descrizione dettagliata
Queste informazioni si applicano solo a PowerShell in esecuzione in Windows.
Il provider di certificati di PowerShell consente di ottenere, aggiungere, modificare, cancellare ed eliminare certificati e archivi certificati in PowerShell.
L'unità Certificato è uno spazio dei nomi gerarchico contenente gli archivi certificati e i certificati nel computer.
Il provider di certificati supporta i cmdlet seguenti.
- 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.
- 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 un percorso
CurrentUser
di archiviazione eLocalMachine
(tutti gli utenti). - System.Security.Cryptography.X509Certificates.X509Store, che sono archivi fisici in cui vengono salvati e gestiti i certificati.
- System.Security.Cryptography.X509Certificates.X509Certificate2, ognuno dei quali rappresenta un certificato X.509 nel computer. I certificati sono identificati dalle relative identificazioni personali.
Esplorazione 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 nel percorso dell'archivio Root
LocalMachine
. Utilizzare una barra rovesciata () o una barra (\
/
) 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 ed pwd
è un alias per Get-Location.
Visualizzazione del contenuto dell'unità Cert:
Questo comando usa il Get-ChildItem
cmdlet per visualizzare gli archivi certificati nel percorso dell'archivio CurrentUser
certificati.
Se non si è nell'unità Cert:
, usare un percorso assoluto.
PS Cert:\CurrentUser\> Get-ChildItem
Visualizzazione delle proprietà del certificato nell'unità Cert:
Questo esempio ottiene un certificato con Get-Item
e lo archivia in una variabile.
L'esempio mostra le nuove proprietà dello script del 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 che dispongono dell'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 i certificati SSL del server
Questo comando usa il parametro SSLServerAuthentication del Get-ChildItem
cmdlet per ottenere tutti i certificati SSL del My
server negli archivi e WebHosting
.
$getChildItemSplat = @{
Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat
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.
$invokeCommandSplat = @{
ComputerName = 'Srv01', 'Srv02'
ScriptBlock = {
Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
}
}
Invoke-Command @invokeCommandSplat
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 DNSClient Authentication
nell'EKU- valore di
$true
per la proprietà SendAsTrustedIssuer - non scadono entro i 30 giorni successivi.
La proprietà NotAfter archivia la data di scadenza del certificato.
[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 }
Apertura dello snap-in MMC Certificates
Il Invoke-Item
cmdlet usa 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 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
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 all'archivio WebHosting
My
.
Move-Item
non può spostare gli archivi certificati e non può spostare i certificati in un percorso di archivio diverso, ad esempio lo spostamento di un certificato da LocalMachine
a CurrentUser
. Il Move-Item
cmdlet può spostare i certificati all'interno di un archivio, ma non sposta le chiavi private.
Questo comando usa il parametro SSLServerAuthentication del Get-ChildItem
cmdlet per ottenere i certificati di autenticazione del server SSL nell'archivio My
certificati.
I certificati restituiti vengono inviati tramite pipe al Move-Item
cmdlet , che sposta i certificati nell'archivio WebHosting
.
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication |
Move-Item -Destination cert:\LocalMachine\WebHosting
Eliminazione di certificati e chiavi private
Il Remove-Item
cmdlet elimina i certificati specificati. Il parametro dinamico DeleteKey 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 con un nome DNS che 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
CredSSP (Credential Security Service Provider) 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 Set-Item
cmdlet 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 {
$removeItemSplat = @{
Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
DeleteKey = $true
}
Remove-Item @removeItemSplat
}
Eliminare certificati scaduti
Questo comando usa il parametro ExpiringInDays del cmdlet con un valore di 0
per ottenere i certificati nell'archivio WebHosting
Get-ChildItem
scaduto.
La variabile contenente i certificati restituiti viene inviata tramite pipe al Remove-Item
cmdlet, che li 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à il New-Item
cmdlet crea archivi certificati nel percorso dell'archivio.Cert:
LocalMachine
Supporta i parametri Name, Path, WhatIf e Confirm . Tutti gli altri parametri vengono ignorati. Il comando restituisce un archivio System.Security.Cryptography.X509Certificates.X509Store che rappresenta il nuovo archivio certificati.
Questo comando crea un nuovo archivio certificati denominato CustomStore
nel percorso dell'archivio 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 dell'archivio LocalMachine
nel computer Server01.
Il comando usa il Invoke-Command
cmdlet per eseguire un New-Item
comando nel computer Server01. Il comando restituisce un archivio System.Security.Cryptography.X509Certificates.X509Store che rappresenta il nuovo archivio certificati.
Invoke-Command -ComputerName Server01 -ScriptBlock {
New-Item -Path cert:\LocalMachine\CustomStore
}
Creazione di certificati client per WS-Man
Questo comando crea la voce ClientCertificate che può essere usata dal client WS-Management . Il nuovo clientCertificate viene visualizzato nella directory ClientCertificate come ClientCertificate_1234567890
. Tutti i parametri sono obbligatori. L'autorità emittente deve essere identificazione personale del certificato dell'autorità emittente.
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
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 -ComputerName S1, S2 -ScriptBlock {
Remove-Item -Path cert:\LocalMachine\TestStore -Recurse
}
Parametri dinamici
I parametri dinamici sono parametri di 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 efficaci solo sui certificati.
Nota
I parametri che eseguono il filtro sulla proprietà EnhancedKeyUsageList restituiscono anche elementi con un valore di proprietà EnhancedKeyUsageList vuoto. I certificati che dispongono di un oggetto EnhancedKeyUsageList vuoto possono essere usati per tutti gli scopi.
I parametri del provider di certificati seguenti sono stati reintrodotti in PowerShell 7.1.
- DNSName
- DocumentEncryptionCert
- EKU
- ScadenzaInDays
- SSLServerAuthentication
CodeSigningCert <System.Management.Automation.SwitchParameter>
Cmdlet supportati
Questo parametro ottiene i certificati con Code Signing
il valore della proprietà EnhancedKeyUsageList .
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 di sicurezza prima di usare Remove-Item
con Invoke-Command
e delega delle credenziali.
Questo parametro è stato reintrodotto in PowerShell 7.1
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 reintrodotto in PowerShell 7.1
DocumentEncryptionCert <System.Management.Automation.SwitchParameter>
Cmdlet supportati
Questo parametro ottiene i certificati con Document Encryption
il valore della proprietà EnhancedKeyUsageList .
EKU <System.String>
Cmdlet supportati
Questo parametro ottiene i certificati con il modello di testo o testo specificato nella proprietà EnhancedKeyUsageList del certificato. I caratteri jolly (*
) sono consentiti. La proprietà EnhancedKeyUsageList contiene il nome descrittivo e i campi OID dell'EKU.
Questo parametro è stato reintrodotto in PowerShell 7.1
ScadenzaInDays <System.Int32>
Cmdlet supportati
Questo parametro ottiene i certificati in scadenza o prima del numero specificato di giorni. Un valore pari a zero (0) ottiene i certificati scaduti.
Questo parametro è stato reintrodotto in PowerShell 7.1
ItemType <System.String>
Questo parametro viene usato per specificare il tipo di elemento creato da New-Item
. Il New-Item
cmdlet supporta solo il valore Store
. New-Item
il cmdlet non può creare nuovi certificati.
Cmdlet supportati
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Cmdlet supportati
Ottiene solo i certificati del server per l'hosting Web SSL. Questo parametro ottiene i certificati con Server Authentication
il valore della proprietà EnhancedKeyUsageList .
Questo parametro è stato reintrodotto in PowerShell 7.1
Proprietà script
Sono state aggiunte nuove proprietà script all'oggetto x509Certificate2 che rappresenta i certificati per semplificare la ricerca e la gestione dei certificati.
- DnsNameList: per popolare la proprietà DnsNameList , 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 proprietà EnhancedKeyUsageList , il provider di certificati copia le proprietà OID del campo EnhancedKeyUsage (EKU) nel certificato e crea un nome descrittivo.
- SendAsTrustedIssuer: per popolare la proprietà SendAsTrustedIssuer, il provider Certificate copia la proprietà SendAsTrustedIssuer dal certificato. Per altre informazioni, vedere Gestione delle autorità di certificazione 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 le 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 PowerShell 3.0, è possibile ottenere argomenti della Guida personalizzati per i cmdlet del provider che spiegano come questi cmdlet si comportano in un'unità 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 di Get-Help
per specificare un'unità file system.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: