Powershell Menghapus Sertifikat PKI dari Jarak Jauh

9

Saya baru-baru ini membangun kembali PKI saya dan saya ingin menghapus sertifikat yang dikeluarkan untuk semua mesin klien di jaringan saya. Kedengarannya seperti pekerjaan untuk Powershell! Jadi saya menulis skrip ini untuk didistribusikan oleh GPO, dijalankan dari SysVol, dan dipicu pada mesin klien saat startup:

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

Dari prompt perintah yang ditinggikan:

  • Saat Ran, skrip tidak memberikan output (hanya jalur terminal baru). Ia tidak mengembalikan kesalahan dan Sertifikat tidak terhapus.
  • Ketika argumen -WhatIfditambahkan ke Remove-Itemperintah dalam skrip, sekali lagi tidak ada kesalahan dan Sertifikat tidak terhapus.
  • Ketika Remove-Item. \ CERTIFICATE-THUMBPRINT -Force dijalankan, sertifikat dihapus.

Apakah ini masalah izin? Apakah ada cara yang lebih pintar / sederhana untuk melakukan ini?

Terima kasih!

Byron C.
sumber
1
apakah kamu mencoba remove-item -whatif??
MDMoore313
@BigHomie. Ya, saya mencobanya. Saya sepertinya telah menghapus informasi itu dalam sebuah pengeditan ...
Byron C.
1
Dalam kode kunci kondisional Anda, tambahkan a write-hostuntuk membuang sesuatu di layar jika kondisi itu benar. Saya ingin tahu apakah skrip dievaluasi sebagai false (akan menjelaskan tidak ada kesalahan dan tidak ada tindakan).
Colyn1337
@ Colyn1337 Yap. Itu mengevaluasi Benar.
Byron C.
@ByronC. Apa yang terjadi jika kode kunci hanya Remove-Item -Force?
Colyn1337

Jawaban:

6

Jawaban saya adalah untuk "Apakah ada cara yang lebih pintar / sederhana untuk melakukan ini?" bagian dari pertanyaan Anda. Script ini berhasil menghapus cert go daddy untuk saya

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

Saya menambahkan -WhatIfsehingga kode ini tidak berbahaya untuk folx "copy \ paste \ run". Sekarang, Anda harus menyesuaikan $Path, Where-Objectdan menambahkan $certnamevariabel, tetapi template di atas harus memiliki Anda pergi.

Colyn1337
sumber
3

Meskipun saya belum dapat menyelesaikan masalah dengan skrip, saya dapat menemukan cara 'Lebih Cerdas / Lebih Sederhana' untuk mencapai tujuan saya .

Dari Otoritas Sertifikat:

  • Rt-Click Certificate Templatesdan pilihManage
  • Rt-Klik Templat Sertifikat yang ingin Anda ganti dan pilih Reenroll All Certificate Holders

Ini akan menambah nomor Versi templat dan sistem jaringan dengan pendaftaran otomatis akan menghapus sertifikat lama dan mendaftar dengan sertifikat baru.

Meskipun ini memerlukan pendaftaran otomatis untuk templat spesifik yang saya kerjakan, solusi untuk skrip yang diposting akan menjadi jawaban yang lebih baik.

Byron C.
sumber