В этой статье мы покажем, как использовать доверенные SSL/TLS сертификаты для защиты RDP подключений к компьютерам и серверам Windows в домене Active Directory. Эти сертфикаты мы будем использовать вместо самоподписанных RDP сертификатов (у пользователей появляется предупреждение о невозможности проверки подлинности при подключению к RDP хосту с таким сертификатом). В этом примере мы настроим специальный шаблон для выпуска RDP сертификатов в Certificate Authority и настроим групповую политику для автоматического выпуска и привязки SSL/TLS сертификата к службе Remote Desktop Services.
Предупреждение о самоподписанном сертификате RDP
По умолчанию в Windows для защиты RDP сессии генерируется самоподписанный
сертификат. В результате при первом подключении к RDP/RDS серверу через клиента mstsc.exe, у пользователя появляется предупреждение:
Не удалось проверить подлинность удаленного компьютер из-за проблем с сертификатом безопасности. Ошибка сертификата: сертификат выдан не имеющим доверия центром сертификации.
Чтобы продолжить установление RDP подключении пользователь должен нажать кнопку Да. Чтобы RDP предупреждение не появлялось каждый раз, можно включить опцию “Больше не выводить запрос о подключениях к этому компьютеру».
При этом отпечаток RDP сертификата сохраняется на клиенте в параметре CertHash в ветке реестра с историей RDP подключений (HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\). Если вы скрыли уведомление о невозможности проверить подлинность RDP сервера, чтобы сбросить настройки, удалите ключ с отпечатком сертификата из реестра.
Создаем шаблон RDP сертификата в центре сертификации (CA)
Попробуем использовать для защиты RDP подключений доверенный SSL/TLS сертификат, выданный корпоративным центром сертификации. С помощью такого сертификата пользователь может выполнить проверку подлинности RDP сервера при подключении. Предположим, что у вас в домене уже развернут корпоративной центр сертификации (Microsoft Certificate Authority), в этом случае вы можете настроить автоматическую выдачу и подключение сертификатов всем компьютерам и серверам Windows в домене.
Н на вашем CA нужно создать новый тип шаблона сертификата для RDP/RDS серверов.
- Запустите консоль Certificate Authority и перейдите в секцию Certificate Templates;
- Сделайте копию шаблона сертификата Computer (Certificate Templates -> Manage -> Computer -> Duplicate);
- На вкладке General укажите имя нового шаблона сертификата – RDPTemplate. Убедитесь, что значение поля Template Name полностью совпадает с Template display name;
- На вкладке Compatibility укажите минимальную версию клиентов в вашем домене (например, Windows Server 2008 R2 для CA и Windows 7 для клиентов). Тем самым будут использоваться более стойкие алгоритмы шифрования;
- Теперь на вкладке Extensions в политике приложений (Application policy) нужно ограничить область использования такого сертификата только для Remote Desktop Authentication (укажите следующий object identifier — 1.3.6.1.4.1.311.54.1.2). Нажмите Add -> New, создайте новую политику и выберите ее;
- В настройках шаблона сертификата (Application Policies Extension) удалите все политики кроме Remote Desktop Authentication;
- Чтобы использовать данный шаблон RDP сертификатов на контролерах домена, откройте вкладку Security, добавьте группу Domain Controllers и включите для нее опцию Enroll и Autoenroll;
- Сохраните шаблон сертификата;
- Теперь в оснастке Certificate Authority, щёлкните по папке Certificate Templates, выберите New -> Certificate Template to Issue -> выберите созданный шаблон RDPTemplate.
Настройка групповой политики для выдачи RDP сертификатов
Теперь нужно настроить доменную политику, которая будет автоматически назначать 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:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations, параметр TemplateCertificate) или командой PowerShell:
Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices|select SSLCertificateSHA1Hash
Теперь, при подключении к удаленном столу любого сервера или компьютера, на который действует эта политика, вы не увидите предупреждения о недоверенном RDP сертификате.
Подписываем RDP файл и добавляем отпечаток доверенного RDP сертификата
Если у вас отсутствует CA, но вы хотите, чтобы при подключении к RDP/RDS серверу у пользователей не появлялось предупреждения, вы можете добавить сертификат в доверенные на компьютерах пользователей.
Как описано выше получите значение отпечатка (Thumbprint) RDP сертификата:
Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices|select|select SSLCertificateSHA1Hash
Используйте этот отпечаток для подписывания .RDP файла с помощью RDPSign.exe:
rdpsign.exe /sha256 65A27B2987702281C1FAAC26D155D78DEB2B8EE2 "C:\Users\root\Desktop\rdp.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 серверов (см. статью).
Здравствуйте.
Сертификаты выдаются, но теперь возникает ошибка:
«Не удалось проверить не был ли отозван сертификат»
Ошибка у внутреннего или внешнего клиента? Корневой сертфикат вашего CA на клиенте в доверенные добавлен? Порты не блокируются?
Такая же ошибка «Не удалось проверить не был ли отозван сертификат». Клиент в другом (недоверенном домене). Сертификат СА домена к котором сервер на клиент добавлен. Да он и ругается не на сертификат. А какие порты и куда должны быть открыты?
Ошибка A revocation check could not be performed for the certificate означает, что клиент не может проверить, что этот сертфикат был отозван.
Т.е. с клиента должен быть доступен ваш CA, адрес CRL (Certificate Revocation List) указан в поле CRL Distribution Point сертификата (там может быть LDAP адрес — скорее всего или URL). Т.е. по-хорошему нужно настраивать публикацию CRL через URL адрес (HTTP/HTTPS), причем он должен быть одинаковым для внутренних и внешних клиентов.
Ага, LDAP адрес там. А как публикацию CRL через URL (HTTP/HTTPS) настроить?
http
https нет смысла
в свойствах CA выбрать публикацию в папку, а ту папку нужно каким-то образом опубликовать в вебе
Подскажите, пожалуйста, а можно ли вообще отключить ssl для RDP? У меня проблемы с работой RDP на одном компьютере, хотел для теста отключить ssl совсем.
Можно попробовать через IISCrypto отключить TLS 1.0, TLS 1.1 и прочее. Но не уверен, что RDP будет работать. Проверьте, может и взлетит.
UPD. Попробуйте в политике
Require use of specific security layer for remote (RDP) connections
установить значениеRDP
Добрый день. Как можно сделать такую же настройку при отсутствии домена? Т.е. просто терминальный сервер и клиенты.
Ну, можно получить отпечаток самоподписанного SSL сертификата для RDP и добавить его в доверенные на клиентах.
Окей, попробую, спасибо
Не сталкивались, что выданные политикой данные сертификаты множаться в локальном хранилище компа при каждом рефреше политики?
Нет, RDP сертфикат в хранилище один. У вас может что-то с шаблоном сертфиката в CA не то? Частота обновления какая?
Здравствуйте! Как настроить так, чтобы данный сертификат устанавливался в раздел «Удаленный рабочий стол», а не в «Личное»?
В разделе «Удаленный рабочий стол» сертификат должен быть на сервере. На компьютере клиента его помещают в личное, либо в trusted root cert (но обычно это не совсем не в принципе не нужно)
С комерч. wildcard certificate стоит делать? Имена конечно совпадают.
Можно сделать чтоб запрашивал сертификат клиента с которого подключение тоже? (тут имена уже не совпадут с wildcard certificate) Например чтоб требовал весь ключ открытый и закрытый на клиенте.
Здравствуйте!
Имеем небольшую сеть, домен, AD, терминальный сервер.
AD имеет имя: ad01.root.domain.ru, где domain.ru реальный сайт который лежит у хостера.
Необходимо на терминальный сервер выпустить сертификат, чтобы удаленщики ходили еще безопаснее на него.
Хостер автоматически на domain,.ru каждые 90 дней выпускает сертификат Let’s Encrypt. Так же он может выпускать и wildcard. Можно ли в моей ситуации для выпуска сертификата на ТС использовать хостера? Создать поддомен root, далее еще поддомен ts и выпустить сертификат? Какие после этого действия и с кем нужно проделать, чтобы все заработало? В общем цель не париться с перевыпуском и компроментацией. Или же гораздо безопаснее использовать свой автономный CA? Не до конца понимаю тему сертификации…
Здравствуйте коллега! Добавил на новую ноду фермы rds сертификат в котором прописаны имена всех нод в т.ч. новой, но сертификат не применяется все равно, выдается самоподписной с именем ноды( Сертификат загружен в личные и в rdp, корневой сертификат так же загружен и имеется… В какую сторону стоит смотреть?
Установка SSL сертфиката на Windows RDP
Получить отпечаток сертфиката и установить его в personal хранлище компьютера.
Затем выполнить код:
$PATH = (Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices)
Set-WmiInstance -Path $PATH -argument @{SSLCertificateSHA1Hash="thumbprint"}
Добрый день.
Есть необходимость настроить удалённый доступ сотрудникам из дома к их компьютерам в офисе с аутентификацией по сертификатам. Сеть на домене AD . Установил RDG и Центр сертификации (AD CS). Создал корневой сертификат центра сертификации. Т.к. есть требования ФСБ по ГОСТ-шифрованию, то на сервере установил Крипто-Про и в параметрах шифрования указал шифрование по алгоритмам ГОСТ. При импортировании корневого сертификата в RDG говорит, что «сертификат не предназначен для проверки подлинности сервера».
Не очень понятно, как это всё должно работать?
Есть ли у Вас на сайте мануал по такой задаче?
Мануал для PDP по ГОСТ занимает 8 страниц для одностороннего TLS. Это тема отдельной статьи.
Назначение серта не то (OID не тот)
RDP сертфикат не повлияет на безопасность сессии как таковой, но повлияет на безопасность и удобство подключеня пользователей
Возможна замена сертификата RDP на другой сертификат. Например, если у вас для IIS усановлен Lets Encrypt сертификат, можно исопльзовать его для шифрования RDP. При этом не будет появляться сообщение о самоподписанном RDP сертификате.
1) Получить отпечаток сертификата, который вы хотите исопльзовать для RDP:
Get-ChildItem "Cert:\LocalMachine\My"
Скопировать отпечаток сертификата. Например, A6EDEB7CCA6E31B517EF5A5973E3D368F81B97D8
2) Заменить сертификат, исопльзуемый для RDP на другой сертификат (указывается отпечаток сертификата):
$path = (Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'").__path
Set-WmiInstance -Path $path -argument @{SSLCertificateSHA1Hash="A6EDEB7CCA6E31B517EF5A5973E3D368F81B97D8"}
Кто-нибудь сталкивался с такой проблемой. Выпускаю сертификат из CA, устанавливаю на машину, но при перезагрузке службы сертификат не подходит и создаётся самоподписный и устанавливается на RDP. уже все шаблоны перепробовал