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.

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 e LocalMachine (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.

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 DNS
  • Client 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:

Vedi anche