From 6c3637b9155f7fd2571e2e6f99004dceaf3b90f7 Mon Sep 17 00:00:00 2001 From: helmut Date: Fri, 17 Apr 2026 07:27:51 +0500 Subject: [PATCH] fix func check --- installSSL.ps1 | 96 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 74 insertions(+), 22 deletions(-) diff --git a/installSSL.ps1 b/installSSL.ps1 index 36a2c7c..1aee3e7 100644 --- a/installSSL.ps1 +++ b/installSSL.ps1 @@ -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 }