Administración de Certificados de Windows con PowerShell

Si eres un administrador de sistemas de Windows, es posible que te hayan obligado a trabajar con certificados de Windows. Trabajar con certificados en Windows suele ser una de esas tareas adicionales que un administrador de sistemas tiene que asumir. ¡Con el administrador de certificados de Windows como herramienta, puedes hacerlo! ¡

Los certificados son conocidos por ser complejos y difíciles de entender, pero en este artículo tendrás la oportunidad de descubrir que los certificados no son tan aterradores en Windows!

Este artículo se centrará principalmente en trabajar con certificados en Windows. Si deseas aprender más sobre cómo funcionan los certificados en general, consulta el artículo complementario de este tutorial de certificados X.509.

Entendiendo los almacenes de certificados

En el administrador de certificados de Windows, todos los certificados existen en ubicaciones de almacenamiento lógico denominadas almacenes de certificados. Los almacenes de certificados son “contenedores” donde Windows guarda todos los certificados que están instalados actualmente y un certificado puede estar en más de un almacén.

Desafortunadamente, los almacenes de certificados no son el concepto más intuitivo con el que trabajar. A continuación, leerás cómo diferenciar estos almacenes y cómo trabajar con ellos.

Cada almacén se encuentra en el Registro de Windows y en el sistema de archivos. Consulta la tabla a continuación para obtener más detalles. Cuando trabajas con un certificado en un almacén, estás interactuando con el almacén lógico; no modificando directamente el registro o el sistema de archivos. Esta forma más sencilla te permite trabajar con un solo objeto mientras Windows se encarga de cómo representar ese objeto en el disco.

A veces verás que las tiendas de certificados se denominan como tiendas físicas o lógicas. Las tiendas físicas hacen referencia al sistema de archivos real o la ubicación del registro donde se almacenan la(s) clave(s) del registro y/o el/los archivo(s). Las tiendas lógicas son referencias dinámicas que hacen referencia a una o más tiendas físicas. Las tiendas lógicas son mucho más fáciles de trabajar que las tiendas físicas para la mayoría de los casos de uso comunes.

Windows almacena certificados en dos áreas diferentes: en un contexto de usuario y de equipo. Un certificado se coloca en uno de estos dos contextos dependiendo de si el certificado debe ser utilizado por un solo usuario, varios usuarios o el propio equipo. Para el resto de este artículo, un certificado en un contexto de usuario y equipo se llamará informalmente certificados de usuario y certificados de equipo.

Certificados de Usuario

Si tienes la intención de que un certificado sea utilizado por un solo usuario, entonces una tienda de certificados de usuario dentro del administrador de certificados de Windows es ideal. Este es el caso de uso común para procesos de autenticación basados en certificados, como IEEE 802.1x con cable.

Los certificados de usuario se encuentran dentro del perfil del usuario actual y solo están mapeados lógicamente dentro del contexto de ese usuario. Los certificados de usuario están “mapeados” y son únicos para cada usuario, incluso en los mismos sistemas.

Certificados de Equipo

Si un certificado será utilizado por todos los usuarios en una computadora o un proceso del sistema, debe colocarse dentro de un almacén en el contexto de la computadora. Por ejemplo, si un certificado se utilizará en un servidor web para cifrar la comunicación para todos los clientes, colocar un certificado en un almacén en el contexto de la computadora sería ideal.

Verás que el almacén de certificados de una computadora está lógicamente asignado para todos los contextos de usuario. Esto permite que los certificados en un almacén de certificados de computadora sean utilizados por todos los usuarios, según las permisos configurados para la clave privada.

Para obtener más información sobre las claves privadas, asegúrate de consultar el artículo Tutorial de Certificados X.509: Una Guía para Administradores del Sistema.

Los certificados de computadora se encuentran en las colmenas del Registro de la Máquina Local y la carpeta ProgramData. Los certificados de usuario se encuentran en las colmenas del Registro del Usuario Actual y la carpeta AppData. A continuación, puedes ver un desglose de dónde se encuentra cada tipo de almacén en el registro y en el sistema de archivos.

Context Registry Path Explanation
User HKCU:\SOFTWARE\Microsoft\SystemCertificates\ Physical store for user-specific public keys
User HKCU:\SOFTWARE\Policies\Microsoft\SystemCertificates\ Physical store for user-specific public keys installed by Active Directory (AD) Group Policy Objects (GPOs)
Computer HKLM:\SOFTWARE\Microsoft\SystemCertificates\ Physical store for machine-wide public keys
Computer HKLM:\SOFTWARE\Microsoft\Cryptography\Services\ Physical store for keys associated with a specific service
Computer HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\ Physical store for machine-wide public keys installed by GPOs
Computer HKLM:\SOFTWARE\Microsoft\EnterpriseCertificates\ Physical store for machine-wide public keys installed by the Enterprise PKI Containers within an AD domain
Context File Location Explanation
User $env:APPDATA\Microsoft\SystemCertificates\ Physical store for user-specific public keys and pointers to private keys
User $env:APPDATA\Microsoft\Crypto\ Physical store for user-specific private key containers
Computer $env:ProgramData\Microsoft\Crypto\ Physical store for machine-wide private key containers

Prerrequisitos

A lo largo del resto de este artículo, encontrarás múltiples ejemplos que muestran interacciones con los almacenes de certificados de Windows. Para replicar estos ejemplos, asegúrate de cumplir con los siguientes requisitos:

  • Windows Vista, Windows Server 2008 o un sistema operativo más reciente. Los ejemplos mostrados utilizan Windows 10 Enterprise versión 1903.
  • Familiaridad con PowerShell. Aunque no es necesario, este será el lenguaje utilizado para hacer referencia a los certificados cuando sea apropiado. Todos los ejemplos mostrados han sido creados con Windows PowerShell 5.1.
  • No necesitarás instalar certificados específicos para seguir, pero el uso de un certificado autofirmado es beneficioso.

Gestión de Certificados en Windows

En Windows, existen tres formas principales de gestionar certificados:

  • El complemento de la Consola de Administración de Certificados de Microsoft (MMC) (certmgr.msc)
  • PowerShell
  • La herramienta de línea de comandos certutil

En este artículo, aprenderás cómo gestionar certificados a través del complemento MMC de Certificados y PowerShell. Si deseas obtener más información sobre cómo utilizar certutil, consulta la Documentación de Microsoft.

PowerShell vs. el Administrador de Certificados de Seguridad de Windows

Dado que los certificados se pueden gestionar de varias maneras en Windows, ¿cuál eliges? ¿Deberías optar por la ruta GUI (MMC) o la línea de comandos con PowerShell?

Nota: Este artículo es relevante tanto para el Administrador de Certificados de Windows 7 como para los complementos MMC del Administrador de Certificados de Windows 10.

Primero, considera el ciclo de vida de un certificado. Si solo planeas instalar o quitar un solo certificado una vez, considera usar el MMC. Pero si estás gestionando varios certificados o te encuentras realizando la misma tarea una y otra vez, la ruta de la línea de comandos puede ser la mejor opción. Incluso si no sabes cómo escribir scripts en PowerShell, valdría la pena aprender si tienes muchos certificados diferentes que gestionar.

Veamos primero cómo descubrir los certificados instalados en Windows utilizando tanto el Administrador de certificados como PowerShell.

Usando el Administrador de certificados de Windows (certmgr.msc)

Para ver los certificados con el MMC, abre el Administrador de certificados desde el menú de inicio y escribe certmgr.msc. Esto abrirá el MMC de Certificados de Windows. Esta vista inicial proporcionará una visión general de todas las tiendas lógicas que se muestran en la ventana izquierda.

Puedes ver en la captura de pantalla a continuación que se ha seleccionado la tienda lógica Autoridades de certificación raíz de confianza.

Trusted Root Certification Authorities store

Ver tiendas físicas

Por defecto, el administrador de certificados de Windows no mostrará las tiendas físicas reales. Para mostrar las tiendas, haz clic en Ver y luego en Opciones. A continuación, verás opciones para elegir si mostrar las tiendas físicas de certificados. Habilitar esta opción facilita la identificación de las rutas específicas dentro de Windows.

Figure 2 – The Certificates MMC View Options with Physical certificate stores selected.

Ahora puedes ver que se muestran contenedores adicionales debajo de la tienda lógica de ejemplo Autoridades de certificación raíz de confianza que se mostró anteriormente. Los certificados todavía están agrupados en relación a sus tiendas lógicas, pero ahora puedes ver la tienda física “Registro”.

Inspecting the physical cert stores

Inspeccionar atributos en el Administrador de certificados de Windows

Hay muchos atributos de un certificado que puedes ver al verlos con el MMC. Por ejemplo, es probable que desees seleccionar certificados específicos.

La manera más fácil de lograr esto es haciendo referencia al valor de la Número de Serie o la Huella de la extensión del certificado. Si el certificado fue firmado por una autoridad de certificación (CA), tendrá un número de serie al ser emitido. La Huella se calcula cada vez que se visualiza el certificado.

Puedes ver algunos de los atributos de un certificado abriéndolo en el MMC, como se muestra a continuación.

Inspecting a Windows certificate

Una característica importante a destacar es la presencia de claves privadas integradas. Los certificados en Windows también pueden tener una clave privada correspondiente. Estas claves privadas se almacenan en almacenes físicos correspondientes como archivos cifrados.

Para distinguir rápidamente un certificado con y sin una clave privada correspondiente, observa el icono del certificado. En el administrador de certificados de Windows, si el icono parece simplemente un trozo de papel con una cinta, no hay una clave privada correspondiente. Si un certificado tiene una clave privada, verás una llave en el icono del MMC, y verás una llave en la parte inferior de la pestaña General cuando abras el certificado.

Certificate without an embedded private key

Usando PowerShell

Al igual que con el MMC, también puedes ver y gestionar certificados con PowerShell. Primero, inspeccionemos los certificados en sus almacenes físicos (el registro y el sistema de archivos).

Por Almacén Físico

Usando el cmdlet Get-ChildItem de PowerShell, puedes enumerar todas las claves y valores dentro de la ruta de la clave del registro padre HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates\.

El siguiente comando enumerará todas las certificaciones del usuario actualmente conectado en la tienda lógica de Intermediate Certification Authorities.

Get-ChildItem -Path HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates\

Cada entrada en el Registro que ves corresponderá al valor de huella digital (Thumbprint) del certificado de una CA confiable y su certificado en la propiedad correspondiente. Puedes ver un ejemplo de salida a continuación.

Results of the installed certificates from the example commands, limited to the first 5 entries.

Otra tienda común es la tienda Personal. Tus certificados para esta tienda se encuentran en el sistema de archivos en lugar del Registro. En los comandos siguientes, mostraremos estas rutas físicas diferentes y sus propósitos.

Cada archivo en el directorio, devuelto por el comando a continuación, corresponde a un certificado instalado en la tienda personal del usuario actual.

Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Certificates\

Cada archivo devuelto en el siguiente comando es una referencia al objeto para una clave privada creada por el Proveedor de Almacenamiento de Claves (KSP). El nombre del archivo corresponde al Identificador de Clave del Sujeto del certificado. Cada clave privada que instales tendrá un archivo correspondiente añadido.

Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Keys\

Cada archivo en el directorio devuelto por el siguiente comando es el contenedor único para la clave privada cifrada creada por el KSP. No hay una relación directa entre el nombre del archivo y el certificado, pero el archivo es el objetivo del puntero en el comando anterior.

Get-ChildItem -Path $env:APPDATA\Microsoft\Crypto\Keys

Por Tienda Lógica

Dado que trabajar con certificados en sus rutas físicas es poco común, estarás trabajando con las tiendas lógicas para el resto de los ejemplos.

PowerShell puede acceder a las tiendas lógicas de Windows utilizando el Cert: PSDrive. El PSDrive Cert: mapea certificados a las tiendas físicas de manera similar a como lo hace el MMC.

Desafortunadamente, el MMC y el PSDrive Cert no etiquetan las tiendas lógicas de la misma manera. A continuación, puedes ver una tabla de comparación de las tiendas comunes y sus nombres tanto en el MMC como en el PSDrive Cert.

Cert: Certificates MMC
My Personal
Remote Desktop Remote Desktop
Root Trusted Root Certification Authorities
CA Intermediate Certification Authorities
AuthRoot Third-Party Root Certification Authorities
TrustedPublisher Trusted Publishers
Trust Enterprise Trust
UserDS Active Directory User Object
Selección de Certificados

Cuando trabajas con certificados, necesitarás una forma de filtrar y seleccionar certificados para realizar operaciones específicas. La mayoría de las veces, filtrarás y seleccionarás certificados según el valor de una extensión específica.

Para los siguientes ejemplos, debes comenzar enumerando todos los certificados instalados en la tienda de la autoridad de certificación raíz.

Get-ChildItem -Path Cert:\CurrentUser\Root\

Los objetos devueltos serán objetos de certificado que puedes utilizar en los ejemplos siguientes.

Las extensiones comunes ya están disponibles como propiedades de los objetos de certificado. En el siguiente ejemplo, estás utilizando Get-Member para listar todas las propiedades de los objetos devueltos.

Get-ChildItem -Path Cert:\CurrentUser\Root\ | Get-Member -MemberType Properties
Figure 9 – The properties available for the returned certificate objects.

Como puedes ver en la Figura 9, algunas de estas extensiones, como Issuer, son útiles para encontrar el certificado que estás buscando. Las extensiones proporcionan información sobre el certificado, como a quién se emitió, para qué se puede utilizar y cualquier restricción sobre él.

En casos de uso más complejos, querrás buscar certificados por otras extensiones, como el template de certificado utilizado. La dificultad radica en que los valores para estas extensiones se devuelven como un conjunto de enteros. Estos enteros corresponden a contenido codificado ASN.1.

Las ScriptProperties existentes en el objeto muestran ejemplos de cómo interactuar con ellos. En el siguiente comando, extraerás manualmente los usos clave para ver esta relación.

((Get-ChildItem -Path Cert:\CurrentUser\Root\ | select -First 1).Extensions | Where-Object {$_.Oid.FriendlyName -eq "Key Usage"}).format($true)

La novedad que introducimos en el comando anterior es el método de formato, que realiza la decodificación ASN.1. Le pasas un valor booleano (por ejemplo, $true) para identificar si deseamos que el objeto devuelto sea de una línea o de varias líneas.

Utilizarás el valor de la huella dactilar (Thumbprint) del certificado en la Figura 7 en el siguiente comando. El valor de la huella dactilar se establece como una variable de PowerShell y se utiliza para seleccionar el certificado específico en los comandos siguientes.

$thumb = "cdd4eeae6000ac7f40c3802c171e30148030c072"
Get-ChildItem -Path Cert:\CurrentUser\Root\ | Where-Object {$_.Thumbprint -eq $thumb}

Creación de certificados autofirmados con PowerShell

PowerShell puede crear certificados autofirmados utilizando el cmdlet New-SelfSignedCertificate. Los certificados autofirmados son útiles para pruebas, ya que te permiten generar un par de claves pública y privada sin el uso de una autoridad de certificación (CA).

Ahora crearemos un certificado autofirmado en las tiendas del Usuario Actual y de la Máquina Local para usar en ejemplos en los siguientes pasos.

En el siguiente ejemplo, PowerShell está generando un par de claves público y privado, un certificado autofirmado, e instalándolos en las tiendas de certificados correspondientes.

PS51> New-SelfSignedCertificate -Subject 'User-Test' -CertStoreLocation 'Cert:\CurrentUser\My'
PS51> New-SelfSignedCertificate -Subject 'Computer-Test' -CertStoreLocation 'Cert:\LocalMachine\My'

El uso de certificados autofirmados para servicios de producción no está recomendado, ya que todos los mecanismos basados en la confianza no existen.

Importación/Exportación de Certificados

La criptografía de clave pública se basa fundamentalmente en que la clave pública sea ampliamente accesible. Dado este principio, es necesario contar con formas estándar de compartir certificados de manera efectiva. Tan importante como esto es la seguridad de las claves privadas. Almacenar claves privadas en medios inaccesibles o con materiales de recuperación de desastres es una práctica común para ciertas claves privadas.

Ambos casos requieren formas de almacenar estos objetos criptográficos en formatos estándar. La exportación proporciona las funciones para almacenar estos objetos y garantizar que se utilicen formatos de archivo ampliamente aceptados. La importación le permite llevar los objetos criptográficos a los sistemas operativos Windows.

Uso del Administrador de Certificados de Windows (certmgr.msc

Exportar certificados desde el MMC es bastante sencillo. Para exportar un certificado sin una clave privada, haga clic en el certificado en el MMC, seleccione el menú Todas las tareas y luego en Exportar.

Durante la exportación, se le pedirá un formato de archivo como se muestra a continuación. Las opciones más comunes son DER o Codificado en Base-64.

Figure 10 – Exporting a certificate with no private key or one that is marked as not exportable.

Exportar Claves Privadas

Para exportar un certificado con una clave privada asociada, debe cumplir con dos criterios: la cuenta iniciada sesión debe tener permisos para la clave privada (solo para certificados de computadora) y la clave privada debe estar marcada como exportable.

Para verificar los permisos de las claves privadas de una computadora local, puede seleccionar un certificado con una clave privada, elegir Todas las tareas, y Gestionar claves privadas desde el MMC de Certificados. La ventana de diálogo que se abre muestra las entradas de control de acceso para las claves privadas.

The Basic Security Property Page for the private keys of a certificate with the Subject of ServerName.

Cuando se cumplen estos dos o tres requisitos previos, puede seleccionar un certificado, hacer clic en Todas las tareas y luego en Exportar, igual que lo haría con un certificado que solo tiene una clave pública. Cuando lo exporta, ahora debería tener la opción de seleccionar Sí, exportar la clave privada, como se muestra a continuación.

Certificate Export Wizard with exportable private key.

Cuando exporta una clave privada en Windows, solo puede guardar el archivo como PFX. Estos tipos de archivo y formatos de codificación se detallan extensamente en esta publicación.

Para los ajustes restantes que se muestran en el asistente de exportación, puede utilizar los valores predeterminados. La siguiente tabla es una descripción rápida de cada uno.

Setting Description
Including all certificates in the certification path if possible Helps with portability of certificate issuers, and includes all pertinent public keys in the PFX
Delete the private key if the export is successful Removes the private key from the file and has few common use cases, but one example is to test access to private keys
Export all extended properties Will include any extensions within the current certificate, these relate to the certificates [specific settings]() for Windows interfaces
Enable certificate privacy Normally only the private key will be encrypted in the exported PFX file, this setting encrypts the entire contents of the PFX file
Group or user names You can use a group or user security principal from Active Directory for encrypting the contents of the PFX file, but a password is the most portable option across legacy systems or computers not joined to the same domain

Importar Certificados

La función de importación es la misma para todos los tipos de archivo de certificado admitidos. La única diferencia es que si el archivo incluye una clave privada, puede “Marcar esta clave como exportable”, sobre lo cual leerá más adelante. Windows utilizará el Asistente para Importación de Certificados.

Figure 12 – Certificate Import Wizard with a PFX file.

Cuando use el Asistente para Importación de Certificados para un PFX, deberá proporcionar la contraseña utilizada para cifrar la clave privada. Aquí hay otro resumen de las opciones de importación.

Setting Description
Enable strong private key protection Requires a password for each access of a private key, be cautious of newer functions as they will not be supported in all software
Mark this key as exportable You should try to avoid using this setting on any end system, private keys should be treated similarly to storing passwords
Protect private key using [virtualization-based security] The setting provides more security functionality for protecting private keys from advanced malware attacks
Include all extended properties Relates to the same Windows-specific settings discussed as with exporting

Los certificados de firma de código PowerShell son un buen caso de uso para la protección fuerte de la clave privada.

La colocación automática de certificados puede ser algo de lo que hay que tener precaución. Es probable que obtenga los mejores resultados seleccionando manualmente la tienda de certificados.

Usando PowerShell

Ahora, con PowerShell, exporta uno de los certificados autofirmados que creaste anteriormente. En el ejemplo se utiliza el Usuario Actual, pero puedes usar cualquiera.

A continuación, estás seleccionando un certificado en la tienda lógica Personal del Usuario Actual que fue autofirmado, lo que significa que el emisor coincide con el sujeto.

$certificate = Get-Item (Get-ChildItem -Path Cert:\CurrentUser\My\ | Where-Object {$_.Subject -eq $_.Issuer}).PSPath

Ahora que has seleccionado un certificado, puedes utilizar el comando Export-Certificate para guardar un archivo codificado en DER usando el siguiente comando.

Export-Certificate -FilePath $env:USERPROFILE\Desktop\certificate.cer -Cert $certificate

Ahora veamos cómo exportar también la clave privada. A continuación, estás verificando que el certificado que seleccionaste tenga una clave privada; si esto no devuelve verdadero, entonces es probable que el comando Get-Item haya seleccionado el certificado incorrecto.

$certificate.HasPrivateKey

A continuación, establecerás una contraseña para usarla al cifrar la clave privada. Luego, exporta el certificado seleccionado a un archivo PFX y utiliza la contraseña que ingresaste anteriormente para cifrar el archivo.

$pfxPassword = "ComplexPassword!" | ConvertTo-SecureString -AsPlainText -Force
Export-PfxCertificate -FilePath $env:USERPROFILE\Desktop\certificate.pfx -Password $pfxPassword -Cert $certificate

De manera similar a la exportación, hay dos comandos. Uno para importar certificados y otro para importar archivos PFX.

A continuación, el comando Import-Certificate importa el archivo codificado en DER que exportaste anteriormente a la tienda Personal del Usuario Actual.

Import-Certificate -FilePath $env:USERPROFILE\Desktop\certificate.cer -CertStoreLocation Cert:\CurrentUser\My

Supongamos que también deseas instalar la clave privada de ese certificado.

$pfxPassword = "ComplexPassword!" | ConvertTo-SecureString -AsPlainText -Force
Import-PfxCertificate -Exportable -Password $pfxPassword -CertStoreLocation Cert:\CurrentUser\My -FilePath $env:USERPROFILE\Desktop\certificate.pfx

Ten en cuenta que la contraseña debe ser un String Seguro. Además, si estás importando a la tienda de la Máquina Local (por ejemplo, Cert:\LocalMachine\), necesitarás ejecutar el comando desde un símbolo del sistema de Administrador elevado.

En el ejemplo anterior, también utilizas el parámetro Exportable con el comando, marcando la clave privada como exportable en el futuro. El valor predeterminado es que no sea exportable. Las claves privadas exportables son otra consideración de seguridad, y merecen un mayor enfoque sobre cómo asegurarlas.

También hay muchas otras cosas que hacer con certificados en Windows, así que deberías explorar más.

Eliminar Certificados con PowerShell

Cuando eliminas certificados, debes tener en cuenta que no hay Papelera de Reciclaje. Una vez que eliminas un certificado, se ha ido. Esto significa que es crítico confirmar que estás eliminando el certificado correcto validando un identificador único, como el número de serie o el valor de la extensión Thumbprint.

De manera similar al ejemplo anterior, en el siguiente comando seleccionamos un certificado autofirmado de la tienda Personal del Usuario Actual.

$certificate = Get-Item (Get-ChildItem -Path Cert:\CurrentUser\My\ | Where-Object {$_.Subject -eq $_.Issuer}).PSPath

A continuación, puedes ver las propiedades de Thumbprint, número de serie y Asunto del certificado seleccionado para asegurarte de que sea el certificado que pretendes seleccionar.

$certificate.Thumbprint
$certificate.SerialNumber
$certificate.Subject

Verifique si ha seleccionado el certificado correcto que desea eliminar.

El siguiente comando elimina todos los objetos de certificado seleccionados, utilícelo con precaución. Al pasar el objeto $certificate a través del canal a la cmdlet Remove-Item en el siguiente comando, eliminará todo el contenido del certificado sin ninguna confirmación de validación.

$certificate | Remove-Item

Resumen

A lo largo de este artículo, ha trabajado con certificados en Windows, aprendiendo cómo acceder a ellos y algunas herramientas para usar al trabajar con ellos. Hay mucho más por explorar en este tema, incluyendo cómo asociar certificados instalados con servicios específicos, o incluso cómo implementar una Infraestructura de Clave Pública (PKI) privada mediante la implementación de sus propias Autoridades de Certificación (CA).

Lecturas adicionales

Source:
https://adamtheautomator.com/windows-certificate-manager/