使用 powershell 验证证书链

问题描述 投票:0回答:2

我正在尝试编写一个脚本来验证 PowerShell 中的证书链(链中的所有证书都没有过期)并查找最接近过期的证书。我正在使用以下脚本来查找颁发者证书:

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

由于某些原因,对于某些证书,我获得了多个具有不同指纹的证书,这些证书具有相同的颁发者名称,我预计应该只有一个。

证书是否还有其他属性可以唯一标识颁发者证书?也许还有其他方法来验证证书链?

powershell ssl certificate
2个回答
6
投票

查看测试证书: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 :验证时所需的证书不在有效期内 当前系统时钟或签名文件中的时间戳。


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
       }
   }                                                        
© www.soinside.com 2019 - 2024. All rights reserved.