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