27c1f49be1
Реестр отдаёт byte[]; TermService принимал cert, но проверка Persisted ложно падала. Добавлены ConvertTo-RdpRepairThumbprintHex и самотесты на форматы DAK-PC. Co-authored-by: Cursor <cursoragent@cursor.com>
68 lines
3.4 KiB
Markdown
68 lines
3.4 KiB
Markdown
# Troubleshooting — RDP / TLS / сертификаты
|
||
|
||
## События
|
||
|
||
| ID | Источник | Значение |
|
||
|----|----------|----------|
|
||
| **1057** | RemoteConnectionManager / System | Ошибка SSL/TLS RDP; часто «неправильный алгоритм» или «не удалось создать самозаверяющий сертификат» |
|
||
| **36870** | Schannel | `SEC_E_ALGORITHM_MISMATCH` (0x8009030d) — нет общего алгоритма с клиентом или нет валидного cert |
|
||
| **258** | Operational | Прослушиватель RDP-Tcp запущен (норма) |
|
||
| **261** | Operational | Входящее соединение на listener (норма) |
|
||
|
||
## Hash BEFORE есть, Hash AFTER пустой
|
||
|
||
TermService **отверг** сертификат при старте. Возможные причины:
|
||
|
||
- Просроченный cert (лечится заменой).
|
||
- Нет доступа к приватному ключу → фаза ACL в `Fix-RdpTls.ps1`.
|
||
- CNG vs CSP — скрипт пробует `RSA\MachineKeys`.
|
||
- Повреждение Schannel → repair install.
|
||
|
||
**Важно:** в реестре `SSLCertificateSHA1Hash` часто хранится как **массив байт**, а не hex-строка thumbprint. Скрипт нормализует оба формата перед сравнением. Если BEFORE и AFTER совпадают (в hex), привязка успешна — включайте `SecurityLayer=2` (`-RestoreTls`).
|
||
|
||
## Просмотр store Remote Desktop
|
||
|
||
`Get-ChildItem Cert:\LocalMachine\Remote Desktop` на части систем не работает (пробел в имени store). Используйте:
|
||
|
||
```powershell
|
||
. .\lib\RdpRepair.Common.ps1
|
||
Get-RdpRepairRemoteDesktopCertificates | Format-List
|
||
```
|
||
|
||
или `.\Fix-RdpTls.ps1 -DiagnoseOnly`.
|
||
|
||
## Нативный cert не создаётся после reboot
|
||
|
||
Store `Remote Desktop` пустой после цикла «выкл RDP → очистка → вкл RDP → reboot»:
|
||
|
||
- Запустите `Fix-RdpTls.ps1` фазы 4–6 локально.
|
||
- Если не помогло — repair install.
|
||
|
||
## GPO Terminal Services
|
||
|
||
Путь: `HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services`
|
||
|
||
На DAK-PC и рабочих ПК может быть:
|
||
|
||
- `LicenseServers` = 192.168.160.150
|
||
- `LicensingMode` = 4
|
||
|
||
RDP при этом работал на других ПК — **не единственная причина** отказа DAK-PC. Убирать из GPO для Win10 Pro всё равно желательно (задача админа AD).
|
||
|
||
Локальное удаление **откатывается** `gpupdate /force`.
|
||
|
||
## Клиент «внутренняя ошибка»
|
||
|
||
1. Сброс кэша cert на клиенте (см. RETURN-TO-TLS.md).
|
||
2. Проверка 1057/36870 на **сервере** в момент подключения.
|
||
3. Сравнение `SecurityLayer` с рабочим ПК.
|
||
|
||
## WinRM vs RDP
|
||
|
||
WinRM может работать при сломанном RDP TLS — это нормально. Починка RDP не требует локальной консоли, но **локальный** запуск скриптов надёжнее для cert/ACL.
|
||
|
||
## Логи скриптов
|
||
|
||
- `%ProgramData%\RdpRepair\report-*.txt` — диагностика
|
||
- `%ProgramData%\RdpRepair\repair-*.log` — ход ремонта
|