web-dev-qa-db-ja.com

PowershellがPKI証明書をリモートで削除する

最近PKIを再構築したので、ネットワーク上のすべてのクライアントマシンに発行された証明書を削除したいと思います。 Powershellの仕事のように聞こえます!そのため、このスクリプトはGPOによって配布され、SysVolから実行され、起動時にクライアントマシンでトリガーされるように記述しました。

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

管理者特権のコマンドプロンプトから:

  • Ranの場合、スクリプトは何も出力しません(単に新しい端末行)。エラーは返されず、証明書は削除されません。
  • 引数-WhatIfがスクリプトのRemove-Itemコマンドに追加されても、エラーは発生せず、証明書は削除されません。
  • Remove-Item。\ CERTIFICATE-THUMBPRINT -Forceを実行すると、証明書が削除されます。

これは権限の問題ですか?これを行うためのよりスマートで簡単な方法はありますか?

ありがとう!

9
Byron C.

私の答えは、「これを行うためのよりスマートで簡単な方法はありますか?」です。あなたの質問の一部。このスクリプトは、Go Daddy証明書の削除に成功しました

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

-WhatIfを追加して、このコードが "copy\paste\run"フォークにとって危険ではないようにしました。ここで、$PathWhere-Objectを調整し、$certname変数を追加する必要がありますが、上記のテンプレートで十分です。

6
Colyn1337

スクリプトで問題を解決することはできませんでしたが、 目標を達成するための「よりスマートでシンプルな」方法を見つけることができました

認証局から:

  • Rt-Click Certificate Templatesを選択し、Manageを選択します
  • 置き換える証明書テンプレートをRt-クリックし、Reenroll All Certificate Holdersを選択します

これにより、テンプレートのバージョン番号が増加し、自動登録でネットワークシステムが古い証明書を削除して、新しい証明書で登録します。

これには、使用している特定のテンプレートの自動登録が必要ですが、投稿されたスクリプトの解決策が望ましい回答です。

3
Byron C.