about_Certificate_Provider
Nome provider
Certificato
Unità
Cert:
Funzionalità
ShouldProcess
Descrizione breve
Fornisce l'accesso agli archivi certificati X.509 e ai certificati in PowerShell.
Descrizione dettagliata
Il provider di certificati 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, ovvero contenitori di alto livello che raggruppano i certificati per l'utente corrente e per tutti gli utenti. Ogni sistema ha una
CurrentUser
posizione di archiviazione eLocalMachine
(tutti gli utenti). - System.Security.Cryptography.X509Certificates.X509Store, ovvero 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 vengono identificati dalle 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 sono ora alias per Get-ChildItem, cd
è un alias per Set-Location ed pwd
è un alias per Get-Location.ls
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 ci si trova 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 i certificati SSL del server
Questo comando usa il parametro SSLServerAuthentication del Get-ChildItem
cmdlet per ottenere tutti i certificati SSL del server negli My
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
nella loro 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 certificati
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 Certificati 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 My
all'archivio WebHosting
.
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 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 intatta 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 caratteri 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 in un computer remoto. Per eliminare una chiave privata in un computer remoto, è necessario usare le credenziali delegate.
Usare il cmdlet per abilitare l'autenticazione Enable-WSManCredSSP
CredSSP (Credential Security Service Provider) in un client nel computer remoto S1.
CredSSP consente 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
Usare infine 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 i certificati scaduti
Questo comando usa il parametro ExpiringInDays del Get-ChildItem
cmdlet con il valore per 0
ottenere i certificati nell'archivio WebHosting
scaduti.
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 dell'archivio LocalMachine
.
New-Item -Path cert:\LocalMachine\CustomStore
Creare 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 oggetto 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 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 proprietà EnhancedKeyUsageList restituiscono anche elementi con un valore della proprietà EnhancedKeyUsageList vuoto. I certificati con 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
- ExpiringInDays
- 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 per la sicurezza prima di usare Remove-Item
con Invoke-Command
la delega delle credenziali e .
Questo parametro è stato introdotto in PowerShell 3.0.
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. Sono consentiti caratteri jolly (*
).
Questo parametro è stato introdotto in PowerShell 3.0.
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 testo o il modello di testo specificato nella proprietà EnhancedKeyUsageList del certificato. Sono consentiti caratteri jolly (*
). La proprietà EnhancedKeyUsageList contiene il nome descrittivo e i campi OID dell'EKU.
Questo parametro è stato introdotto in PowerShell 3.0.
ExpiringInDays <System.Int32>
Cmdlet supportati
Questo parametro ottiene i certificati in scadenza o prima del numero di giorni specificato. 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 introdotto in PowerShell 3.0.
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 ne crea un nome descrittivo.
- SendAsTrustedIssuer: per popolare la proprietà SendAsTrustedIssuer , il provider di certificati copia la proprietà SendAsTrustedIssuer 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 nomi DNS e alle date di scadenza e distinguere i certificati di autenticazione client e server in base al valore delle proprietà EKU (Enhanced Key Usage).
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.
Visualizzazione delle informazioni della Guida
A partire da PowerShell 3.0, è possibile ottenere argomenti della Guida personalizzati per i cmdlet del provider che illustrano il comportamento di tali cmdlet in un'unità file system.
Per ottenere gli argomenti della Guida personalizzati per l'unità del file system, eseguire un comando Get-Help in un'unità file system o usare il -Path
parametro di Get-Help
per specificare un'unità del file system.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: