Эта статья позволит разобраться, как администраторы могут управлять 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_USER\Software\Microsoft\Terminal Server Client\Servers\). Если вы скрыли уведомление о невозможности проверить подлинность RDP сервера, чтобы сбросить настройки, удалите ключ с отпечатком сертификата из реестра.
Как вручную установить (заменить) SSL сертификат для RDP?
Как определить какой SSL сертификат привязан и используется сейчас для RDP? Откройте консоль PowerShell и выполните:
(Get-CimInstance -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -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:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-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:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations, параметр TemplateCertificate) или командой PowerShell:
Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices|select SSLCertificateSHA1Hash
Подписываем 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. уже все шаблоны перепробовал