Эта статья позволит разобраться, как администраторы могут управлять SSL/TLS сертификатами, которые используются для защиты RDP подключений в Windows. Мы рассмотрим, как заменить самоподписанный TLS сертификат RDP на доверенный сертификат. Если у вас развернут собственный центр сертификации (Certificate Authority, CA), на нем можно настроить специальный шаблон для выпуска RDP сертификатов, а через GPO можно автоматически выпускать и привязывать SSL/TLS сертификаты к службе Remote Desktop Services.
Предупреждение о самоподписанном сертификате RDP
По умолчанию в Windows для защиты RDP сессии генерируется самоподписанный сертификат. При первом подключении к RDP/RDS хочту через клиент mstsc.exe, у пользователя появляется предупреждение:
Не удалось проверить подлинность удаленного компьютера из-за проблем с сертификатом безопасности. Ошибка сертификата: сертификат выдан не имеющим доверия центром сертификации.
Чтобы продолжить установление RDP подключении пользователь должен нажать кнопку Да. Чтобы RDP предупреждение не появлялось каждый раз, можно включить опцию Больше не выводить запрос о подключениях к этому компьютеру.

В этом случае отпечаток RDP сертификата будет сохранен на клиенте в параметре CertHash в ветке реестра с историей RDP подключений (HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientServers). Если вы скрыли уведомление о невозможности проверить подлинность RDP сервера, чтобы сбросить настройки, удалите ключ с отпечатком сертификата из реестра.

Как вручную установить (заменить) SSL сертификат для RDP?
Как определить какой SSL сертификат привязан и используется сейчас для RDP? Откройте консоль PowerShell и выполните:
(Get-CimInstance -class "Win32_TSGeneralSetting" -Namespace rootcimv2terminalservices -Filter "TerminalName='RDP-tcp'").SSLCertificateSHA1Hash
Команда вернет отпечаток (thumbprint) сертификата, который сейчас назначен для RDP.

Откройте консоль управления сертификатами компьютера ( certlm.msc ) и перейдите в раздел Remote Desktop -> Certificates. Отройте свойства сертификата, перейдите на вкладку Details и проверьте отпечаток сертификата (поле Thumbprint) соответствует тому, которое вы получили в консоли.

Если вы получили сторонний доверенный SSL сертификат (это может быть сертификат коммерческого CA или бесплатный Let’s Encrypt сертификат), можно заменить им самоподписанный сертификата RDP.
Вам понадобится сертификат в формате PFX (с закрытым ключом), который нужно импортировать в Personal хранилище сертификатов компьютера. В моем случае это сертификат Let’s Encrypt, который уже выпущен для IIS через утилиту WACS под Windows (сертификат находится в секции Web Hosting -> Certificates).
Скопируйте сертификат в секцию Personal -> Certificates. Скопируйте значение отпечатка сертификата.

Чтобы заменить старый сертификат RDP на новый, вставьте скопированный отпечаток SSL сертификата в следующую команду:
$certHash = "bdbb88ce067de27743745ad7e7aa51ff13c2bcf8"
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" -Name "SSLCertificateSHA1Hash" -Value $certHash
Чтобы применить новые настройки, перезапустите службу:
Restart-Service -Name TermService -Force
Затем подключитесь к RDP хосту еще раз, щелкните по замочку в верхней панели и убедитесь, что теперь для RDP используется доверенный TLS сертификат.

Создаем шаблон RDP сертификата в центре сертификации (CA)
Если у вас развернут корпоративный центр сертификации Microsoft Certificate Authority (CA), можно настроить автоматическую выдачу доверенных SSL/TLS сертификатов для RDP службы на всех компьютерах и серверах в Windows домене.
Создадим на CA новый тип шаблона сертификата для RDP/RDS серверов.
- Запустите консоль Certificate Authority и перейдите в секцию Certificate Templates;
- Сделайте копию шаблона сертификата Computer (Certificate Templates -> Manage -> Computer -> Duplicate);

- На вкладке General укажите имя нового шаблона сертификата – RDPTemplate. Убедитесь, что значение поля Template Name полностью совпадает с Template display name;

- На вкладке Compatibility укажите минимальную версию клиентов в вашем домене (например, Windows Server 2016 для CA и Windows 10 для клиентов). Тем самым будут использоваться более стойкие алгоритмы шифрования;
- Теперь на вкладке Extensions в политике приложений (Application policy) нужно ограничить область использования такого сертификата только для Remote Desktop Authentication (укажите следующий object identifier — 1.3.6.1.4.1.311.54.1.2).

- В настройках шаблона сертификата (Application Policies Extension) удалите все политики кроме Remote Desktop Authentication

- Чтобы использовать данный шаблон RDP сертификатов на контролерах домена, откройте вкладку Security, добавьте группу Domain Controllers и включите для нее опцию Enroll и Autoenroll

- Сохраните шаблон сертификата;
- Теперь в оснастке Certificate Authority, щёлкните по папке Certificate Templates, выберите New -> Certificate Template to Issue -> выберите созданный шаблон RDPTemplate.

Настройка групповой политики для выдачи RDP сертификатов
Теперь нужно настроить доменную GPO, которая будет автоматически назначать RDP сертификат компьютерам/серверам согласно настроенного шаблона.
- Откройте консоль управления доменными групповыми политиками gpmc.msc, создайте новый объект GPO и назначьте его на OU с RDP/RDS серверами или компьютерами, для которых нужно автоматически выдавать TLS сертификаты для защиты RDP.
- Перейдите в раздел GPO: Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Security. Включите политику Server Authentication Certificate Template. Укажите имя шаблона CA, который вы создали ранее (RDPTemplate);

- Затем в этом же разделе GPO включите политику Require use of specific security layer for remote (RDP) connections и установите для нее значение SSL;

- Для автоматического продления RDP сертификата, перейдите в раздел GPO Computer configuration -> Windows settings -> Security Settings -> Public Key Policies и включите политику Certificate Services Client – Auto-Enrollment Properties. Выберите опции “Renew expired certificates, update pending certificates and remove revoked certificates” и “Update certificates that use certificate templates”;

-
- Если вы хотите, чтобы клиенты всегда проверяли сертификат RDP сервера, нужно включить политику Configure Authentication for Client = Warn me if authentication fails (секция GPO Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Settings -> Remote Desktop Connection Client);
- Если нужно, можете через политики файервола открыть входящий RDP порт TCP/UDP 3389;
Осталось обновить политики на клиенте, запустить консоль сертификатов компьютера (Certlm.msc), и проверить, что в разделе Personal -> Certificates появился сертификат для Remote Desktop Authentication, выданный вашим CA.

Для применения нового RDP сертификата, перезапустите службу Remote Desktop Services:
Get-Service TermService -ComputerName msk-dc01| Restart-Service –force –verbose
Теперь при RDP подключении к серверу перестанет появляться запрос на доверие сертификату (чтобы появился запрос о доверии сертификату, подключитесь к серверу по IP адресу вместо FQDN имени сервера, для которого выпущен сертификат). Нажмите кнопку “Посмотреть сертификат”, перейдите на вкладку “Состав”, скопируйте значение поля “Отпечаток сертификата”.
Также можете в консоли Certification Authority в секции Issued Certificates проверить, что по шаблону RDPTemplate был выдан сертификат определённому Windows компьютеру/серверу. Также проверьте значение Thumbprint сертификата:

Теперь сравните полученные данные с отпечатком сертификата, который используется службой Remote Desktop Service. Вы можете посмотреть значение отпечатка сертификата службы RDS в реестре (ветка HKLM:SYSTEMCurrentControlSetControlTerminal ServerWinStations, параметр TemplateCertificate) или командой PowerShell:
Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace rootcimv2terminalservices|select SSLCertificateSHA1Hash 
Подписываем RDP файл и добавляем отпечаток доверенного RDP сертификата
Если у вас отсутствует CA, но вы хотите, чтобы при подключении к RDP/RDS серверу у пользователей не появлялось предупреждения, вы можете добавить сертификат сервера в доверенные на компьютерах пользователей.
Как описано выше получите значение отпечатка (Thumbprint) RDP сертификата:
Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace rootcimv2terminalservices|select|select SSLCertificateSHA1Hash
Используйте этот отпечаток для подписывания .RDP файла с помощью RDPSign.exe:
rdpsign.exe /sha256 65A27B2987702281C1FAAC26D155D78DEB2B8EE2 "C:UsersrootDesktoprdp.rdp"
Теперь через GPO добавьте этот отпечаток сертификата в доверенные на компьютерах пользователей. Укажите отпечатки (через точку с запятою) в политике Specify SHA1 thumbprints of certificates representing trusted .rdp publishers (Указать отпечатки SHA1 сертификатов, представляющих доверенных издателей RDP) в секции Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Settings -> Remote Desktop Connection Client.

Чтобы работал прозрачных RDP вход без ввода пароля (RDP Single Sign On), нужно настроить политику Allow delegation defaults credential и указать в ней имена RDP/RDS серверов (см. статью).

Добавить комментарий