使用powershell验证证书链

时间:2013-11-25 20:54:50

标签: powershell ssl certificate

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

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

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

证书是否还有其他唯一标识发行人证书的属性?也许还有其他方法来验证证书链?

2 个答案:

答案 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
       }
   }