Гайд: Вход по RDP через сертификат: настройка маппинга в AD, NLA и TLS на Windows Server

Настройка входа по RDP через клиентский сертификат: маппинг в AD, NLA, TLS. Пошаговое руководство для Windows Server и доменной инфраструктуры.

2026.05.14                  


Гайд: Вход по RDP через сертификат: настройка маппинга в AD, NLA и TLS на Windows ServerГайд: Вход по 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 и привязка сертификата сервера

  1. Откройте 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

  1. Откройте dsa.msc (Active Directory Users and Computers)
  2. Включите Advanced Features (View → Advanced Features)
  3. Откройте свойства пользователя → вкладка Attribute Editor
  4. Найдите атрибут 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

  1. Запустите mstscПоказать параметры
  2. Вкладка Общие: введите FQDN сервера
3. Вкладка ДополнительноПодключение:
  • Подключаться без предупрежденияДа
  • Проверка подлинности сервераПредупреждать, если имя сервера не соответствует... (рекомендуется оставить для безопасности)
    1. Сохраните как 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 → требовать NLA
  • certificate selection:i:1 → автоматически предлагать выбор сертификата

3.4 Отключение кэширования учётных данных (опционально)

reg add "HKLM\SOFTWARE\Microsoft\Terminal Server Client" /v DisablePasswordSaving /t REG_DWORD /d 1 /f

Этап 4: Тестирование и диагностика

4.1 Подключение

  1. Запустите mstsc → подключитесь к серверу
  2. При появлении запроса NLA выберите клиентский сертификат
  3. Вход должен произойти без ввода пароля

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)

  1. Только TLS 1.2/1.3: отключите SSL 3.0, TLS 1.0/1.1 через реестр или GPO System Cryptography: Configure encryption types allowed for Kerberos
  2. Запретите NTLMv1/LM: Network security: LAN Manager authentication levelSend NTLMv2 response only
  3. Ограничьте доступ по группам: GPO Allow log on through Remote Desktop Services → только целевая группа
  4. CRL/OCSP: убедитесь, что сервер RDP имеет доступ к точкам распространения CRL. Используйте certutil -urlcache * для проверки
  5. 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}
    }
}

.