Powershell Xóa từ xa chứng chỉ PKI


9

Gần đây tôi đã xây dựng lại PKI của mình và tôi muốn xóa các chứng chỉ được cấp cho tất cả các máy khách trên mạng của mình. Nghe có vẻ như một công việc cho Powershell! Vì vậy, tôi đã viết kịch bản này để được phân phối bởi GPO, chạy từ SysVol và được kích hoạt trên các máy khách khi khởi động:

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

Từ một dấu nhắc lệnh nâng cao:

  • Khi Ran, tập lệnh không có đầu ra (đơn giản là một dòng thiết bị đầu cuối mới). Nó trả về không có lỗi và Chứng chỉ không bị xóa.
  • Khi đối số -WhatIfđược thêm vào Remove-Itemlệnh trong tập lệnh, một lần nữa không có lỗi và Chứng chỉ không bị xóa.
  • Khi Xóa-Mục. \ CHỨNG NHẬN-THUMBPRINT -Force được chạy, chứng chỉ sẽ bị xóa.

Đây có phải là một vấn đề quyền? Có cách nào thông minh hơn / đơn giản hơn để làm điều này?

Cảm ơn!


1
Bạn đã thử remove-item -whatif??
MDMoore313

@BigHomie. Vâng, tôi đã thử điều đó. Tôi dường như đã xóa thông tin đó trong một chỉnh sửa ...
Byron C.

1
Trong codeblock có điều kiện của bạn, hãy thêm vào write-hostđể kết xuất một cái gì đó trên màn hình nếu điều kiện là đúng. Tôi tự hỏi nếu tập lệnh được đánh giá là sai (sẽ giải thích không có lỗi và không có hành động).
Colyn1337

@ Colyn1337 Yep. Đó là đánh giá Đúng.
Byron C.

@ByronC. Điều gì xảy ra nếu codeblock chỉ Remove-Item -Force?
Colyn1337

Câu trả lời:


6

Câu trả lời của tôi là "Có cách nào thông minh hơn / đơn giản hơn để làm việc này không?" một phần câu hỏi của bạn Kịch bản này đã thành công trong việc loại bỏ một chứng nhận cha đi cho tôi

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

Tôi đã thêm một -WhatIfmã để mã này không gây nguy hiểm cho folx "copy \ paste \ run". Bây giờ, bạn sẽ cần phải thích ứng với $Path, Where-Objectvà thêm $certnamebiến, nhưng các mẫu trên nên có bạn đi.


3

Mặc dù tôi không thể giải quyết vấn đề với kịch bản, tôi đã có thể tìm ra cách 'Thông minh hơn / Đơn giản hơn' để đạt được mục tiêu của mình .

Từ cơ quan cấp chứng chỉ:

  • Nhấp chuột Certificate Templatesvà chọnManage
  • Rt-Nhấp vào Mẫu chứng chỉ bạn muốn thay thế và chọn Reenroll All Certificate Holders

Điều này sẽ tăng số Phiên bản của mẫu và hệ thống mạng có đăng ký tự động sẽ xóa chứng chỉ cũ và đăng ký với chứng chỉ mới.

Mặc dù điều này yêu cầu tự động đăng ký cho mẫu cụ thể mà tôi đang làm việc, một giải pháp cho tập lệnh được đăng sẽ là một câu trả lời thích hợp hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.