
現在の現場では ActiveDirectory の機能の一つである証明書発行の機能を使って、証明書を作成、その後GPOを使って自動登録をかけています。
これによってVPNなどの通信で使う証明書を各クライアントに配布しているのですが、社員が辞めてしまった後も、ActiveDirectory のオブジェクト削除待機期間中は証明書が有効になってしまっているためセキュリティリスクを抱えておりました。
そのため、作成したのが自動的に証明書を無効化するスクリプトになります。
最初のコマンドはBATでしか用意されていないので、実行してCSVで出力。
その後、必要な部分だけを取り出して、証明書を無効化という流れになります。
BATでしかコマンドが用意されていない場合は現在も多いので、テキストから必要な部分だけを取り出して・・という作業は意外に多くの場面で使います。
# 最初にCert情報を出力させて、それをインポートしたのち、必要な項目だけに絞っておく。
CertUtil -view csv >> $env:UserProfile\desktop\cert.csv
$x = Import-Csv $env:UserProfile\desktop\cert.csv
Remove-Item $env:UserProfile\desktop\cert.csv
# $data=必要なcert情報が入っている変数
$data = $x | select “Certificate Template”,”Requester Name”,”Serial Number”,”Request Disposition”
# 無効化されていて、かつ最終更新日が7日前より新しいユーザーのみを抽出する。(初回に全体で抽出して必要なユーザーはrevoke済みのため)
$Date = (Get-Date).AddDays(-7)
$user = Get-ADUser -Filter { Enabled -eq $false} -Properties whenChanged | ? {$_.whenChanged -ge $date}
$user | % {
$name = $null
$name = “ドメイン名\” + $_.SamAccountName
# $targetの中に該当するユーザーの情報だけを入れる。
$data | % {
if(($_.”Requester Name” -eq $name) -and ($_.”Request Disposition” -eq “20 — Issued”) -and ($_.”Certificate Template” -eq “テンプレート名”))
{
certutil -revoke $_.”Serial Number” 0x5
$note = $_.”Requester Name” + “`t” + $_.”Serial Number” + “`t” + “We have invalidated this user’s certificate.”
$note | Out-file $env:UserProfile\Desktop\cert_Log.csv -Append
$note = $null
}
}
}
この記事へのコメントはありません。