Compartir a través de


Proveedor de certificados

Nombre del proveedor

Certificado

Unidades

Cert:

Capacidades

ShouldProcess (DeberíaProcesar)

Descripción breve

Proporciona acceso a los almacenes de certificados X.509 y a los certificados en PowerShell.

Descripción detallada

El proveedor Certificado de PowerShell le permite obtener, agregar, cambiar, borrar y eliminar certificados y almacenes de certificados en PowerShell.

La unidad de certificados 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, que se tratan en este artículo.

Tipos expuestos por este proveedor

La unidad Certificado expone los siguientes tipos.

  • Ubicaciones de almacén (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 de 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 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 mediante sus huellas digitales.

El proveedor certificado de expone el espacio de nombres del certificado como unidad Cert: en PowerShell. Este comando utiliza 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. Utilice 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, utilice el nombre de la unidad Cert: 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 utiliza los alias para permitirle trabajar con rutas de acceso de los proveedores de una manera familiar. 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:

Se han agregado nuevos parámetros dinámicos, DnsName, EKU, SSLServerAuthentication, y ExpiringInDays al Get-ChildItem cmdlet de 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, utilice una ruta 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 autorización 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 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 en los almacenes Mi y WebHosting.

Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
  -SSLServerAuthentication

Búsqueda de certificados expirados en equipos remotos

Este comando usa el cmdlet Invoke-Command para ejecutar un comando Get-ChildItem 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.

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 tengan los siguientes atributos:

  • "fabrikam" en su nombre DNS
  • "Autenticación de cliente" en su EKU
  • un valor de $true para la propiedad sendAsTrustedIssuer de
  • no caducan dentro de los próximos 30 días.

La propiedad NotAfter 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)
                                   }

Apertura del complemento MMC de 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

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 de Mi almacén al almacén de WebHosting.

Move-Item no moverá almacenes de certificados y no moverá 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 de WebHosting.

Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication | Move-Item `
  -Destination cert:\LocalMachine\WebHosting

Eliminación de certificados y claves privadas

El Remove-Item cmdlet quitará los certificados que especifique. El -DeleteKey parámetro dynamic 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 unidad de Cert:, el cmdlet Remove-Item solo admite los parámetros DeleteKey, Path, WhatIfy 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 cmdlet Get-ChildItem para obtener los certificados y el cmdlet Remove-Item 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 Enable-WSManCredSSP para habilitar la 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 cmdlet Connect-WSMan para conectar el equipo S1 al servicio WinRM en el equipo local. Cuando se completa este comando, el equipo S1 aparece en la unidad WSMan: local de 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 mediante el cmdlet y especifique la New-PSSession autenticación CredSSP. Guarda la sesión en la variable $s.

$s  = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01

Por último, use el cmdlet Invoke-Command para ejecutar un comando Remove-Item en la sesión de la variable $s. El comando Remove-Item 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 certificados en el almacén de WebHosting que han expirado.

La variable que contiene los certificados devueltos se canaliza al cmdlet Remove-Item, 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

Creación de 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 unidad Cert:, el New-Item cmdlet crea almacenes de certificados en la ubicación del almacén LocalMachine. Admite el nombre de, ruta de acceso, WhatIfy parámetros Confirm. Se omiten todos los demás parámetros. 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

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 almacén LocalMachine en el equipo Server01.

El comando usa el cmdlet Invoke-Command para ejecutar un comando New-Item 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 entrada ClientCertificate que puede usar el cliente WS-Management. El nuevo clientCertificate de aparecerá en el directorio clientCertificate de como "ClientCertificate_1234567890". Todos los parámetros son obligatorios. El del emisor de debe ser la huella digital del certificado de emisores.

$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
         -Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
         -URI wmicimv2/* -Credential $cred

Eliminación de almacenes de certificados

Eliminar un almacén de certificados de un equipo remoto

Este comando usa el cmdlet Invoke-Command para ejecutar un comando Remove-Item en los equipos S1 y S2. El comando Remove-Item incluye el parámetro Recurse, que elimina los certificados del 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 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 en la EnhancedKeyUsageList propiedad también devuelven elementos con un valor de propiedad vacío EnhancedKeyUsageList . Los certificados que tienen un EnhancedKeyUsageList vacío se pueden usar para todos los fines.

ItemType <(Cadena)>

Este parámetro le permite especificar el tipo de elemento creado por New-Item.

En una unidad Certificate, se permiten los siguientes valores:

  • Proveedor de certificados
  • Certificado
  • Tienda
  • StoreLocation (Ubicación de la tienda)

Cmdlets admitidos

CodeSigningCert <System.Management.Automation.SwitchParameter>

Cmdlets compatibles

Este parámetro obtiene certificados que tienen "Code Signing" en su valor de propiedad EnhancedKeyUsageList .

DnsName <microsoft.PowerShell.Commands.DnsNameRepresentation>

Cmdlets compatibles

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 en Unicode. Se permiten caracteres comodín (*) .

Este parámetro se introdujo en Windows PowerShell 3.0.

EKU <System.String>

Cmdlets compatibles

Este parámetro obtiene certificados que tienen el texto o el patrón de texto especificados en la EnhancedKeyUsageList propiedad del certificado. Se permiten caracteres comodín (*) . La EnhancedKeyUsageList propiedad contiene el nombre descriptivo y los campos OID del EKU.

Este parámetro se introdujo en Windows PowerShell 3.0.

ExpiringInDays <System.Int32>

Cmdlets compatibles

Este parámetro obtiene certificados que expiran en o antes del número de días especificado. Un valor de 0 (cero) obtiene los certificados que han caducado.

Este parámetro se introdujo en Windows PowerShell 3.0.

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

Cmdlets compatibles

Obtiene solo certificados de servidor para el hospedaje web SSL. Este parámetro obtiene certificados que tienen "Autenticación de servidor" en su EnhancedKeyUsageList valor de propiedad.

Este parámetro se introdujo en Windows PowerShell 3.0.

DeleteKey <System.Management.Automation.SwitchParameter>

Cmdlets compatibles

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 almacén de un Cert:\CurrentUser equipo remoto, debe usar credenciales delegadas. El cmdlet Invoke-Command 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 Windows 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 DnsNameList propiedad, 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 contenido del campo Asunto del certificado.

  • EnhancedKeyUsageList: Para rellenar la EnhancedKeyUsageList propiedad, 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 SendAsTrustedIssuer propiedad, el proveedor de certificados copia la SendAsTrustedIssuer propiedad del certificado. Para obtener más información, consulte administración de 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 del proveedor. Para obtener más información sobre cómo usar la canalización con los cmdlets del proveedor, consulte las referencias de los cmdlets que se encuentran a lo largo de este artículo.

Obtener ayuda

A partir de Windows PowerShell 3.0, puede obtener temas de ayuda adaptados para cmdlets proporcionados por proveedores 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 parámetro -Path de Get-Help para especificar una unidad del sistema de archivos.

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert:

Consulte también

about_Providers

about_Signing

Get-AuthenticodeSignature

Set-AuthenticodeSignature

Get-PfxCertificate