fix func check
This commit is contained in:
parent
5f8508fd29
commit
6c3637b915
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue