Adam the Automator

Si ya está ejecutando comandos remotos con PowerShell Remoting (PSRemoting), sabe lo conveniente que es la función. Puede conectarse a uno o más equipos remotos y administrarlos como si fueran locales. PSRemoting depende de la Administración Remota de Windows (WinRM) para que esto suceda, y si no está utilizando WinRM a través de SSL, es posible que se esté abriendo a algunos problemas de seguridad.

En este tutorial práctico, aprenderá cómo configurar Windows en el cliente y el servidor para usar WinRM a través de HTTPS (SSL) y cómo usar certificados para autenticarse al usar WinRM a través de HTTPS.

Tabla de Contenidos

Requisitos previos

Si desea seguir este tutorial, asegúrese de tener lo siguiente:

  • Una máquina Windows 7+ o Server 2008 R2 para servir como máquina cliente. Este tutorial utilizará Windows 10.
  • Una máquina Windows 7+ o Server 2008 R2 + para servir como máquina servidor. Este tutorial utilizará Windows Server 2019.
  • Acceso a una cuenta administrativa local o a una cuenta con derechos administrativos locales en los equipos cliente y servidor.
  • Configuración de una Infraestructura de Clave Pública (PKI) de Servicios de Certificados de Active Directory (ADCS). Ayudaría si implementara ADC para implementaciones de producción, pero es opcional para este tutorial y pruebas. El tutorial asumirá que la PKI está configurada como una CA empresarial o independiente.

¿Por qué usar WinRM sobre SSL?

PSRemoting, listo para usar, utiliza WinRM y le permite administrar máquinas cliente de forma remota. Una vez que PSRemoting establece una sesión a través de WinRM, encripta toda la comunicación del cliente al servidor. Además, el procedimiento de configuración para implementar PSRemoting sin HTTPS es bastante sencillo.

Si PSRemoting ya encripta la comunicación de sesión, ¿por qué pasar por la molestia de configurar algo como ADC y administrar certificados cuando ya está encriptado?

Porque durante el proceso de autenticación, las credenciales se pueden enviar en formatos inseguros dependiendo del tipo de autenticación utilizado.

Una de las formas más fáciles de hacer que el PSRemoting sea más seguro es usar WinRM a través de HTTPS en lugar de HTTP. HTTPS encierra todo el flujo de conexión, incluida la autenticación dentro de la capa de cifrado que WinRM ya utiliza. HTTPS también proporciona simultáneamente una forma de validar que el servidor al que se está conectando sea lo que cree que es.

Configurar WinRM con un Certificado Autofirmado

Pasemos ahora a las demostraciones. Para el primer truco, aprenderás a configurar la comunicación encrypt PSRemoting con WinRM a través de SSL a través de un certificado autofirmado.

El uso de un certificado autofirmado es una excelente manera de configurar un entorno de prueba sin preocuparse por una PKI como los ADC. Cuando se utiliza un certificado autofirmado, se genera un certificado que firma el propio servidor, que básicamente da fe de sí mismo.

Los certificados existen para realizar normalmente dos tareas: autenticar una conexión y cifrarla. El uso de un certificado autofirmado solo implementa este último. Para validar la identidad de un servidor, siempre debe usar certificados proporcionados por PKI. Los certificados proporcionados por PKI proporcionan una única fuente de confianza, en lugar de tener que confiar en cada certificado autofirmado de forma manual e individual.

Configurar WinRM a través de SSL con un certificado autofirmado requiere cuatro pasos de alto nivel:

  1. Creación del certificado autofirmado en la máquina de destino.
  2. Configurar el servidor web WinRM del servidor (receptor) para que use el certificado autofirmado para la autenticación.
  3. Abrir los puertos apropiados en el firewall de Windows de la máquina de destino.
  4. Ejecutar un comando para iniciar una conexión remota en el cliente mediante un cmdlet de PowerShell como Enter-PSSession.

Ahora repasemos cada uno de los pasos.

Creación de 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é en ServerB con una consola de Windows PowerShell abierta como administrador, ejecute el cmdlet New-SelfSignedCertificate como se muestra a continuación. Ejecutar el siguiente comando genera un certificado para ServerB.domain.com en el almacén de certificados personales de la máquina local.

New-SelfSignedCertificate -Subject 'CN=ServerB.domain.com' -TextExtension '2.5.29.37={text}1.3.6.1.5.5.7.3.1'
Creación de un certificado autofirmado.
Creación de un certificado autofirmado.

El parámetro Subject debe ser el nombre de dominio completo del servidor. WinRm utiliza el sujeto para validar la identidad del servidor.

Incluso si el servidor está en un grupo de trabajo, proporcione siempre un nombre de dominio, p. ej., domain.com o laboratorio.local. Cuando se conecta a la máquina de destino, el nombre DNS al que se conecta debe coincidir exactamente con este nombre de sujeto, ya que la conexión fallará.

El TextExtension le permite definir el uso de la clave del certificado (2.5.29.37), que define para qué se puede usar el certificado. Defina el uso de claves para la autenticación del servidor ({text}1.3.6.1.5.5.7.3.1) para garantizar que el certificado solo se pueda usar para autenticar la identidad de un servidor.

Después de ejecutar New-SelfSignedCertificates, devolverá la huella digital del certificado que generó. Guarde esto como lo necesitará para el siguiente comando.

Configurar el receptor WinRM

Una vez que haya creado el certificado autofirmado en el servidor, configure el receptor WinRM para comenzar a usar ese certificado para la autenticación. Para ello, utilice el comando winrm create como se muestra a continuación.

El Address=* del siguiente comando informa al receptor que escuche en cualquier dirección IP configurada en el servidor. Si el servidor tiene varias direcciones IP configuradas, puede definir una dirección IP específica aquí.

Asegúrese de reemplazar el marcador de posición <cert thumbprint here> con la huella digital devuelta en el último paso.

winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="ServerB.domain.com"; CertificateThumbprint="<cert thumbprint here>"}'
Creación de un oyente WinRM con certificado autofirmado.
Creación del receptor WinRM con certificado autofirmado.

Abrir el puerto de firewall SSL de WinRM

A continuación, si utiliza el firewall de Windows, tendrá que permitir el tráfico HTTPS que entra en el servidor a través del puerto HTTPS predeterminado 5986.

Abra el puerto de firewall para WinRM a través de HTTPS mediante PowerShell ejecutando el siguiente comando.

$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System'}New-NetFirewallRule @FirewallParam

Conectarse al servidor a través de SSL

Ahora ha configurado el servidor remoto de Windows para aceptar conexiones WinRM a través de SSL. En este momento, vuelve al cliente e inicia los comandos de PSRemoting que quieras probar. Por ejemplo, puede probar el cmdlet Enter-PSSession o Invoke-Command . Solo que ahora, se conecta un poco diferente que con la conexión HTTP predeterminada.

La conexión a través de HTTPS normalmente requiere un único parámetro UseSSL. Este parámetro le indica al comando que busque un receptor HTTPS WinRM frente a un receptor HTTP, como lo haría de forma predeterminada. El parámetro UseSSL está disponible en más comandos de PSRemoting.

Para realizar pruebas, ejecute Enter-PSSession proporcionando el FQDN del servidor definido por el sujeto del certificado autofirmado, un objeto PSCredential para definir el nombre de usuario y la contraseña y, por último, el parámetro conmutador UseSSL.

Enter-PSSession -ComputerName ServerB.domain.com -Credential (Get-Credential) -UseSSL

Si ejecuta el comando anterior, recibirá un mensaje de error ya que ha configurado el receptor WinRM en el servidor para usar un certificado autofirmado. Siempre que el cliente PSRemoting intente autenticarse en el servidor, intentará validar el certificado, pero no podrá. Un certificado autofirmado no tiene una cadena de confianza que el comando pueda seguir y falla.

Verificación de confianza de autoridad de certificación fallida con certificado autofirmado.
Comprobación de confianza de autoridad de certificación fallida con certificado autofirmado.

Para conectarse al servidor con un certificado autofirmado, debe anular la comprobación de confianza del certificado. Puede hacerlo creando una PSSessionOption llamada SkipCACheck con el cmdlet New-PSSessionOption y pasándola al comando como se muestra a continuación.

$PSSessionOption = New-PSSessionOption -SkipCACheckEnter-PSSession -ComputerName ServerB -Credential (Get-Credential) -SessionOption $PSSessionOption -UseSSL

Puede definir muchos objetos PSSessionOption diferentes para agregar opciones para la conexión remota que no se incluyen directamente en el cmdlet Enter-PSSession.

Intente conectarse de nuevo y PowerShell debería solicitarle credenciales. Una vez proporcionado, ahora debe conectarse al servidor con WinRM a través de SSL.

Configurar WinRM con un certificado firmado por una CA

Si tiene la intención de usar PSRemoting con WinRM en producción y desea permanecer lo más seguro posible, debe centrarse en WinRM sobre SSL mediante un certificado firmado por una entidad de certificación (CA).

Los certificados firmados por CA mantienen una cadena de confianza y son más seguros que los simples certificados autofirmados 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 una CA es con ADC. Con ADC, puede implementar certificados en dispositivos y configurar WinRM para que use esos certificados.

Este tutorial asumirá que ya tiene ADC configurados y funcionando en su entorno.

Para una configuración rápida, puede seguir la documentación de Microsoft, pero para una implementación de producción, debe investigar mucho la configuración, ya que una autoridad de certificación está en el centro de los esfuerzos de cifrado de una organización.

Creación de la solicitud de certificado

El primer paso para usar un certificado emitido por una CA es crear el certificado. Para crear el certificado, primero debe emitir una solicitud de certificado mediante una solicitud de firma de certificado (CSR). Una vez generado, este CSR se puede enviar a la CA para emitir el certificado.

Los pasos de esta sección funcionarán en las implementaciones de ADCS cuando se trate de una CA empresarial o una CA independiente. Si utiliza una CA empresarial integrada en AD, puede acelerar la inscripción de certificados sin seguir los pasos de esta sección mediante la inscripción automática de certificados o las plantillas de certificados.

Mientras esté en el servidor (Servidor en este tutorial), cree la CSR:

  1. Ejecute certlm.msc para abrir el administrador de certificados de Windows.

2. Haga clic con el botón derecho en la tienda Personal y seleccione Todas las tareas-> Operaciones avanzadas —> Crear solicitud personalizada.

3. Para este tutorial, deje todos los campos como predeterminados hasta que llegue a la página de información del certificado que se ve a continuación. Cuando llegue aquí, haga clic en el menú desplegable Detalles y seleccione Propiedades.

Creación de una solicitud de certificado personalizada.
Creación de una solicitud de certificado personalizada.

4. Haga clic en la pestaña Asunto y cambie el tipo a Nombre común.

5. Ahora ingrese el nombre de dominio completo del servidor si está unido a un dominio o solo el nombre de host si no lo está y haga clic en Agregar.

Especificar el asunto para la solicitud de certificado.
Especificando el asunto para la solicitud de certificado.

Tenga en cuenta que para usar con un oyente SSL de WinRM, debe usar el nombre común. Las otras opciones de la lista se pueden incluir, pero no son necesarias para esta implementación.

6. Haga clic en la pestaña Extensión.

7. Si no está utilizando la autenticación basada en certificados, que se tratará más adelante, expanda el encabezado uso de clave extendida y agregue Autenticación de servidor. Este tipo de uso de clave indica a Windows que el certificado debe usarse para autenticar un servidor. Otras opciones incluyen Autenticación de Cliente, Firma de Código y Cifrado de documentos.

8. Si desea configurar la autenticación basada en certificados, asegúrese de elegir la Autenticación de cliente, como se muestra a continuación.

Solicitar un certificado de autenticación de cliente.
Solicitar un certificado de autenticación de cliente.

9. A continuación, haga clic en la pestaña Clave privada y observe las opciones de clave. Cambie el tamaño de clave predeterminado de 1024 a al menos 2048 para reforzar la seguridad del par de claves.

También hay proveedores de cifrado más fuertes disponibles en Windows, pero es posible que tenga incompatibilidad con el software anterior.

10. Cierre la ventana Propiedades del certificado y guarde la configuración haciendo clic en Aceptar y en Siguiente para continuar con las indicaciones.

11. Ahora proporcione una ruta de salida para la solicitud de certificado donde pueda recuperarla más tarde y haga clic en Finalizar.

Una vez completado, debe tener un archivo de solicitud de certificado.

Solicitar un certificado

Una vez que haya creado la solicitud, ahora deberá enviar esa solicitud a su CA, que generará el certificado. Para hacer eso:

  1. Vaya a su servidor ADCS en http://<server nombre FQDN> / certsrv / certrqxt.áspid.
Página web de envío de solicitudes de certificado.
Página web de envío de solicitudes de certificado.

2. Abra el archivo de solicitud de certificado creado anteriormente con el bloc de notas y copie el texto del archivo de solicitud de certificado en el cuadro de solicitud. No se requiere ningún atributo adicional para este certificado.

3. Haz clic en Enviar. Esto enviará su solicitud a la CA. A continuación, debe mostrarle el ID de solicitud, que se requerirá más adelante. ¡Guarda esto! Lo necesitarás más tarde.

4. Ahora conéctese al servidor de CA que forma parte de su entorno ADCS mediante el Administrador de certificados de Windows en su equipo local o a través de RDP ejecutando certsrv.MSC.

5. Haga clic en Solicitudes pendientes.

Emisión de certificado de solicitud pendiente.
Emisión de certificado a partir de una solicitud pendiente.

6. Haga clic con el botón derecho en la solicitud pendiente, haga clic en Todas las tareas y haga clic en Problema. Esto aprobará la solicitud que acaba de enviar en función del ID de solicitud del paso anterior.

Inscribir el certificado

Ahora que ha emitido un certificado en la CA, es hora de inscribir el certificado en el servidor en el que está configurando WinRM. Conseguirlo:

  1. Desde el servidor en el que está configurando WinRM a través de SSL, vaya a http://<server nombre FQDN>/certckpn.áspid. Debería ver una única solicitud de certificado pendiente.
Estado de visualización de la solicitud de certificado pendiente.
Estado de visualización de la solicitud de certificado pendiente.

Puede recuperar el certificado público de una máquina diferente si es necesario, pero comenzar desde el servidor que está configurando para WinRM a través de HTTPS simplifica el proceso.

2. Seleccione la solicitud que envió de la lista y descargue la cadena de certificados. Debe descargar toda la cadena de certificados si el servidor que está configurando WinRM a través de HTTPS tiene su CA como servidor raíz.

Descarga de la cadena de certificados.
Cadena de certificados de descarga.

3. Abra el archivo de cadena de certificados. Debería ver un certificado para su servidor y cualquier certificado de autoridad de certificación superior en la cadena. Debajo de win2.laboratorio.int es el certificado solicitado, y WIN2-CA es el certificado de la CA que emitió el certificado para win2.lab.int.

Mostrar certificados dentro de la cadena de certificados.
Mostrando certificados dentro de la cadena de certificados.

4. Haga doble clic en uno de los certificados y, en el cuadro que se abre, haga clic en el botón Instalar certificado. Dado que este certificado será utilizado por el servidor y no por un usuario específico, cambie la opción a Máquina local.

Importación de certificados en el almacén de certificados de máquina local.
Importación de certificados en el almacén de certificados de máquina local.

5. Continúe con el mensaje dejando todo como predeterminado. Los valores predeterminados deben colocar el certificado en el almacén de Certificaciones Raíz de confianza.

6. Ahora repita los pasos 3-5 para cada uno de los otros certificados de la lista. Si tiene más de un certificado, asegúrese de que todos los demás certificados se coloquen en el almacén de Entidades de certificación intermedias.

Crear y configurar el receptor HTTPS de WinRM

Ahora que todos los certificados están instalados, es hora de configurar WinRM en el servidor para que use ese certificado para el receptor.

Con PowerShell abierto en el servidor WinRM:

  1. Ejecute el siguiente comando para configurar el receptor WinRM automáticamente. El comando winrm hace esto buscando en el almacén de certificados de la máquina local un certificado que coincida con los requisitos de WinRM.
winrm quickconfig -transport:https

2. El Firewall de Windows bloqueará el puerto HTTPS WinRM de 5986 de forma predeterminada. Para asegurarse de que el firewall permite el puerto de entrada 5986, ejecute el siguiente comando de PowerShell:

$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System' } New-NetFirewallRule @FirewallParam

Prueba de la conexión SSL WinRM

En este punto, ya está listo para conectarse. Con sus cmdlets PSRemoting favoritos, como Invoke-Command o Enter-PSSession, conéctese al servidor y utilice el parámetro UseSSL.

Enter-PSSession -ComputerName ServerB.domain.com -UseSSL -Credential (Get-Credential)

Asegúrese siempre de que el valor del parámetro ComputerName coincida exactamente con el nombre común proporcionado durante la creación del certificado. Si intenta conectarse a un nombre de host diferente o tal vez a la dirección IP del host, recibirá un error de discrepancia de certificado que causa un fallo de conexión.

Configurar la autenticación basada en certificados

A estas alturas, ya debería tener un receptor de WinRM configurado para usar HTTPS. Si es así, también puede usar un certificado de autenticación de usuario para autenticarse como usuario local en el servidor remoto. El uso de un certificado de usuario es uno de los más seguros, pero lleva un tiempo configurarlo. Encontrará que también es mucho trabajo repetido, 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 solicitó un certificado para la autenticación del Cliente como se describe en la sección Creación de la solicitud de certificado, siga leyendo:

Habilitación de la autenticación de certificados y asignación del Usuario en el servidor

  1. En el servidor, ejecute el comando Set-Item para permitir la autenticación basada en certificados.
Set-Item WSMan:\localhost\Service\Auth\Certificate -Value $true

2. A continuación, ejecute Get-ChildItem para ver el almacén de Entidades de certificación raíz de confianza y encontrar la huella digital de la CA que emitió el certificado de autenticación de cliente. Para ello, filtre los certificados por el asunto que contiene el nombre de su CA.

Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Subject -like 'CA-Name'}

3. Ejecute el siguiente comando, donde SubjectName es el sujeto del certificado de usuario que proporcionó al crear el certificado

CAThumbprint es la huella digital de la CA recopilada con el comando anterior y, a continuación, las credenciales solicitadas son el nombre de usuario y la contraseña del usuario local que se utilizarán para la autenticación basada en certificados.

New-Item WSMan:\localhost\ClientCertificate -Subject SubjectName -URI * -Issuer CAThumbprint -Credential (Get-Credential)

Probar la autenticación basada en certificados

Ahora que la asignación de certificado a usuario está configurada, use el certificado en el equipo cliente para autenticarse sin proporcionar credenciales.

En el cliente de PowerShell, obtenga la huella digital del certificado del cliente buscando en el almacén de certificados personales.

Get-ChildItem Cert:\CurrentUser\My

Ahora especifique la huella digital en el parámetro CertificateThumbprint en un comando PSRemoting como el siguiente.

Enter-PSSession -ComputerName ServerName -CertificateThumbprint <Thumbprint>

Tenga en cuenta que, dado que la autenticación basada en certificados solo se puede usar con un receptor HTTPS -UseSSL, está implícita, a diferencia de otros métodos de autenticación en los que debe especificar el uso de SSL.

Ahora que ha aprendido a configurar WinRM sobre SSL, obtenga más información sobre PSRemoting en nuestra publicación de PowerShell Remoting: The Ultimate Guide.

¿Desea obtener más información sobre PowerShell en general, incluido mucho sobre PSRemoting? ¡Echa un vistazo a PowerShell para Administradores de sistemas, el libro!

Leave a Reply