about_Certificate_Provider
Nombre del proveedor
Certificate
Unidades
Cert:
Funcionalidades
ShouldProcess
Descripción breve
Proporciona acceso a los almacenes de certificados X.509 y a los certificados en PowerShell.
Descripción detallada
El proveedor de certificados de PowerShell le permite obtener, agregar, cambiar, borrar y eliminar certificados y almacenes de certificados en PowerShell.
La unidad de certificado es un espacio de nombres jerárquico que contiene los almacenes de certificados y los certificados del equipo.
El proveedor de certificados admite los siguientes cmdlets.
- 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
Tipos expuestos por este proveedor
La unidad Certificado expone los siguientes tipos.
- Microsoft.PowerShell.Commands.X509StoreLocation, que son contenedores de alto nivel que agrupan los certificados para el usuario actual y para todos los usuarios. Cada sistema tiene una
CurrentUser
ubicación de almacén de yLocalMachine
(todos los usuarios). - System.Security.Cryptography.X509Certificates.X509Store, que son almacenes físicos donde se guardan y administran los certificados.
- System.Security.Cryptography.X509Certificates.X509Certificate2, cada uno representa un certificado X.509 en el equipo. Los certificados se identifican mediante sus huellas digitales.
Navegación por la unidad de certificado
El proveedor de certificados expone el espacio de nombres del certificado como la Cert:
unidad en PowerShell. Este comando usa el Set-Location
comando para cambiar la ubicación actual al Root
almacén de certificados en la ubicación del LocalMachine
almacén. Use una barra diagonal inversa (\
) o una barra diagonal (/
) para indicar un nivel de la Cert:
unidad.
Set-Location Cert:
También puede trabajar con el proveedor de certificados desde cualquier otra unidad de PowerShell. Para hacer referencia a un alias desde otra ubicación, use el nombre de Cert:
la unidad en la ruta de acceso.
PS Cert:\> Set-Location -Path LocalMachine\Root
Para volver a una unidad del sistema de archivos, escriba el nombre de la unidad. Por ejemplo, escriba:
Set-Location C:
Nota:
PowerShell usa alias para permitirle trabajar con rutas de acceso de proveedor. Los comandos como dir
y ls
ahora son alias para Get-ChildItem, cd
es un alias para Set-Location y pwd
es un alias para Get-Location.
Mostrar el contenido de la unidad Cert:
Este comando usa el Get-ChildItem
cmdlet para mostrar los almacenes de certificados en la ubicación del CurrentUser
almacén de certificados.
Si no está en la Cert:
unidad, use una ruta de acceso absoluta.
PS Cert:\CurrentUser\> Get-ChildItem
Mostrar las propiedades del certificado dentro de la unidad Cert:
En este ejemplo se obtiene un certificado con Get-Item
y se almacena en una variable.
En el ejemplo se muestran las nuevas propiedades de script de certificado (DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer) mediante 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
Buscar todos los certificados codeSigning
Este comando usa los parámetros CodeSigningCert y Recurse del Get-ChildItem
cmdlet para obtener todos los certificados del equipo que tienen entidad de firma de código.
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
Búsqueda de certificados expirados
Este comando usa el parámetro ExpiringInDays del Get-ChildItem
cmdlet para obtener los certificados que expiran en los próximos 30 días.
Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30
Buscar certificados SSL de servidor
Este comando usa el parámetro SSLServerAuthentication del Get-ChildItem
cmdlet para obtener todos los certificados SSL de servidor en los My
almacenes y WebHosting
.
$getChildItemSplat = @{
Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat
Búsqueda de certificados expirados en equipos remotos
Este comando usa el Invoke-Command
cmdlet para ejecutar un Get-ChildItem
comando en los equipos Srv01 y Srv02. Un valor de cero (0
) en el parámetro ExpiringInDays obtiene certificados en los equipos Srv01 y Srv02 que han expirado.
$invokeCommandSplat = @{
ComputerName = 'Srv01', 'Srv02'
ScriptBlock = {
Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
}
}
Invoke-Command @invokeCommandSplat
Combinación de filtros para buscar un conjunto específico de certificados
Este comando obtiene todos los certificados de la ubicación del LocalMachine
almacén que tienen los atributos siguientes:
fabrikam
en su nombre DNSClient Authentication
en su EKU- un valor de
$true
para la propiedad SendAsTrustedIssuer - no expire en los próximos 30 días.
La propiedad NotAfter almacena la fecha de expiración del certificado.
[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 del complemento MMC de certificados
El Invoke-Item
cmdlet usa la aplicación predeterminada para abrir una ruta de acceso que especifique. En el caso de los certificados, la aplicación predeterminada es el complemento MMC certificados.
Este comando abre el complemento MMC certificados para administrar el certificado especificado.
Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B
Copiar certificados
El proveedor de certificados no admite la copia de certificados. Al intentar copiar un certificado, verá este error.
$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
Mover certificados
Mover todos los certificados de autenticación de SERVIDOR SSL al almacén de WebHosting
Este comando usa el Move-Item
cmdlet para mover un certificado del My
almacén al WebHosting
almacén.
Move-Item
no puede mover almacenes de certificados y no puede mover certificados a una ubicación de almacén diferente, como mover un certificado de LocalMachine
a CurrentUser
. El Move-Item
cmdlet puede mover certificados dentro de un almacén, pero no mueve claves privadas.
Este comando usa el parámetro SSLServerAuthentication del Get-ChildItem
cmdlet para obtener certificados de autenticación de servidor SSL en el My
almacén de certificados.
Los certificados devueltos se canalizan al Move-Item
cmdlet , que mueve los certificados al WebHosting
almacén.
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication |
Move-Item -Destination cert:\LocalMachine\WebHosting
Eliminación de certificados y claves privadas
El Remove-Item
cmdlet elimina los certificados que especifique. El parámetro dinámico DeleteKey elimina la clave privada.
Eliminación de un certificado del almacén de CA
Este comando elimina un certificado del almacén de certificados de entidad de certificación, pero deja intacta la clave privada asociada.
En la Cert:
unidad, el Remove-Item
cmdlet solo admite los parámetros DeleteKey, Path, WhatIf y Confirm . Se omiten todos los demás parámetros.
Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0
Eliminación de un certificado mediante caracteres comodín en el nombre DNS
Este comando elimina todos los certificados que tienen un nombre DNS que contiene Fabrikam
. Usa el parámetro DNSName del Get-ChildItem
cmdlet para obtener los certificados y el Remove-Item
cmdlet para eliminarlos.
Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item
Eliminación de claves privadas de un equipo remoto
Esta serie de comandos habilita la delegación y, a continuación, elimina el certificado y la clave privada asociada en un equipo remoto. Para eliminar una clave privada en un equipo remoto, debe usar credenciales delegadas.
Use el cmdlet para habilitar la Enable-WSManCredSSP
autenticación del proveedor de servicios de seguridad de credenciales (CredSSP) en un cliente del equipo remoto S1.
CredSSP permite la autenticación delegada.
Enable-WSManCredSSP -Role Client -DelegateComputer S1
Use el Connect-WSMan
cmdlet para conectar el equipo S1 al servicio WinRM en el equipo local. Cuando se completa este comando, el equipo S1 aparece en la unidad local WSMan:
de PowerShell.
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
Ahora, puede usar el Set-Item
cmdlet en la WSMan:
unidad para habilitar el atributo CredSSP para el servicio WinRM.
Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true
Inicie una sesión remota en el equipo S1 mediante el cmdlet y especifique la New-PSSession
autenticación CredSSP. Guarda la sesión en la $s
variable .
$s = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01
Por último, use el Invoke-Command
cmdlet para ejecutar un Remove-Item
comando en la sesión de la $s
variable . El Remove-Item
comando usa el parámetro DeleteKey para quitar la clave privada junto con el certificado especificado.
Invoke-Command -Session $s {
$removeItemSplat = @{
Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
DeleteKey = $true
}
Remove-Item @removeItemSplat
}
Eliminar certificados expirados
Este comando usa el parámetro ExpiringInDays del Get-ChildItem
cmdlet con un valor de 0
para obtener certificados en el WebHosting
almacén que han expirado.
La variable que contiene los certificados devueltos se canaliza al Remove-Item
cmdlet , que los elimina. El comando usa el parámetro DeleteKey para eliminar la clave privada junto con el certificado.
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
Crear certificados
El New-Item
cmdlet no crea nuevos certificados en el proveedor de certificados. Use el cmdlet New-SelfSignedCertificate para crear un certificado con fines de prueba.
Creación de almacenes de certificados
En la Cert:
unidad, el New-Item
cmdlet crea almacenes de certificados en la ubicación del LocalMachine
almacén. Admite los parámetros Name, Path, WhatIf y Confirm . Se omiten todos los demás parámetros. El comando devuelve un objeto System.Security.Cryptography.X509Certificates.X509Store que representa el nuevo almacén de certificados.
Este comando crea un nuevo almacén de certificados denominado CustomStore
en la ubicación del LocalMachine
almacén.
New-Item -Path cert:\LocalMachine\CustomStore
Creación de un almacén de certificados en un equipo remoto
Este comando crea un nuevo almacén de certificados denominado HostingStore
en la ubicación del LocalMachine
almacén en el equipo Server01.
El comando usa el Invoke-Command
cmdlet para ejecutar un New-Item
comando en el equipo Server01. El comando devuelve un objeto System.Security.Cryptography.X509Certificates.X509Store que representa el nuevo almacén de certificados.
Invoke-Command -ComputerName Server01 -ScriptBlock {
New-Item -Path cert:\LocalMachine\CustomStore
}
Creación de certificados de cliente para WS-Man
Este comando crea una entrada ClientCertificate que el cliente WS-Management puede usar. El nuevo ClientCertificate se muestra en el directorio ClientCertificate como ClientCertificate_1234567890
. Todos los parámetros son obligatorios. El emisor debe ser huella digital del certificado del emisor.
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
Eliminación de almacenes de certificados
Eliminar un almacén de certificados de un equipo remoto
Este comando usa el Invoke-Command
cmdlet para ejecutar un Remove-Item
comando en los equipos S1 y S2. El Remove-Item
comando incluye el parámetro Recurse , que elimina los certificados del almacén antes de eliminar el almacén.
Invoke-Command -ComputerName S1, S2 -ScriptBlock {
Remove-Item -Path cert:\LocalMachine\TestStore -Recurse
}
Parámetros dinámicos
Los parámetros dinámicos son parámetros de cmdlet que agrega un proveedor de PowerShell y solo están disponibles cuando el cmdlet se usa en la unidad habilitada para el proveedor. Estos parámetros son válidos en todos los subdirectorios del proveedor de certificados, pero solo son efectivos en los certificados.
Nota:
Los parámetros que realizan el filtrado con la propiedad EnhancedKeyUsageList también devuelven elementos con un valor de propiedad EnhancedKeyUsageList vacío. Los certificados que tienen un objeto EnhancedKeyUsageList vacío se pueden usar para todos los fines.
Los siguientes parámetros del proveedor de certificados se volvieron a introducir en PowerShell 7.1.
- DNSName
- DocumentEncryptionCert
- EKU
- ExpiringInDays
- SSLServerAuthentication
CodeSigningCert <System.Management.Automation.SwitchParameter>
Cmdlets admitidos
Este parámetro obtiene certificados que tienen Code Signing
en su valor de propiedad EnhancedKeyUsageList .
DeleteKey <System.Management.Automation.SwitchParameter>
Cmdlets admitidos
Este parámetro elimina la clave privada asociada cuando elimina el certificado.
Importante
Para eliminar una clave privada asociada a un certificado de usuario en el Cert:\CurrentUser
almacén en un equipo remoto, debe usar credenciales delegadas. El Invoke-Command
cmdlet admite la delegación de credenciales mediante el parámetro CredSSP . Debe tener en cuenta los riesgos de seguridad antes de usar Remove-Item
con Invoke-Command
y la delegación de credenciales.
Este parámetro se introdujo en PowerShell 3.0.
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
Cmdlets admitidos
Este parámetro obtiene certificados que tienen el nombre de dominio o el patrón de nombre especificados en la propiedad DNSNameList del certificado. El valor de este parámetro puede ser Unicode
o ASCII
. Los valores Punycode se convierten a Unicode. Se permiten caracteres comodín (*
).
Este parámetro se introdujo en PowerShell 3.0.
DocumentEncryptionCert <System.Management.Automation.SwitchParameter>
Cmdlets admitidos
Este parámetro obtiene certificados que tienen Document Encryption
en su valor de propiedad EnhancedKeyUsageList .
EKU <System.String>
Cmdlets admitidos
Este parámetro obtiene certificados que tienen el patrón de texto o texto especificado en la propiedad EnhancedKeyUsageList del certificado. Se permiten caracteres comodín (*
). La propiedad EnhancedKeyUsageList contiene el nombre descriptivo y los campos OID de la EKU.
Este parámetro se introdujo en PowerShell 3.0.
ExpiringInDays <System.Int32>
Cmdlets admitidos
Este parámetro obtiene certificados que expiran en o antes del número de días especificado. Un valor de cero (0) obtiene certificados que han expirado.
Este parámetro se introdujo en PowerShell 7.1
ItemType <System.String>
Este parámetro se usa para especificar el tipo de elemento creado por New-Item
. El New-Item
cmdlet solo admite el valor Store
. New-Item
el cmdlet no puede crear nuevos certificados.
Cmdlets admitidos
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Cmdlets admitidos
Obtiene solo los certificados de servidor para el hospedaje web de SSL. Este parámetro obtiene certificados que tienen Server Authentication
en su valor de propiedad EnhancedKeyUsageList .
Este parámetro se introdujo en PowerShell 3.0.
Propiedades de script
Se han agregado nuevas propiedades de script al objeto x509Certificate2 que representa los certificados para facilitar la búsqueda y administración de los certificados.
- DnsNameList: para rellenar la propiedad DnsNameList , el proveedor de certificados copia el contenido de la entrada DNSName en la extensión SubjectAlternativeName (SAN). Si la extensión SAN está vacía, la propiedad se rellena con el contenido del campo Firmante del certificado.
- EnhancedKeyUsageList: para rellenar la propiedad EnhancedKeyUsageList , el proveedor de certificados copia las propiedades OID del campo EnhancedKeyUsage (EKU) en el certificado y crea un nombre descriptivo para él.
- SendAsTrustedIssuer: para rellenar la propiedad SendAsTrustedIssuer , el proveedor de certificados copia la propiedad SendAsTrustedIssuer del certificado. Para obtener más información, consulte Administración de emisores de confianza para la autenticación de cliente.
Estas nuevas características le permiten buscar certificados basados en sus nombres DNS y fechas de expiración, y distinguir los certificados de autenticación de cliente y servidor por el valor de sus propiedades de Uso mejorado de claves (EKU).
Uso de la canalización
Los cmdlets del proveedor aceptan entradas de canalización. Puede usar la canalización para simplificar las tareas mediante el envío de datos del proveedor de un cmdlet a otro cmdlet de proveedor. Para más información sobre cómo usar la canalización con cmdlets de proveedor, consulte las referencias de cmdlet proporcionadas en este artículo.
Ayuda
A partir de PowerShell 3.0, puede obtener temas de ayuda personalizados para cmdlets de proveedor que explican cómo se comportan esos cmdlets en una unidad del sistema de archivos.
Para obtener los temas de ayuda personalizados para la unidad del sistema de archivos, ejecute un comando Get-Help en una unidad del sistema de archivos o use el -Path
parámetro de para especificar una unidad del sistema de Get-Help
archivos.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: