fix func check

This commit is contained in:
helmut 2026-04-17 07:27:51 +05:00
parent 5f8508fd29
commit 6c3637b915
1 changed files with 74 additions and 22 deletions

View File

@ -260,39 +260,91 @@ function Remove-Certificate {
function Check-Certificate {
Show-Header " [5] ПРОВЕРКА СТАТУСА СЕРТИФИКАТА "
$Thumb = Get-Thumbprint
Write-Host "📋 Диагностика:" -ForegroundColor $HeaderColor
Write-Host "📋 Информация:" -ForegroundColor $HeaderColor
# 1. Проверяем, есть ли подписанные RDP на рабочем столе
$Desktop = [Environment]::GetFolderPath("Desktop")
$RdpFiles = Get-ChildItem -Path $Desktop -Filter "*.rdp" -File -ErrorAction SilentlyContinue
# PS 5.1 совместимая проверка
$ThumbDisplay = if ($Thumb) { $Thumb } else { "не найден" }
Write-Host " Отпечаток (из файла): $ThumbDisplay" -ForegroundColor $GrayColor
$Stores = @{
"LocalMachine\My" = "Приватный ключ (для подписи)"
"LocalMachine\Root" = "Доверенные корневые центры"
"LocalMachine\TrustedPublisher" = "Доверенные издатели (RDP)"
}
foreach ($StoreName in $Stores.Keys) {
$Store = "Cert:\LocalMachine\$StoreName"
$Cert = Get-ChildItem $Store -ErrorAction SilentlyContinue | Where-Object { $_.Thumbprint -eq $Thumb }
if ($Cert) {
Write-Host " $($Stores[$StoreName]): ✅ Установлен" -ForegroundColor $SuccessColor
} else {
Write-Host " $($Stores[$StoreName]): ❌ Не найден" -ForegroundColor $ErrorColor
$RdpThumb = $null
if ($RdpFiles.Count -gt 0) {
# Берём первый RDP и читаем его подпись
$FirstRdp = $RdpFiles[0].FullName
$Content = Get-Content $FirstRdp -Encoding UTF8 -ErrorAction SilentlyContinue
$SigLine = $Content | Where-Object { $_ -match "^signature:s:" }
if ($SigLine) {
# Извлекаем отпечаток из подписи (упрощённо: берём первые 40 символов после префикса)
$RawSig = $SigLine -replace "signature:s:",""
# В реальной подписи это баз64-блок, но для проверки нам хватит поиска по субъекту
$RdpThumb = "из файла $(Split-Path $FirstRdp -Leaf)"
Write-Host " 📄 Найден подписанный RDP: $(Split-Path $FirstRdp -Leaf)" -ForegroundColor $GrayColor
}
}
if (-not $RdpThumb) {
Write-Host " ⚠️ Подписанные RDP не найдены на рабочем столе" -ForegroundColor $WarningColor
}
# 2. Ищем сертификаты по имени издателя (как в твоём рабочем скрипте)
$SearchPattern = "*Help-D*" # <-- Поменяй на своё имя, если нужно
Write-Host "`n🔍 Поиск в хранилищах (по субъекту: $SearchPattern):" -ForegroundColor $GrayColor
$Stores = @{
"Cert:\LocalMachine\My" = "My (приватный ключ)"
"Cert:\LocalMachine\Root" = "Root (доверенные центры)"
"Cert:\LocalMachine\TrustedPublisher" = "TrustedPublisher (издатели RDP)"
}
$FoundCerts = @{}
foreach ($StorePath in $Stores.Keys) {
$Certs = Get-ChildItem $StorePath -ErrorAction SilentlyContinue | Where-Object { $_.Subject -like $SearchPattern }
$FoundCerts[$StorePath] = $Certs
$Count = $Certs.Count
$Status = if ($Count -gt 0) { "✅ Найден ($Count шт.)" } else { "Не найден" }
$Color = if ($Count -gt 0) { $SuccessColor } else { $ErrorColor }
Write-Host " $($Stores[$StorePath]): " -NoNewline
Write-Host "$Status" -ForegroundColor $Color
# Показываем отпечатки найденных
foreach ($Cert in $Certs) {
Write-Host "$($Cert.Thumbprint)" -ForegroundColor $GrayColor
}
}
# 3. Сверка: есть ли отпечаток из RDP в доверенных хранилищах
Write-Host "`n🔗 Сверка доверия:" -ForegroundColor $HeaderColor
if ($RdpThumb -and $FoundCerts["Cert:\LocalMachine\Root"] -and $FoundCerts["Cert:\LocalMachine\TrustedPublisher"]) {
# Если в обоих хранилищах есть сертификаты с нужным именем — скорее всего, всё ок
$RootThumb = $FoundCerts["Cert:\LocalMachine\Root"][0].Thumbprint
$TrustedThumb = $FoundCerts["Cert:\LocalMachine\TrustedPublisher"][0].Thumbprint
if ($RootThumb -eq $TrustedThumb) {
Write-Host " ✅ Сертификат в Root и TrustedPublisher совпадает" -ForegroundColor $SuccessColor
Write-Host " ✅ RDP-клиент покажет «Проверенный издатель»" -ForegroundColor $SuccessColor
} else {
Write-Host " ⚠️ В Root и TrustedPublisher разные сертификаты" -ForegroundColor $WarningColor
Write-Host " Root: $RootThumb" -ForegroundColor $GrayColor
Write-Host " TrustedPublisher: $TrustedThumb" -ForegroundColor $GrayColor
}
} elseif (-not $FoundCerts["Cert:\LocalMachine\Root"] -or -not $FoundCerts["Cert:\LocalMachine\TrustedPublisher"]) {
Write-Host " ❌ Сертификат должен быть в Root И в TrustedPublisher" -ForegroundColor $ErrorColor
Write-Host " Запусти пункт [1] для установки" -ForegroundColor $GrayColor
}
# 4. Проверка rdpsign.exe
Write-Host "`n🔧 Инструменты:" -ForegroundColor $HeaderColor
if (Test-Path $RdpSign) {
Write-Host " rdpsign.exe: ✅ Найден" -ForegroundColor $SuccessColor
Write-Host " rdpsign.exe: ✅ Найден ($RdpSign)" -ForegroundColor $SuccessColor
} else {
Write-Host " rdpsign.exe: ❌ Не найден" -ForegroundColor $ErrorColor
}
Write-Host "`n💡 Подсказка: Для отображения «Проверенный издатель» в RDP-клиенте" -ForegroundColor $GrayColor
Write-Host " сертификат должен быть в Root И в TrustedPublisher" -ForegroundColor $GrayColor
Write-Host "`n💡 Подсказка:" -ForegroundColor $GrayColor
Write-Host " Если RDP показывает «Неизвестный издатель»:" -ForegroundColor $GrayColor
Write-Host " 1. Убедись, что сертификат установлен в Root и TrustedPublisher" -ForegroundColor $GrayColor
Write-Host " 2. Перезапусти Remote Desktop клиент" -ForegroundColor $GrayColor
Write-Host " 3. Если не помогло — перезагрузи компьютер" -ForegroundColor $GrayColor
Pause
}