PTah 27c1f49be1 fix: сравнение SSLCertificateSHA1Hash — байты реестра vs hex thumbprint
Реестр отдаёт byte[]; TermService принимал cert, но проверка Persisted ложно падала.
Добавлены ConvertTo-RdpRepairThumbprintHex и самотесты на форматы DAK-PC.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 21:12:37 +10:00

fix-DAK-PC — локальная починка RDP/TLS на Windows 10/11

Набор скриптов для локального (с консоли проблемного ПК) восстановления RDP, когда клиент показывает «внутренняя ошибка», в журнале 1057 / Schannel 36870, TermService сбрасывает SSLCertificateSHA1Hash.

Сценарий проверен на DAK-PC (Win10 Pro 19045): корень — сломанная привязка TLS-сертификата RDP; обход SecurityLayer=0; полное лечение — repair install + возврат TLS.

Быстрый старт (за компом DAK-PC)

  1. Скопируйте репозиторий или папку scripts на ПК (флешка, git clone, общая шара).
  2. PowerShell от имени администратора.
  3. Разрешите выполнение (один раз в этой сессии):
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
cd C:\path\to\fix-DAK-PC\scripts
  1. Самотесты (обязательно, с правами администратора):
.\Invoke-RdpRepairSelfTest.ps1 -IncludeAdminTests

Ожидание: FAIL=0. Если Set-ExecutionPolicy ругается на GPO — для сессии достаточно Process=Bypass или запуск:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Invoke-RdpRepairSelfTest.ps1 -IncludeAdminTests

Самотесты проверяют синтаксис, загрузку модулей, чтение cert store и ловушки PowerShell 5.1 с одним cert; не прогоняют полный Fix-RdpTls.ps1 (очистку store, reboot, привязку).

  1. Полный интерактивный ремонт:
.\Fix-RdpTls.ps1
  1. Если TLS не удаётся починить — экстренный доступ (без TLS):
.\Fix-RdpTls.ps1 -EmergencyRdpOnly
  1. После repair install Windows и успешной привязки cert — возврат TLS:
.\Fix-RdpTls.ps1 -RestoreTls

Структура

Файл Назначение
scripts/Fix-RdpTls.ps1 Главный сценарий: диагностика → очистка → cert → привязка → проверка
scripts/Invoke-RdpRepairSelfTest.ps1 Самотесты функций и синтаксиса
scripts/lib/RdpRepair.Common.ps1 Общие функции
docs/REPAIR-INSTALL.md Repair install Windows (на месте)
docs/RETURN-TO-TLS.md Возврат SecurityLayer=2 после починки cert
docs/TROUBLESHOOTING.md События, типичные ошибки, GPO
docs/LOCAL-RUNBOOK.md Пошаговый сценарий за консолью DAK-PC

Фазы Fix-RdpTls.ps1

Фаза Действие
0 Самопроверка: админ, ОС, службы, модули
1 Диагностика → отчёт %ProgramData%\RdpRepair\report-*.txt
2 Очистка просроченных/битых cert в Remote Desktop и My
3 Нативный сброс (выкл/вкл RDP, очистка store) + опциональный reboot
4 Создание cert (цепочка провайдеров: Enhanced RSA → default)
5 ACL на приватный ключ (NETWORK SERVICE, SYSTEM)
6 Привязка (reg + WMI), проверка Hash BEFORE/AFTER
7 -EmergencyRdpOnly: SecurityLayer=0
8 -RestoreTls: SecurityLayer=2 при успешной привязке

Критерий успеха TLS

После перезапуска TermService:

  • SSLCertificateSHA1Hash в реестре совпадает с thumbprint cert в store.
  • События 1057 / 36870 не появляются при тестовом подключении RDP.
  • SecurityLayer = 2 (как на рабочих ПК в домене).

Если Hash AFTER пустой при любом cert — см. docs/REPAIR-INSTALL.md.

Клонирование

git clone https://git.kalinamall.ru/PapaTramp/fix-DAK-PC.git

Лицензия

Внутреннее использование (PapaTramp / kalinamall).

S
Description
Local RDP/TLS repair scripts for Windows
Readme 104 KiB
Languages
PowerShell 100%