Cómo proporcionar un certificado de servidor verificado para conexiones de Escritorio remoto (RDP) a Windows 10

15

Tenemos una máquina Windows 10 Pro en nuestra oficina que tiene un puerto abierto a Internet para las conexiones entrantes de escritorio remoto (un "host"). Está bien protegido por una contraseña compleja y un número limitado de intentos permitidos y solo TLS 1.1 o superior, pero no presenta un certificado SSL verificado externamente, solo el certificado autofirmado autofirmado que proporciona Remote Desktop Services, y esto nos da dos problemas:

  1. No podemos estar completamente seguros cuando nos conectamos de forma remota, realmente nos estamos conectando a esta máquina y no a alguna conexión secuestrada.
  2. Nuestro sitio falla la verificación de cumplimiento de PCI-DSS 3.1 (requerido porque utilizamos una máquina de tarjeta de débito / crédito en el punto de venta que se conecta a través de Internet). La verificación informa errores fatales en este puerto de escritorio remoto con conexión a Internet: 'Certificado autofirmado SSL' y 'Certificado SSL con nombre de host incorrecto'.

¿Cómo consigo que un equipo con Windows 10 Pro (o Windows 7/8 / 8.1 Pro) actúe como servidor / host para presentar un certificado SSL adecuado para la verificación de Escritorio remoto?

gogoud
fuente
1
Puede colocar el certificado autofirmado en el almacén de certificados de cada máquina que se conectará a esta máquina, de esa manera solo se confiará en ese certificado autofirmado. También puede obtener el certificado firmado por una CA y, de manera predeterminada, porque la CA es confiable, el certificado que el host desea usar será confiable. No podrá resolver sus problemas de conformidad con PCI-DSS 3.1 a menos que obtenga un certificado firmado por CA. Debes hacer eso.
Ramhound
Gracias @Ramhound, tienes toda la razón, necesito un certificado firmado por CA, ahora tengo uno.
gogoud
Relacionado -> serverfault.com/questions/444286/…
FreeSoftwareServers

Respuestas:

16

Puede configurar esta máquina host para usar y presentar su certificado SSL (existente, comprado) verificado externamente (las instrucciones probablemente también funcionen para Windows 8 y 8.1, pueden o no funcionar para Windows 7) (partes de esto basadas en un Microsoft KB 2001849 ):

Primero, debe haber comprado un certificado SSL verificado genuino.

Si tiene este certificado en un archivo de formato pkcs12 (p. Ej., Extensión pfx), puede ver la huella digital SHA1 usando Linux o Cygwin (así lo necesitará a continuación):

openssl pkcs12 -in mysite.pfx -nodes|openssl x509 -noout -fingerprint

Alternativamente, si tiene los archivos de certificado individuales en su servidor Linux en / etc / ssl (/etc/ssl/certs/mysite.crt, /etc/ssl/mysite.ca-bundle y /etc/ssl/private/mysite.key ) puede crear un archivo pfx y obtener la huella digital SHA1 así:

  1. Cree un archivo pfx para su certificado, si aún no tiene uno (aquí: mysite.pfx): establezca una buena contraseña cuando se le solicite:

    sudo openssl pkcs12  -export -out mysite.pfx -inkey /etc/ssl/private/mysite.pem -in /etc/ssl/certs/mysite.crt -certfile /etc/ssl/mysite.ca-bundle
    
  2. Mueva o copie este archivo pfx según sea necesario para que su máquina host de Windows pueda acceder a él.

  3. Vea la huella digital SHA1 de la clave (lo necesitará a continuación):

openssl x509 -in /etc/ssl/certs/mysite.crt -noout -fingerprint

Importe el archivo de formato pkcs12 (por ejemplo, pfx) en el almacén de certificados personales de la máquina host de Windows:

  1. Inicio> Ejecutar> mmc
  2. Archivo> Agregar Quitar complemento> Certificados> Agregar> Cuenta de computadora> Computadora local> Aceptar
  3. En la ventana de la izquierda, haga clic derecho en Certificados (Computadora local) Personal, elija Todas las tareas / Importar ...
  4. Localice el archivo pfx e impórtelo, le sugiero que por razones de seguridad no lo haga exportable.
  5. Al expandir sus Certificados personales, ahora debería ver 3 certificados, uno de los cuales es el certificado de su sitio (por ejemplo, mysite.com). Haga clic derecho en este certificado del sitio y haga clic derecho, elija Todas las tareas / Administrar claves privadas ...
  6. Agregue el usuario 'SERVICIO DE RED' solo con permiso de lectura (no Control total), luego aplique
  7. Cerrar mmc

Use regedit para agregar un nuevo valor binario llamado SSLCertificateSHA1Hash en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp. El valor que necesita es la huella digital SHA1 del certificado obtenido anteriormente: haga clic con el botón derecho en el nuevo valor, elija Modificar y luego escriba los códigos hexadecimales secuencialmente (sin dos puntos, espacios ni comas, las letras no distinguen entre mayúsculas y minúsculas). 20 pares de maleficios en total (40 caracteres).

Es posible que deba reiniciar la máquina host o reiniciar los Servicios de escritorio remoto (desde Services.msc) antes de que funcione.

Ahora, después de hacer una conexión de escritorio remoto a este host usando el nombre de sitio correcto (por ejemplo, mysite.com), debería ver un candado bloqueado en el lado izquierdo de la barra de conexión superior: al hacer clic en esto se muestra que la identidad del control remoto La computadora fue verificada. Un puerto que esté abierto desde Internet hasta este host ahora debe pasar la prueba de nombre de host PCI-DSS 3.1.

gogoud
fuente
Me gustaría votarte unos miles de veces. Funciona al 100%
Shockwaver
9

Estos son los pasos básicos que uso:

Obtenga un certificado válido para el host (no tiene que provenir de una CA externa, pero todas sus máquinas deben confiar en él). Asegúrese de que tenga el nombre de host correcto, tuve problemas con los certificados comodín.

Instale el certificado en el host, como:

certutil.exe -p myPassword -importPFX c:\mycert.pfx noExport

encuentre la huella digital del certificado, ya sea en la interfaz de usuario o en PowerShell:

$tp = (ls Cert:\LocalMachine\my | WHERE {$_.Subject -match "something unique in your certs subject field" } | Select -First 1).Thumbprint

ahora dígale a Escritorio remoto que use ese certificado:

& wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="$tp" 

no se requiere reiniciar

Peter Hahndorf
fuente
Mi certificado SSL comodín funcionó bien, pero aún así tuve que abrir MMC y Agregar permiso de servicio de red o no funcionaría.
FreeSoftwareServers
Pude importar certificados comodín en "Windows 10", así como en "Windows Server 2016" con el problema de que Windows Server no tiene certutil.exe. Eso no es gran cosa, ya que puede importar manualmente mycert.pfx a la tienda de certificados. Yo no tengo a MMC abierta y no añadió Permiso de servicio de red.
TMT
1

Mi cert viene con 2 archivos necesarios, domain.crty domain.ca-bundleY luego tengo a mi domain.keydesde la generación de la solicitud.

Así es como lo configuré usando una máquina virtual Linux para combinar los certificados y generar la huella digital y el CMD de Windows para configurar el host. Esto permite una secuencia de comandos completa de la configuración.

Las mayores diferencias entre la respuesta mía y @gogoud son:

  • No edito el registro. Lo intenté y no funcionó, lo uso a wmic /namespace:través de CMD prompt.
  • Diseñé la línea "Huella digital" en la máquina virtual Linux para eliminar todas las partes innecesarias de la huella digital y ponerla en el formato que Windows desea. (IE: sin dos puntos, sin palabras, solo la huella digital con letras minúsculas).
  • También escribí scripts para agregar NETWORK SERVICEpermisos.

Haga un directorio para trabajar y mueva los 3 archivos a él:

domain.ca-bundle  domain.crt  domain.key 

Crear clave de formato pfx:

sudo openssl pkcs12  -export -out domain.pfx -inkey *.key -in *.crt -certfile *.ca-bundle

Exporte SSLCertificateSHA1Hash / FingerPrint a un archivo TXT:

sudo openssl x509 -in *.crt -noout -fingerprint | sed -e 's/SHA1 Fingerprint=//g' | sed -e 's/://g' | tr '[:upper:]' '[:lower:]' > SSLCertificateSHA1Hash.txt

Importar certificado a Windows (Abrir solicitud CMD elevada):

  • Esto se puede seguir mediante el modificador "-p MyPassword"

    certutil.exe -importpfx C:\domain.pfx
    

Ahora agregue SSLCertificateSHA1Hash a RDP-Tcp a través de CMD (Aviso de CMD elevado):

set /p FingerPrint=<C:\SSLCertificateSHA1Hash.txt
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="%FingerPrint%"

Deberá agregar el usuario "Servicio de red" con permisos de "Solo lectura" ahora:

icacls.exe "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\*" /grant "NETWORK SERVICE":R

Reiniciar host:

 shutdown /r /t 5
FreeSoftwareServers
fuente