Гайд: Вход по RDP через сертификат: настройка маппинга в AD, NLA и TLS на Windows Server
Ниже представлен подробный гайд по настройке входа по RDP с использованием клиентских сертификатов. Метод опирается на стандартную корпоративную архитектуру: NLA (Network Level Authentication) + маппинг сертификатов в Active Directory + TLS 1.2/1.3.
Важно:
Нативный RDP не принимает произвольные сертификаты "как в SSH". Аутентификация работает через механизм Smart Card / Certificate Mapping, где сертификат привязывается к учётной записи AD. Для внешних подключений обычно используется RD Gateway, но базовая настройка внутри домена идентична.
Требования
| Компонент | Минимальная версия / Условие |
|---|---|
| ОС сервера | Windows Server 2016 / 2019 / 2022 / 2025 |
| ОС клиента | Windows 10 1809+ / Windows 11 / Server 2016+ |
| Инфраструктура | Active Directory + AD CS (или сторонний CA) |
| Протокол | NLA включён, TLS 1.2+ |
| Права | Domain Admins / Server Admins + доступ к GPO |
Этап 1: Подготовка сертификатов
1.1 Требования к клиентскому сертификату
| Поле | Значение |
|---|---|
| EKU (ОКП) | Client Authentication (1.3.6.1.5.5.7.3.2) или Smart Card Logon (1.3.6.1.4.1.311.20.2.2) |
| Subject / SAN | UPN пользователя (user@domain.local) или Subject: CN=User, E=user@domain.local |
| Хранилище | Текущий пользователь → Личное |
| Закрытый ключ | Должен быть экспортируемым (если не смарт-карта) и помечен как Mark key as exportable |
1.2 Требования к сертификату сервера (TLS)
- EKU:
Server Authentication - SAN: FQDN сервера RDP (например,
rdp.corp.local) - Установлен в
Локальный компьютер → Личное - Корневой CA добавлен в
Trusted Root Certification Authoritiesна сервере и клиенте
1.3 Экспорт клиентского сертификата (если используется файл)
# Найти сертификат
certutil -user -store my | findstr "Serial"
# Экспорт в PFX (замените thumbprint)
certutil -user -p "YourPFXPassword" -exportpfx my <thumbprint> cert.pfx
Этап 2: Настройка сервера RDP
2.1 Включение NLA и привязка сертификата сервера
- Откройте
gpedit.msc(локально) илиGPMC(доменная политика)
2. Перейдите:
Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Службы удалённых рабочих столов → Узел сеансов → Безопасность
3. Включите и настройте:
- Требовать использование определенного уровня безопасности для удаленных (RDP) подключений →
SSL (TLS 1.0)(на практике система автоматически использует TLS 1.2+) - Требовать проверку подлинности пользователя для удаленных подключений с помощью сетевой проверки подлинности (NLA) →
Включено - Сертификат проверки подлинности сервера →
Указать сертификат...(выберите серверный TLS-сертификат)
2.2 Разрешение входа по сертификату
В той же ветке GPO:
- Требовать смарт-карту для интерактивного входа →
Включено(это активирует механизм cert-mapping для RDP) - Дополнительно (опционально):
Параметры входа с помощью смарт-карты→Разрешить перенаправление сертификатов смарт-карты
2.3 Маппинг сертификата на учётную запись AD
- Откройте
dsa.msc(Active Directory Users and Computers) - Включите
Advanced Features(View → Advanced Features) - Откройте свойства пользователя → вкладка
Attribute Editor - Найдите атрибут
altSecurityIdentities
5. Добавьте значение в одном из форматов:
X509:<I>IssuerDN<S>SubjectDN
X509:<KI>KeyIdentifier
X509:<SHA1-PU>SHA1PublicKeyHash
UPN:user@domain.local
Пример через PowerShell:
$user = "CN=User,OU=Users,DC=corp,DC=local"
$cert = Get-ChildItem Cert:\CurrentUser\My | Where-Object {$_.Subject -match "User"}
$mapping = "X509:<I>" + ($cert.Issuer) + "<S>" + ($cert.Subject)
Set-ADUser -Identity $user -Replace @{altSecurityIdentities=$mapping}
6. Примените политику на сервере: gpupdate /force и перезапустите службу:
Restart-Service TermService -Force
Этап 3: Настройка клиента
3.1 Установка клиентского сертификата
- Дважды кликните
.pfx→Текущий пользователь→Личное - Убедитесь, что закрытый ключ доступен (в
certmgr.msc→ Личное → Certificates → у сертификата должен быть значок ключа)
3.2 Настройка клиента RDP
- Запустите
mstsc→Показать параметры - Вкладка
Общие: введите FQDN сервера
3. Вкладка Дополнительно → Подключение:
Подключаться без предупреждения→ДаПроверка подлинности сервера→Предупреждать, если имя сервера не соответствует...(рекомендуется оставить для безопасности)- Сохраните как
server.rdp
- Сохраните как
3.3 Принудительное использование сертификата (через RDP-файл)
Откройте .rdp в текстовом редакторе и добавьте:
authentication level:i:2
enablecredsspsupport:i:1
negotiate security layer:i:1
certificate selection:i:1
authentication level:i:2→ требовать NLAcertificate selection:i:1→ автоматически предлагать выбор сертификата
3.4 Отключение кэширования учётных данных (опционально)
reg add "HKLM\SOFTWARE\Microsoft\Terminal Server Client" /v DisablePasswordSaving /t REG_DWORD /d 1 /f
Этап 4: Тестирование и диагностика
4.1 Подключение
- Запустите
mstsc→ подключитесь к серверу - При появлении запроса NLA выберите клиентский сертификат
- Вход должен произойти без ввода пароля
4.2 Логи и события
| Журнал | Путь в Event Viewer | Что искать |
|---|---|---|
| NLA / CredSSP | Applications and Services Logs → Microsoft → Windows → TerminalServices-RemoteConnectionManager |
EventID 1149 (успешный вход) |
| Аутентификация | Security |
EventID 4624 (Logon Type: 3 или 10), Key Usage: Certificate |
| Ошибки RDP | TerminalServices-ClientActiveXCore |
EventID 1000-1005 |
4.3 Проверка маппинга на сервере
# Проверить, видит ли система сертификат пользователя
certutil -v -user -store my | findstr /i "altSecurity"
# Или через AD:
Get-ADUser username -Properties altSecurityIdentities | Select-Object altSecurityIdentities
Устранение типовых ошибок
| Код ошибки | Причина | Решение |
|---|---|---|
0x204 / 0x4 |
NLA отключён или сертификат сервера не доверен | Проверьте GPO NLA, установите Root CA в Trusted Root на клиенте |
0x700 / 0x207 |
Цепочка сертификатов оборвана / CRL недоступен | Проверьте certutil -verify <cert.cer>, настройте OCSP/CRL доступность |
| Запрос пароля после выбора сертификата | Маппинг не настроен или EKU не совпадает | Проверьте altSecurityIdentities, убедитесь в наличии Client Authentication |
The remote computer requires NLA |
Клиент устарел или GPO принуждает NLA | Обновите клиент, в .rdp укажите authentication level:i:2 |
Диагностические команды:
# Проверить TLS-версии на сервере
[Net.ServicePointManager]::SecurityProtocol
# Проверить применимость GPO
gpresult /h rdp_gpo.html
# Включить расширенные логи RDP (Server 2019+)
wevtutil sl Microsoft-Windows-TerminalServices-RemoteConnectionManager/Analytic /e:true
Рекомендации по безопасности (2024–2026)
- Только TLS 1.2/1.3: отключите SSL 3.0, TLS 1.0/1.1 через реестр или GPO
System Cryptography: Configure encryption types allowed for Kerberos - Запретите NTLMv1/LM:
Network security: LAN Manager authentication level→Send NTLMv2 response only - Ограничьте доступ по группам: GPO
Allow log on through Remote Desktop Services→ только целевая группа - CRL/OCSP: убедитесь, что сервер RDP имеет доступ к точкам распространения CRL. Используйте
certutil -urlcache *для проверки - Windows Server 2022/2025: поддерживается
Certificate-based authentication for RDPбез RD Gateway через политикуRequire certificate authentication for remote connections(включается вComputer Config → Admin Templates → Windows Components → Remote Desktop Services → RD Session Host → Security)
Автоматизация (PowerShell)
Если нужно развернуть маппинг для группы пользователей:
$users = Get-ADUser -Filter * -SearchBase "OU=RDPUsers,DC=corp,DC=local"
foreach ($u in $users) {
$cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object {$_.Subject -match $u.SamAccountName}
if ($cert) {
$mapping = "X509:<I>" + $cert.Issuer + "<S>" + $cert.Subject
Set-ADUser -Identity $u -Replace @{altSecurityIdentities=$mapping}
}
}
.