Powershell Elimina da remoto i certificati PKI


9

Recentemente ho ricostruito la mia PKI e vorrei eliminare i certificati che erano stati emessi su tutte le macchine client attraverso la mia rete. Sembra un lavoro per Powershell! Quindi ho scritto questo script per essere distribuito dall'oggetto Criteri di gruppo, eseguito da SysVol e attivato su macchine client all'avvio:

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 }
}

Da un prompt dei comandi elevato:

  • Quando è attivo, lo script non fornisce alcun output (semplicemente una nuova linea terminale). Non restituisce errori e il certificato non viene eliminato.
  • Quando l'argomento -WhatIfviene aggiunto al Remove-Itemcomando nello script, di nuovo nessun errore e il certificato non viene eliminato.
  • Quando Remove-Item. \ CERTIFICATE-THUMBPRINT -Force viene eseguito, il certificato viene eliminato.

Si tratta di un problema di autorizzazioni? Esiste un modo più intelligente / semplice per farlo?

Grazie!


1
ci hai provato remove-item -whatif??
MDMoore313,

@BigHomie. Sì, ci ho provato. Mi sembra di aver rimosso queste informazioni in una modifica ...
Byron C.

1
Nel tuo blocco di codice condizionale, aggiungi a write-hostper scaricare qualcosa sullo schermo se il condizionale è vero. Mi chiedo se lo script stia valutando come falso (spiegherebbe l'assenza di errori e nessuna azione).
Colyn1337,

@ Colyn1337 Yep. Sta valutando True.
Byron C.

@ByronC. Cosa succede se il blocco codice è giusto Remove-Item -Force?
Colyn1337,

Risposte:


6

La mia risposta è per "Esiste un modo più intelligente / semplice per farlo?" parte della tua domanda. Questa sceneggiatura è riuscita a rimuovere un certificato papà per me

$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
}

Ho aggiunto un in -WhatIfmodo che questo codice non fosse pericoloso per il folx "copy \ paste \ run". Ora, dovrai adattare il $Path, Where-Objecte aggiungere la $certnamevariabile, ma il modello sopra dovrebbe farti andare.


3

Sebbene non sia stato in grado di risolvere il problema con la sceneggiatura, sono stato in grado di trovare un modo "più intelligente / più semplice" per raggiungere il mio obiettivo .

Dall'autorità di certificazione:

  • Rt-Click Certificate Templatese selezionareManage
  • Rt-Fare clic sul modello di certificato che si desidera sostituire e selezionare Reenroll All Certificate Holders

Ciò aumenterà il numero di versione del modello e i sistemi di rete con registrazione automatica elimineranno il vecchio certificato e si registreranno con il nuovo certificato.

Sebbene ciò richieda l'iscrizione automatica per il modello specifico con cui sto lavorando, una soluzione per lo script pubblicato sarebbe una risposta preferibile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.