d1e594f057
Добавлен DAK-PC-RESOLVED.md, README и runbook отражают фактическое решение без repair install; перечислены внешние задачи планировщика для отключения. Co-authored-by: Cursor <cursoragent@cursor.com>
109 lines
5.5 KiB
Markdown
109 lines
5.5 KiB
Markdown
# fix-DAK-PC — локальная починка RDP/TLS на Windows 10/11
|
||
|
||
Набор скриптов для **локального** (с консоли проблемного ПК) восстановления RDP, когда клиент показывает «внутренняя ошибка», в журнале **1057** / **Schannel 36870**, TermService сбрасывает `SSLCertificateSHA1Hash`.
|
||
|
||
Сценарий проверен на **DAK-PC** (Win10 Pro 19045): корень — сломанная привязка TLS-сертификата RDP; обход `SecurityLayer=0`; **лечение — `Fix-RdpTls.ps1` фазы 3–5 + `-RestoreTls`** (repair install не понадобился). Подробно: [docs/DAK-PC-RESOLVED.md](docs/DAK-PC-RESOLVED.md).
|
||
|
||
## Проверенная последовательность (DAK-PC)
|
||
|
||
1. `.\Invoke-RdpRepairSelfTest.ps1 -IncludeAdminTests` → `FAIL=0`
|
||
2. `.\Fix-RdpTls.ps1` → при неудачном нативном сбросе: **фазы 3–5** (создать cert, ACL, привязка)
|
||
3. `.\Fix-RdpTls.ps1 -RestoreTls` → `SecurityLayer=2`
|
||
4. Сброс кэша RDP на **клиенте**
|
||
|
||
Ранее для доступа: `.\Fix-RdpTls.ps1 -EmergencyRdpOnly` (`SecurityLayer=0`).
|
||
|
||
**Не из репозитория:** задачи планировщика `RdpBindFix`, `RdpNativeReset`, `CryptoRepair.ps1` — отключить после успеха.
|
||
|
||
## Быстрый старт (за компом DAK-PC)
|
||
|
||
1. Скопируйте репозиторий или папку `scripts` на ПК (флешка, `git clone`, общая шара).
|
||
2. **PowerShell от имени администратора**.
|
||
3. Разрешите выполнение (один раз в этой сессии):
|
||
|
||
```powershell
|
||
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
|
||
cd C:\path\to\fix-DAK-PC\scripts
|
||
```
|
||
|
||
4. **Самотесты** (обязательно, с правами администратора):
|
||
|
||
```powershell
|
||
.\Invoke-RdpRepairSelfTest.ps1 -IncludeAdminTests
|
||
```
|
||
|
||
Ожидание: `FAIL=0`. Если `Set-ExecutionPolicy` ругается на GPO — для сессии достаточно `Process=Bypass` или запуск:
|
||
|
||
```powershell
|
||
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Invoke-RdpRepairSelfTest.ps1 -IncludeAdminTests
|
||
```
|
||
|
||
Самотесты проверяют синтаксис, загрузку модулей, чтение cert store и ловушки PowerShell 5.1 с одним cert; **не** прогоняют полный `Fix-RdpTls.ps1` (очистку store, reboot, привязку).
|
||
|
||
5. **Полный интерактивный ремонт**:
|
||
|
||
```powershell
|
||
.\Fix-RdpTls.ps1
|
||
```
|
||
|
||
6. Если TLS не удаётся починить — **экстренный доступ** (без TLS):
|
||
|
||
```powershell
|
||
.\Fix-RdpTls.ps1 -EmergencyRdpOnly
|
||
```
|
||
|
||
7. **Возврат TLS** (после успешной привязки cert — фазы 3–5 или нативный cert):
|
||
|
||
```powershell
|
||
.\Fix-RdpTls.ps1 -RestoreTls
|
||
```
|
||
|
||
Если Hash AFTER остаётся пустым при любом cert — см. [docs/REPAIR-INSTALL.md](docs/REPAIR-INSTALL.md).
|
||
|
||
## Структура
|
||
|
||
| Файл | Назначение |
|
||
|------|------------|
|
||
| `scripts/Fix-RdpTls.ps1` | Главный сценарий: диагностика → очистка → cert → привязка → проверка |
|
||
| `scripts/Invoke-RdpRepairSelfTest.ps1` | Самотесты функций и синтаксиса |
|
||
| `scripts/lib/RdpRepair.Common.ps1` | Общие функции |
|
||
| `docs/DAK-PC-RESOLVED.md` | **Фактический** сценарий успеха на DAK-PC |
|
||
| `docs/REPAIR-INSTALL.md` | Запасной план: repair install (если Hash AFTER пустой) |
|
||
| `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](docs/REPAIR-INSTALL.md).
|
||
|
||
## Клонирование
|
||
|
||
```bash
|
||
git clone https://git.kalinamall.ru/PapaTramp/fix-DAK-PC.git
|
||
```
|
||
|
||
## Лицензия
|
||
|
||
Внутреннее использование (PapaTramp / kalinamall).
|