2013-11-25 79 views
6

我正在嘗試編寫一個腳本,用於在PowerShell中驗證證書鏈(證書鏈中的所有證書都未過期)並找到最接近過期的證書。我正在使用以下腳本來查找發行者證書:使用powershell驗證證書鏈

Get-ChildItem -Recurse -Path Cert:| Where-Object {$ _。Subject -eq $ Certificate.Issuer}

由於某些證書的某些原因,我獲得了多個具有不同指紋的證書,它們具有相同的頒發者名稱,我預計應該只有一個。

是否有任何證書唯一標識發行人證書的其他屬性?也許還有其他一些方法來驗證證書鏈?

回答

4

退房測試證書:http://poshcode.org/1633

試驗證書鏈和吊銷

指定的證書沒有包含在4.0
http://technet.microsoft.com/en-us/library/hh848639.aspx

我跑測試證書cmdlet的這在我的本地主機只是測試它,

Get-childitem cert: -recurse | %{ write-host $_ ; Test-Certificate -cert $_ } 

當鏈中的證書過期時,它給出了一個很好的錯誤。

警告:鏈中的地位: CERT_TRUST_IS_NOT_TIME_VALID試驗證明:對 當前系統時鐘或簽名文件中的時間戳驗證時要求的證書不在有效期內。

+0

謝謝。使用X509Chain類我很容易檢索證書鏈。 – Ievgen

1

我需要盤點所有有效期限爲私鑰的證書。 下面的代碼示例在Powershell 3.0下測試 Try/Catch結構允許從沒有私鑰的證書中抑制令人討厭的紅色錯誤文本。

Set-Strictmode -Version Latest 
$arrCerts = Get-Childitem CERT:\ -Recurse     
foreach ($objItem in $arrCerts) { 
    Try { $blnFound = ($objItem.HasPrivateKey -eq $True) } 
    Catch { $blnFound = $False }        
    if ($blnFound) {           
     $arrSplit = $objItem.PSParentPath -split "::"   
     write-host 'Path  '$arrSplit[1]     
     write-host 'Subject  '$objItem.SubjectName.Name 
     write-host 'Expires  '$objItem.NotAfter   
     write-host 'Private Key '$objItem.HasPrivateKey  
     write-host 
     } 
    }