Powershell Zdalnie usuwaj certyfikaty PKI

9

Niedawno przebudowałem moją infrastrukturę PKI i chciałbym usunąć certyfikaty wydane wszystkim komputerom klienckim w mojej sieci. Brzmi jak praca dla PowerShell! Napisałem więc ten skrypt do dystrybucji przez GPO, uruchomiłem z SysVol i uruchomiłem na komputerach klienckich podczas uruchamiania:

set-location cert:\LocalMachine\My
$certname = $env:COMPUTERNAME + ".domain.com"
get-item * | %{
if($_.issuer -like "CN=IssuingCA*" -and $_.DnsNameList.unicode -like $certname) { remove-item .\$_.Thumbprint -Force }
}

Z wiersza polecenia z podwyższonym poziomem uprawnień:

  • Kiedy Ran, skrypt nie daje danych wyjściowych (po prostu nowa linia terminala). Nie zwraca żadnych błędów, a certyfikat nie jest usuwany.
  • Gdy argument -WhatIfzostanie dodany do Remove-Itempolecenia w skrypcie, ponownie nie będzie żadnych błędów, a certyfikat nie zostanie usunięty.
  • Po uruchomieniu elementu Usuń. \ CERTIFICATE-THUMBPRINT -Force certyfikat jest usuwany.

Czy to problem z uprawnieniami? Czy istnieje mądrzejszy / prostszy sposób to zrobić?

Dzięki!

Byron C.
źródło
1
próbowałeś remove-item -whatif?
MDMoore313
@BigHomie. Tak, próbowałem tego. Wydaje mi się, że usunąłem tę informację w edycji ...
Byron C.
1
W warunkowym bloku kodu, dodaj a, write-hostaby zrzucić coś na ekranie, jeśli warunek jest prawdziwy. Zastanawiam się, czy skrypt ocenia jako fałszywy (wyjaśniałby brak błędu i brak działania).
Colyn1337,
@ Colyn1337 Tak. Ocenia Prawdę.
Byron C.
@ByronC. Co się stanie, jeśli blok kodu jest po prostu Remove-Item -Force?
Colyn1337,

Odpowiedzi:

6

Moja odpowiedź brzmi: „Czy istnieje mądrzejszy / prostszy sposób to zrobić?” część twojego pytania. Skryptowi udało mi się usunąć certyfikat go tatusia

$Path = 'Cert:\LocalMachine\AuthRoot\'
$CertList = @()

$CertList = Get-ChildItem -Path $Path | Where-Object {$_.Issuer -like "CN=GO*"}

foreach($Cert in $CertList){
    remove-item "$($Path)$($Cert.Thumbprint)" -Force -WhatIf
}

Dodałem -WhatIftak, aby ten kod nie był niebezpieczny dla folx „copy \ paste \ run”. Teraz trzeba dostosować $Path, Where-Objecti dodać $certnamezmienną, ale powyższy szablon powinien mieć idziesz.

Colyn1337
źródło
3

Chociaż nie udało mi się rozwiązać problemu ze skryptem, udało mi się znaleźć „mądrzejszy / prostszy” sposób na osiągnięcie mojego celu .

Z urzędu certyfikacji:

  • Rt-Click Certificate Templates i wybierzManage
  • Rt-Kliknij szablon certyfikatu, który chcesz zastąpić i wybierz Reenroll All Certificate Holders

Zwiększy to numer wersji szablonu, a systemy sieciowe z automatyczną rejestracją usuną stary certyfikat i zarejestrują się z nowym certyfikatem.

Chociaż wymaga to automatycznej rejestracji dla konkretnego szablonu, nad którym pracuję, najlepszym rozwiązaniem byłoby rozwiązanie opublikowanego skryptu.

Byron C.
źródło