HI,早上好,cantgis又和大家見面了。
今天我們聊聊關於證書這塊的事情,我們使用了很多網站驗證證書,其中 銀行、娛樂網站等等,他們每年都會到期一次。
在Internet Explorer中的證書列表,過期的證書的集合,不規則的存在著,我們如何查詢獲得和處理呢?下面cantgis 帶給大家這套解決方案。
想要獲得和找到這些證書,我們要使用x.509證書提供商(Microsoft.PowerShell.SecurityCertificate)
在powershell2.0中,需要我們通過手動來清理這些,X509store類物件,並且使用get-item:
$myCerts = Get-Item Cert:CurrentUserMy
緊接下來,我們想要刪除證書,必須通過列舉:openflags開啟這個x509證書儲存物件。這個open()方法:你可以建立一個新的儲存或者設定訪問指定儲存(當然基於openflags)
預設情況下這個store是隻讀的,我們不要開啟它,當然也不能刪除掉。
成員名稱 | 說明 | |
---|---|---|
IncludeArchived | 開啟 X.509 證書儲存區並新增存檔證書。 | |
MaxAllowed | 以允許最高階訪問的方式開啟 X.509 證書儲存區。 | |
OpenExistingOnly | 僅開啟現有儲存區。如果不存在任何儲存區,Open 方法不會建立新的儲存區。 | |
ReadOnly | 以只讀方式開啟 X.509 證書儲存區。 | |
ReadWrite | 以讀寫方式開啟 X.509 證書儲存區。 |
OK 我們使用
$myCerts.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
通過下面的cmdlet過濾那些在昨天就過期的證書,$mycerts 已經指向的路徑,我們可以拿它來做一個參考,並不是讓大家去重複的編碼形成無用的字串。
$today = Get-Date $ExpiredList = Get-ChildItem $myCerts.PSPath | Where-Object { $_.NotAfter -lt $today }
我們不想每次都呼叫管道:where-object 的cmdlet指令,因為我們不需要這樣
刪除麼個證書的x.509證書儲存區,然後我們執行查詢
ForEach ($Cert in $ExpiredList) { $myCerts.Remove($Cert) } $myCerts.Close() # We opened it, so we need to close it.
在powershell 3.0 中我們可以整合在一起來執行
$today = Get-Date Get-ChildItem Cert:CurrentUserMy | Where-Object NotAfter -lt $today | Remove-Item #或者 Get-ChildItem Cert:CurrentUserMy | ForEach-Object -begin { $now = get-date } -process { if ($PSItem.NotAfter -lt $now ) Remove-Item