Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nombre del proveedor
Certificado
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 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 y certificados de certificado del equipo.
El proveedor de certificados es compatible con los siguientes cmdlets, que se describen en este artículo.
- 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 de certificado expone los siguientes tipos.
Ubicaciones de almacenamiento (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 ubicación del almacén CurrentUser y LocalMachine (todos los usuarios).
Almacenes de certificados (System. Security. Cryptography. X509Certificates. X509Store), que son almacenes físicos en los que se guardan y administran los certificados.
Certificados x. 509 System. Security. Cryptography. X509Certificates. X509Certificate2 , cada uno de los cuales representa un certificado X. 509 en el equipo. Los certificados se identifican por sus huellas digitales.
Navegar 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 almacén de certificados raíz en la ubicación del almacén LocalMachine. 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 Cert: nombre de 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 que le resulte más fácil trabajar con rutas de acceso del proveedor. Los comandos como dir y ls son ahora alias de Get-childitem, cd es un alias para set-Location. y pwd es un alias de Get-Location.
Mostrar el contenido de la unidad CERT:
Se han agregado nuevos parámetros dinámicos, DnsName ,, EKU SSLServerAuthentication y ExpiringInDays al Get-ChildItem cmdlet en la Cert: unidad. Los nuevos parámetros dinámicos están disponibles en Windows PowerShell 3,0 y versiones más recientes de PowerShell. Los parámetros del proveedor funcionan con IIS 8,0 en Windows Server 2012 y versiones posteriores.
Este comando usa el Get-ChildItem cmdlet para mostrar los almacenes de certificados en la ubicación del almacén de certificados CurrentUser.
Si no está en la Cert: unidad, use una ruta de acceso absoluta.
PS Cert:\CurrentUser\> Get-ChildItem
Visualización de las propiedades del certificado en la unidad CERT:
Este ejemplo obtiene un certificado con Get-Item y lo almacena en una variable.
En el ejemplo se muestran las nuevas propiedades del 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 de codiseño
Este comando usa los parámetros CodeSigningCert y RECURSE del Get-ChildItem cmdlet para obtener todos los certificados en el equipo que tienen autoridad de firma de código.
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
Buscar certificados expirados
Este comando usa el parámetro ExpiringInDays del Get-ChildItem cmdlet para obtener los certificados que expirarán 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 de los almacenes My y WebHosting.
Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
-SSLServerAuthentication
Buscar 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 los certificados de los equipos Srv01 y Srv02 que han expirado.
Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* `
-Recurse -ExpiringInDays 0}
Combinación de filtros para buscar un conjunto específico de certificados
Este comando obtiene todos los certificados de la ubicación del almacén LocalMachine que tienen los siguientes atributos:
- "fabrikam" en su nombre DNS
- "Autenticación de cliente" en su EKU
- un valor de
$truepara la propiedad SendAsTrustedIssuer - no expire en los próximos 30 días.
La propiedad Noolaetaer almacena la fecha de expiración del certificado.
Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
-EKU "*Client Authentication*" | Where-Object {
$_.SendAsTrustedIssuer -and `
$_.NotAfter -gt (get-date).AddDays.(30)
}
Abrir el complemento MMC Certificados
El Invoke-Item cmdlet usará 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 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
Mover certificados
Trasladar todos los certificados de autenticación de servidor SSL al almacén webhosting
Este comando usa el Move-Item cmdlet para trasladar un certificado del almacén My al almacén webhosting.
Move-Itemno moverá los almacenes de certificados y no moverá los certificados a una ubicación de almacén diferente, como mover un certificado de LocalMachine a CurrentUser. El Move-Item cmdlet mueve certificados, 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 almacén de certificados My.
Los certificados devueltos se canalizan al Move-Item cmdlet, que mueve los certificados al almacén webhosting.
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication | Move-Item `
-Destination cert:\LocalMachine\WebHosting
Eliminar certificados y claves privadas
El Remove-Item cmdlet quitará los certificados que especifique. El -DeleteKey parámetro Dynamic elimina la clave privada.
Eliminar un certificado del almacén de CA
Este comando elimina un certificado del almacén de certificados CA, pero deja intacta la clave privada asociada.
En la Cert: unidad, el Remove-Item cmdlet solo admite los parámetros DeleteKey, path, Whatify CONFIRM . Todos los demás parámetros se omiten.
Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0
Eliminar un certificado mediante un carácter comodín en el nombre DNS
Este comando elimina todos los certificados con un nombre DNS que contenga "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
Eliminar claves privadas de un equipo remoto
Esta serie de comandos permite 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 utilizar credenciales delegadas.
Use el Enable-WSManCredSSP cmdlet para habilitar la autenticación del proveedor de servicios de seguridad de credenciales (CredSSP) en un cliente en el 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 WSMan: unidad local en PowerShell.
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
Ahora, puede usar el cmdlet Set-item en la unidad WSMan: 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 con el New-PSSession cmdlet y especifique la 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 en 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 { Remove-Item `
-Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
-DeleteKey
}
Eliminar certificados expirados
Este comando usa el parámetro ExpiringInDays del Get-ChildItem cmdlet con un valor de 0 para obtener los certificados del almacén webhosting 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.
Crear almacenes de certificados
En la unidad CERT:, el New-Item cmdlet crea almacenes de certificados en la ubicación del almacén LocalMachine. Admite los parámetros Name, path, Whatify CONFIRM . Todos los demás parámetros se omiten. El comando devuelve un 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 almacén LocalMachine.
New-Item -Path cert:\LocalMachine\CustomStore
Crear un nuevo almacén de certificados en un equipo remoto
Este comando crea un nuevo almacén de certificados denominado "HostingStore" en la ubicación del almacén LocalMachine 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 System. Security. Cryptography. X509Certificates. X509Store que representa el nuevo almacén de certificados.
Invoke-Command { New-Item -Path cert:\LocalMachine\CustomStore } `
-ComputerName Server01
Creación de certificados de cliente para WS-MAN
Este comando crea la entrada ClientCertificate que puede usar el cliente de WS-Management . El nuevo objeto ClientCertificate aparecerá en el directorio ClientCertificate como "ClientCertificate_1234567890". Todos los parámetros son obligatorios. El emisor debe ser la huella digital del certificado de emisores.
$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
-Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
-URI wmicimv2/* -Credential $cred
Eliminar 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 en el almacén antes de eliminar el almacén.
Invoke-Command { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
-ComputerName S1, S2
Parámetros dinámicos
Los parámetros dinámicos son parámetros de cmdlet agregados por 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 se aplican a los certificados.
Nota
Los parámetros que realizan el filtrado en la EnhancedKeyUsageList propiedad también devuelven elementos con un EnhancedKeyUsageList valor de propiedad vacío.
Los certificados que tienen un EnhancedKeyUsageList vacío pueden utilizarse para todos los propósitos.
ItemType<String>
Este parámetro permite especificar el tipo de elemento creado por New-Item .
En una Certificate unidad, se permiten los siguientes valores:
- Proveedor de certificados
- Certificado
- Tienda
- StoreLocation
Cmdlets compatibles
CodeSigningCert <System. Management. Automation. Parámetrodemodificador>
Cmdlets admitidos
Este parámetro obtiene certificados que tienen "firma de código" en el valor de la propiedad EnhancedKeyUsageList .
DnsName <Microsoft. PowerShell. Commands. DnsNameRepresentation>
Cmdlets admitidos
Este parámetro obtiene certificados que tienen el patrón de nombre o nombre de dominio especificado 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 los caracteres comodín (*).
Este parámetro se incorporó en Windows PowerShell 3.0.
EKU <System. String>
Cmdlets admitidos
Este parámetro obtiene certificados que tienen el texto o el patrón de texto especificados en la EnhancedKeyUsageList propiedad del certificado. Se permiten los caracteres comodín (*). La EnhancedKeyUsageList propiedad contiene el nombre descriptivo y los campos OID del EKU.
Este parámetro se incorporó en Windows PowerShell 3.0.
ExpiringInDays <System. Int32>
Cmdlets admitidos
Este parámetro obtiene los certificados que expiran en el número especificado de días o antes. Un valor de 0 (cero) obtiene los certificados que han expirado.
Este parámetro se incorporó en Windows PowerShell 3.0.
SSLServerAuthentication <System. Management. Automation. Parámetrodemodificador>
Cmdlets admitidos
Obtiene solo los certificados de servidor para el hospedaje web de SSL. Este parámetro obtiene certificados que tienen "autenticación de servidor" en su EnhancedKeyUsageList valor de propiedad.
Este parámetro se incorporó en Windows PowerShell 3.0.
DeleteKey <System. Management. Automation. Parámetrodemodificador>
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 de un equipo remoto, debe usar credenciales delegadas. El Invoke-Command cmdlet admite la delegación de credenciales mediante el parámetro CredSSP . Debe considerar cualquier riesgo de seguridad antes Remove-Item de usar con Invoke-Command y la delegación de credenciales.
Este parámetro se incorporó en Windows PowerShell 3.0.
Propiedades del 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 laDnsNameListpropiedad, 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 laEnhancedKeyUsageListpropiedad, el proveedor de certificados copia las propiedades OID del campo campo EnhancedKeyUsage (EKU) en el certificado y crea un nombre descriptivo para ella.SendAsTrustedIssuer: Para rellenar laSendAsTrustedIssuerpropiedad, el proveedor de certificados copia laSendAsTrustedIssuerpropiedad del certificado. Para obtener más información, consulte Administración de emisores de confianza para la autenticación de cliente.
Estas características nuevas permiten buscar certificados en función de sus nombres DNS y fechas de expiración, y distinguir los certificados de autenticación de cliente y de servidor por el valor de sus propiedades de uso mejorado de clave (EKU).
Uso de la canalización
Los cmdlets de proveedor aceptan entradas de canalización. Puede usar la canalización para simplificar la tarea mediante el envío de datos de 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 cmdlets que se proporcionan en este artículo.
Ayuda
A partir de Windows PowerShell 3.0, puede obtener temas de ayuda personalizados sobre cmdlets de proveedor que explican cómo se comportan dichos 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 Get-Help para especificar una unidad del sistema de archivos.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: