Si ya estás ejecutando comandos remotos con PowerShell Remoting (PSRemoting), sabes lo conveniente que es esta función. Puedes conectarte a una o más computadoras remotas y administrarlas como si estuvieran locales. PSRemoting depende de Windows Remote Management (WinRm) para que esto sea posible, y si no estás utilizando WinRM sobre SSL, podrías estar exponiéndote a algunos problemas de seguridad.
En este tutorial práctico, aprenderás cómo configurar Windows en el cliente y en el servidor para usar WinRM sobre HTTPS (SSL) y cómo utilizar certificados para autenticarse al usar WinRM sobre HTTPS.
Prerrequisitos
Si deseas seguir este tutorial paso a paso, asegúrate de tener lo siguiente:
- A Windows 7+ or Server 2008 R2 machine to serve as the client machine. This tutorial will use Windows 10.
- A Windows 7+ or Server 2008 R2+ machine to serve as the server machine. This tutorial will use Windows Server 2019.
- Acceso a una cuenta administrativa local o una cuenta con derechos administrativos locales en las máquinas del cliente y del servidor.
- Una infraestructura de clave pública (PKI) de Active Directory Certificate Services (ADCS) configurada. Sería útil implementar ADCS para implementaciones de producción, pero es opcional para este tutorial y las pruebas. El tutorial asumirá que la PKI está configurada como una CA empresarial o independiente.
¿Por qué usar WinRM sobre SSL?
PSRemoting, de forma predeterminada, utiliza WinRM y te permite administrar máquinas cliente de forma remota. Una vez que PSRemoting establece una sesión sobre WinRM, encripta toda la comunicación desde el cliente hacia el servidor. Además, el procedimiento de configuración para implementar PSRemoting sin HTTPS es bastante sencillo.
Si PSRemoting ya encripta la comunicación de la sesión, ¿por qué complicarse configurando algo como ADCS y administrando certificados cuando ya está encriptado?
Porque durante el proceso de autenticación, las credenciales pueden enviarse en formatos no seguros según el tipo de autenticación utilizado.
Una de las formas más sencillas de hacer que PSRemoting sea más seguro es utilizar WinRM sobre HTTPS en lugar de HTTP. HTTPS envuelve toda tu conexión, incluida la autenticación, dentro de la capa de encriptación que WinRM ya utiliza. HTTPS también proporciona simultáneamente una forma de validar que el servidor al que te estás conectando es realmente el que crees que es.
Configurando WinRM con un Certificado Auto-Firmado
Ahora, pasemos a las demostraciones. Para el primer truco, aprenderás cómo configurar la comunicación encriptada de PSRemoting con WinRM sobre SSL mediante un certificado auto-firmado.
Utilizar un certificado autofirmado es una excelente manera de configurar un entorno de prueba sin preocuparse por una infraestructura de clave pública (PKI) como ADCS. Cuando usas un certificado autofirmado, generas un certificado que el servidor firma por sí mismo, lo que básicamente respalda su propia identidad.
Los certificados existen generalmente para realizar dos tareas; autenticar una conexión y cifrarla. Utilizar un certificado autofirmado solo implementa la última. Para validar la identidad de un servidor, siempre debes usar certificados proporcionados por una PKI. Los certificados proporcionados por la PKI ofrecen una única fuente de confianza en lugar de tener que confiar manualmente en cada certificado autofirmado de manera individual.
Configurar WinRM sobre SSL con un certificado autofirmado requiere cuatro pasos principales:
- Crear el certificado autofirmado en la máquina de destino.
- Configurar el servidor web WinRM (escucha) para usar el certificado autofirmado para la autenticación.
- Abrir los puertos apropiados en el firewall de Windows de la máquina de destino.
- Ejecutar un comando para iniciar una conexión remota en el cliente mediante un cmdlet de PowerShell como
Enter-PSSession
.
Ahora, revisemos cada uno de los pasos.
Crear un certificado autofirmado
El primer paso es generar un certificado autofirmado en el servidor. Al conectarse, PSRemoting utilizará este certificado para cifrar toda la comunicación.
Mientras estés en ServerB con una consola de Windows PowerShell abierta como administrador, ejecuta el cmdlet New-SelfSignedCertificate
como se muestra a continuación. Al ejecutar el siguiente comando se genera un certificado para ServerB.domain.com en el almacén de certificados personales de la máquina local.

El parámetro Subject
debe ser el nombre de dominio completamente calificado del servidor. WinRM utiliza el sujeto para validar la identidad del servidor.
Incluso si el servidor está en un grupo de trabajo, siempre proporcione un nombre de dominio, por ejemplo, domain.com o lab.local. Al conectarse a la máquina de destino, el nombre DNS al que se conecta debe coincidir exactamente con este nombre de Sujeto, de lo contrario, la conexión fallará.
La TextExtension
te permite definir el uso de la clave del certificado (2.5.29.37
), que define para qué se permite utilizar el certificado. Define el uso de la clave para Autenticación del servidor ({text}1.3.6.1.5.5.7.3.1
) para asegurarte de que el certificado solo se pueda utilizar para autenticar la identidad de un servidor.
Después de que se ejecute
New-SelfSignedCertificates
, devolverá la huella digital del certificado que generó. Guarda esto ya que lo necesitarás para el siguiente comando.
Configurando el Escucha de WinRM
Una vez que hayas creado el certificado autofirmado en el servidor, configura el escucha de WinRM para comenzar a usar ese certificado para la autenticación. Para hacerlo, utiliza el comando winrm create
como se muestra a continuación.
El Dirección=*
en el comando a continuación indica al escucha que escuche en cualquier dirección IP configurada en el servidor. Si el servidor tiene múltiples direcciones IP configuradas, puedes definir una dirección IP específica aquí.
Asegúrate de reemplazar el marcador de posición
<cert thumbprint here>
con la huella digital devuelta en el último paso.

Apertura del puerto del firewall SSL de WinRM
A continuación, si usas el firewall de Windows, tendrás que permitir el tráfico HTTPS que llega al servidor a través del puerto HTTPS predeterminado 5986
.
Abre el puerto del firewall para WinRM sobre HTTPS utilizando PowerShell ejecutando el siguiente comando.
Conexión al servidor sobre SSL
Ahora has configurado el servidor remoto de Windows para aceptar conexiones de WinRM sobre SSL. En este momento, vuelve al cliente e inicia cualquier comando de PSRemoting que desees probar. Por ejemplo, podrías intentar el cmdlet Enter-PSSession
o Invoke-Command
. Solo que ahora te conectas un poco diferente que con la conexión HTTP predeterminada.
Conectarse a través de HTTPS normalmente requiere un solo parámetro UseSSL
. Este parámetro le indica al comando que busque un escuchador de WinRM HTTPS en lugar de un escuchador HTTP como lo haría por defecto. El parámetro UseSSL
está disponible en más comandos de PSRemoting.
Para probar, ejecute Enter-PSSession
proporcionando el FQDN del servidor según lo definido por el sujeto del certificado autofirmado, un objeto PSCredential para definir el nombre de usuario y la contraseña, y finalmente, el parámetro de cambio UseSSL
.
Si ejecuta el comando anterior, recibirá un mensaje de error ya que ha configurado el escuchador de WinRM en el servidor para usar un certificado autofirmado. Cuando el cliente de PSRemoting intenta autenticarse en el servidor, intentará validar el certificado, y no puede. Un certificado autofirmado no tiene una cadena de confianza que el comando pueda seguir y falla.

Para conectarse al servidor con un certificado autofirmado, debe anular la verificación de confianza del certificado. Puede hacerlo creando una opción de PSSession llamada SkipCACheck
utilizando el cmdlet New-PSSessionOption
y pasándolo al comando como se muestra a continuación.
Puede definir muchos objetos de PSSessionOption diferentes para agregar opciones a su conexión remota que no están incluidas directamente en el cmdlet
Enter-PSSession
.
Intente conectarse nuevamente y PowerShell ahora debería solicitarle credenciales. Una vez proporcionadas, ¡ahora debería conectarse al servidor con WinRM sobre SSL!
Configuración de WinRM con un certificado firmado por CA
Si tiene la intención de usar PSRemoting utilizando WinRM en producción y desea mantenerse lo más seguro posible, debe enfocarse en WinRM sobre SSL utilizando un certificado de autoridad de certificación (CA) firmado.
Los certificados firmados por CA mantienen una cadena de confianza y son más seguros que los certificados autofirmados simples porque validan la identidad del emisor del certificado.
Si se encuentra en un entorno de Active Directory, una de las formas más comunes de configurar un CA es con ADCS. Con ADCS, puede implementar certificados en dispositivos y configurar WinRM para usar esos certificados.
Este tutorial asumirá que ya tienes ADCS configurado y funcionando en tu entorno.
Para una configuración rápida, puedes seguir la documentación de Microsoft, pero para una implementación en producción, deberías investigar la configuración a fondo, ya que una autoridad de certificación es fundamental en los esfuerzos de cifrado de una organización.
Creación de la Solicitud de Certificado
El primer paso para utilizar un certificado emitido por una AC es crear el certificado. Para crear el certificado, primero debes emitir una solicitud de certificado utilizando un solicitud de firma de certificado (CSR). Una vez generado, este CSR puede enviarse a la AC para emitir el certificado.
Los pasos de esta sección funcionarán en implementaciones de ADCS, ya sea una CA empresarial o una CA independiente. Si estás utilizando una CA empresarial integrada en AD, puedes acelerar la inscripción de certificados sin pasar por los pasos de esta sección utilizando la autoinscripción de certificados o plantillas de certificados.
Mientras estés en el servidor (ServerB en este tutorial), crea el CSR:
- Ejecuta certlm.msc para abrir el administrador de certificados de Windows.
2. Haz clic derecho en el almacén Personal y selecciona Todas las tareas —> Operaciones avanzadas —> Crear solicitud personalizada.
3. Para este tutorial, deja todos los campos como predeterminados hasta que llegues a la página de Información del certificado que se muestra a continuación. Cuando llegues aquí, haz clic en el menú desplegable Detalles y selecciona Propiedades.

4. Haz clic en la pestaña Asunto y cambia el Tipo a Nombre común.
5. Ahora ingresa el nombre de dominio completo del servidor si está unido a un dominio o simplemente el nombre del host si no lo está y haz clic en Agregar.

Ten en cuenta que para usar con un listener SSL de WinRM, debes usar el nombre común. Las otras opciones en la lista pueden incluirse pero no son necesarias para este despliegue.
6. Haz clic en la pestaña Extensión.
7. Si no estás utilizando autenticación basada en certificados, que se cubrirá más adelante, amplía la cabecera de uso extendido de la clave y agrega Autenticación del servidor. Este tipo de uso de clave indica a Windows que el certificado debe usarse para autenticar un servidor. Otras opciones incluyen Autenticación del Cliente, Firma de Código y Cifrado de Documentos.
8. Si deseas configurar la autenticación basada en certificados, asegúrate de elegir Autenticación del Cliente, como se muestra a continuación.

9. A continuación, haz clic en la pestaña Llave Privada y observa las Opciones de Clave. Cambia el tamaño de clave predeterminado de 1024 a al menos 2048 para fortalecer la seguridad del par de claves.
También hay proveedores criptográficos más sólidos disponibles en Windows, pero puedes enfrentar incompatibilidades con software más antiguo.
10. Cierra la ventana de Propiedades del Certificado y guarda la configuración haciendo clic en Aceptar y luego en Siguiente para continuar con las indicaciones.
11. Ahora proporciona una ruta para guardar la solicitud de certificado donde puedas recuperarla más tarde y haz clic en Finalizar.
Una vez completado, deberías tener un archivo de solicitud de certificado.
Solicitando un Certificado
Una vez que hayas creado la solicitud, ahora deberás enviar esa solicitud a tu CA, que generará el certificado. Para hacerlo:
- Dirígete a tu servidor ADCS en http://<nombre del servidor FQDN>/certsrv/certrqxt.asp.

2. Abre el archivo de solicitud de certificado creado anteriormente con el Bloc de notas y copia el texto del archivo de solicitud de certificado en el cuadro de solicitud. No se requiere nada para Atributos Adicionales para este certificado.
3. Haz clic en Enviar. Esto enviará tu solicitud al CA. Luego debería mostrarte el ID de la solicitud, que se necesitará más adelante. ¡Guarda esto! Lo necesitarás después.
4. Ahora conéctate al servidor del CA que forma parte de tu entorno de ADCS usando el Administrador de certificados de Windows en tu computadora local o a través de RDP ejecutando certsrv.msc.
5. Haz clic en Solicitudes Pendientes.

6. Haz clic con el botón derecho en la solicitud pendiente, haz clic en Todas las Tareas, y haz clic en Emisión. Esto aprobará la solicitud que acabas de enviar basada en el ID de la solicitud del paso anterior.
Matriculando el Certificado
Ahora que has emitido un certificado en el CA, es hora de matricular el certificado en el servidor en el que estás configurando WinRM. Para hacerlo:
- Desde el servidor en el que estás configurando WinRM sobre SSL, navega a http://<nombre del servidor FQDN>/certckpn.asp. Deberías ver una única solicitud de certificado pendiente.

Puedes recuperar el certificado público desde una máquina diferente si es necesario, pero comenzar desde el servidor en el que estás configurando WinRM sobre HTTPS simplifica el proceso.
2. Selecciona la solicitud que enviaste de la lista y descarga la cadena de certificados correspondiente. Debes descargar la cadena de certificados completa si el servidor sobre el cual estás configurando WinRM a través de HTTPS tiene tu CA como servidor raíz.

3. Abre el archivo de la cadena de certificados. Deberías ver un certificado para tu servidor y cualquier certificado de autoridad superior en la cadena. A continuación, win2.lab.int es el certificado solicitado, y WIN2-CA es el certificado de la CA que emitió el certificado para win2.lab.int.

4. Haz doble clic en uno de los certificados y en la ventana que se abre, haz clic en el botón Instalar Certificado. Dado que este certificado será utilizado por el servidor y no por un usuario específico, cambia la opción a Máquina Local.

5. Continúa con la ventana emergente dejando todo como predeterminado. Los valores predeterminados deberían colocar el certificado en la tienda de Certificados de Autoridades de Confianza.
6. Ahora repite los pasos del 3 al 5 para cada uno de los otros certificados en la lista. Si tienes más de un certificado, asegúrate de que todos los demás certificados se coloquen en la tienda de Certificados de Autoridades Intermedias.
Crea y Configura el Escucha de WinRM sobre HTTPS
Ahora que todos los certificados están instalados, es el momento de configurar WinRM en tu servidor para utilizar ese certificado en el escucha.
Con PowerShell abierto en el servidor WinRM:
- Ejecute el siguiente comando para configurar automáticamente el escucha de WinRm. El comando
winrm
hace esto buscando en el almacén de certificados de la máquina local un certificado que coincida con los requisitos para WinRM.
2. Por defecto, el Firewall de Windows bloqueará el puerto HTTPS de WinRM 5986
. Para asegurarse de que el firewall permita el puerto de entrada 5986
, ejecute el siguiente comando de PowerShell:
Probando la Conexión SSL de WinRM
En este punto, estás listo para conectarte. Utilizando tus cmdlets favoritos de PSRemoting como Invoke-Command
o Enter-PSSession
, conéctate al servidor y utiliza el parámetro UseSSL
.
Asegúrate siempre de que el valor del parámetro
ComputerName
coincida exactamente con el nombre común proporcionado durante la creación del certificado. Si intentas conectarte a un nombre de host diferente o tal vez a la dirección IP del host, recibirás un error de coincidencia de certificado que causará un fallo en la conexión.
Configuración de la Autenticación Basada en Certificados
En este punto, ya deberías tener un escucha de WinRM configurado para usar HTTPS. Si es así, también puedes utilizar un certificado de autenticación de usuario para autenticarte como usuario local en el servidor remoto. Utilizar un certificado de usuario es uno de los métodos más seguros, pero lleva tiempo configurarlo. También descubrirás que es mucho trabajo repetitivo, ya que cada certificado es único para la máquina cliente individual.
La autenticación basada en certificados solo funciona con cuentas de usuario locales y no con usuarios de dominio.
Suponiendo que solicitaste un certificado para la autenticación del cliente según lo cubierto en la sección Creación de la Solicitud de Certificado, continúa leyendo:
Habilitando la Autenticación por Certificado y Asignando el Usuario en el Servidor
- En el servidor, ejecuta el comando
Set-Item
para permitir la autenticación basada en certificados.
2. A continuación, ejecuta Get-ChildItem
para buscar en el almacén de Autoridades de Certificación Raíz Confiables y encontrar el valor hash de la CA que emitió el certificado de autenticación del cliente. Para hacer esto, filtra los certificados por el sujeto que contiene el nombre de tu CA.
3. Ejecuta el siguiente comando donde el NombreDelSujeto
es el sujeto del certificado de usuario que proporcionaste al crear el certificado
El ValorHashCA
es el valor hash de la CA recopilado con el comando anterior, y luego se solicitan las credenciales de usuario local que se utilizarán para la autenticación basada en certificados.
Prueba de la Autenticación Basada en Certificados
Ahora que la asignación de certificado a usuario está configurada, usa el certificado en la máquina cliente para autenticar sin proporcionar credenciales.
En el cliente en PowerShell, obtén el valor hash del certificado del cliente buscando en el almacén de certificados Personales.
Ahora especifica el valor hash en el parámetro ValorHashCertificado
para un comando de PSRemoting como se muestra a continuación.
Tenga en cuenta que dado que la autenticación basada en certificados solo es utilizable con un escucha HTTPS, se da por implícito el uso de SSL con el parámetro
-UseSSL
, a diferencia de otros métodos de autenticación donde es necesario especificar el uso de SSL.
Próximos Pasos
Ahora que ha aprendido cómo configurar WinRM sobre SSL, obtenga más información sobre PSRemoting en nuestro artículo PowerShell Remoting: La Guía Definitiva ¡posteado!
¿Quiere aprender más sobre PowerShell en general, incluyendo mucho sobre PSRemoting? ¡Consulte PowerShell for Sysadmins, el libro!