我试图编写一个验证PowerShell中证书链的脚本(链中的所有证书都没有过期),并找到最接近过期的证书。我使用以下脚本查找颁发者证书:
Get-ChildItem -Recurse -Path Cert:| Where-Object {$ _。Subject -eq $ Certificate.Issuer}
由于某些证书的某些原因,我获得了多个具有不同Thumbprints的证书,这些证书具有相同的发行人名称,我预计应该只有一个。
证书是否还有其他唯一标识发行人证书的属性?也许还有其他方法来验证证书链?
答案 0 :(得分:4)
查看测试证书:http://poshcode.org/1633
测试证书链和撤销的指定证书
4.0中包含一个Test-Certificate cmdlet http://technet.microsoft.com/en-us/library/hh848639.aspx
我在我的localhost上运行它只是测试它,
Get-childitem cert: -recurse | %{ write-host $_ ; Test-Certificate -cert $_ }
当链中的证书过期时,它会给出一个很好的错误。
警告:连锁状态: CERT_TRUST_IS_NOT_TIME_VALID测试证书:在验证时,所需证书不在其有效期内 当前系统时钟或签名文件中的时间戳。
答案 1 :(得分: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
}
}