Подробный гайд: Сертификаты RDP в Windows 11 — проблема с переносом и сохранением
В Windows 11 при настройке пользовательского сертификата для RDP часто возникает ситуация, когда:
- Сертификат устанавливается, но после перезагрузки сбрасывается на самоподписанный
- Значение
SSLCertificateSHA1Hashв реестре удаляется системой - Подключение снова показывает предупреждение о недоверенном сертификате
Пошаговое решение: как правильно установить и сохранить сертификат
Шаг 1: Подготовка сертификата
1. Получите сертификат в формате .pfx (с закрытым ключом):
- Бесплатно: FreeSSL.org, Let's Encrypt
- Платно: коммерческие удостоверяющие центры
- Конвертация из
.pem/.keyв.pfx:
openssl pkcs12 -export -inkey private.key -in certificate.crt -out certificate.pfx
2. Импортируйте сертификат в хранилище компьютера:
- Нажмите
Win + R→ введитеcertlm.msc - Перейдите: Личные → Сертификаты
- ПКМ → Все задачи → Импорт → выберите
.pfxфайл - Убедитесь, что выбрано: Поместить все сертификаты в следующее хранилище: Личные
Шаг 2: Настройка прав доступа к закрытому ключу
Критически важный шаг, который часто пропускают:
- В
certlm.mscнайдите импортированный сертификат - ПКМ → Все задачи → Управление закрытыми ключами
- Нажмите Добавить → введите
NETWORK SERVICE→ Проверить имена → ОК - Выделите
NETWORK SERVICE→ поставьте галочку Чтение → ОК
Без этого права служба RDP не сможет использовать сертификат, и он будет сброшен.
Шаг 3: Получение отпечатка (Thumbprint) сертификата
- Откройте свойства сертификата → вкладка Состав
- Найдите поле Отпечаток (Thumbprint)
- Скопируйте значение и удалите все пробелы (включая невидимые символы!)
- Пример:
bdbb88ce067de27743745ad7e7aa51ff13c2bcf8
Шаг 4: Привязка сертификата к RDP
Способ А: PowerShell (рекомендуется для Windows 11 24H2+)
# Замените THUMBPRINT на ваш отпечаток без пробелов
$thumbprint = "bdbb88ce067de27743745ad7e7aa51ff13c2bcf8"
Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices | Set-WmiInstance -Arguments @{SSLCertificateSHA1Hash="$thumbprint"}
В Windows 11 24H2 команда wmic устарела и может не работать.
Способ Б: Реестр (универсальный)
- Откройте
regedit
2. Перейдите:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
- Создайте параметр
SSLCertificateSHA1Hashтипа REG_BINARY
4. Введите отпечаток в шестнадцатеричном формате, через запятую:
42,49,e1,6e,0a,f0,a0,2e,63,c4,5c,93,fd,52,ad,09,27,82,1b,01
Шаг 5: Перезапуск службы
Restart-Service -Name TermService -Force
Или через services.msc → Службы удалённых рабочих столов → Перезапустить
Почему сертификат может сбрасываться? Основные причины
| Причина | Решение |
|---|---|
Нет прав Read у NETWORK SERVICE для закрытого ключа |
Выполните Шаг 2 выше |
| Конфликт групповых политик (GPO) | Проверьте gpresult /h report.html на наличие политик, переопределяющих RDP |
| Автоматическое обновление самоподписанных сертификатов | Отключите автогенерацию через реестр или настройте шаблон сертификата в домене |
| Неправильный формат отпечатка (пробелы, неверный регистр) | Удаляйте все пробелы, используйте только строчные буквы |
| Обновления Windows сбрасывают настройки | После крупных обновлений (24H2, 25H2) проверяйте настройки заново |
Автоматизация: скрипт для установки сертификата
Сохраните как Set-RDPCertificate.ps1:
param(
[string]$PfxPath,
[string]$PfxPassword,
[string]$CertStorePath = "Cert:\LocalMachine\My"
)
# Импорт сертификата
$securePassword = ConvertTo-SecureString -String $PfxPassword -Force -AsPlainText
Import-PfxCertificate -FilePath $PfxPath -CertStoreLocation $CertStorePath -Password $securePassword | ForEach-Object {
$thumbprint = $_.Thumbprint
Write-Host "Импорт завершён. Отпечаток: $thumbprint"
# Привязка к RDP
Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices |
Set-WmiInstance -Arguments @{SSLCertificateSHA1Hash="$thumbprint"}
# Права для NETWORK SERVICE (требует прав администратора)
$cert = Get-ChildItem $CertStorePath\$thumbprint
$key = $cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$keyPath = "$env:ProgramData\Microsoft\Crypto\RSA\MachineKeys\$key"
$acl = Get-Acl $keyPath
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("NETWORK SERVICE","Read","Allow")
$acl.AddAccessRule($rule)
Set-Acl $keyPath $acl
Write-Host "Сертификат успешно применён к RDP"
}
Запуск:
.\Set-RDPCertificate.ps1 -PfxPath "C:\certs\rdp.pfx" -PfxPassword "YourPassword"
Проверка результата
- Подключитесь через
mstsc.exe - Нажмите на значок замка в верхней панели окна подключения
- Убедитесь, что отображается ваш сертификат, а не самоподписанный
Или через PowerShell:
(Get-CimInstance -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'").SSLCertificateSHA1Hash
Сравните вывод с отпечатком вашего сертификата.
Важные замечания для Windows 11
- Апрельские обновления 2026 изменили поведение при открытии
.rdp-файлов: теперь по умолчанию показываются предупреждения безопасности
- Для отключения предупреждений можно:
- Подписать
.rdp-файл черезrdpsign.exe - Добавить отпечаток сертификата в политику:
Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Connection Client → Specify SHA1 thumbprints of certificates representing trusted .rdp publishers
- WMIC устарел в 24H2: используйте PowerShell или реестр вместо
wmic
Совет:
Если вы работаете в домене, настройте автоматическую выдачу сертификатов через GPO и шаблон центра сертификации — это избавит от ручного обновления каждые 90 дней.
Если после всех шагов сертификат всё равно сбрасывается — проверьте журналы событий (eventvwr.msc → Журналы приложений и служб → Microsoft → Windows → TerminalServices-RemoteConnectionManager) на наличие ошибок при загрузке службы.