5761710fa1
Добавлены Get-RdpRepairCertificateArray/FirstCertificate, самотесты на вложенные массивы; Fix-RdpTls больше не использует Select-Object -First 1 на cert. Co-authored-by: Cursor <cursoragent@cursor.com>
95 lines
4.5 KiB
Markdown
95 lines
4.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`; полное лечение — repair install + возврат TLS.
|
||
|
||
## Быстрый старт (за компом 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. После **repair install** Windows и успешной привязки cert — **возврат TLS**:
|
||
|
||
```powershell
|
||
.\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](docs/REPAIR-INSTALL.md).
|
||
|
||
## Клонирование
|
||
|
||
```bash
|
||
git clone https://git.kalinamall.ru/PapaTramp/fix-DAK-PC.git
|
||
```
|
||
|
||
## Лицензия
|
||
|
||
Внутреннее использование (PapaTramp / kalinamall).
|