2013-04-24 63 views
4

我正在尝试获取工作脚本以检查在IIS中过期的SSL证书。有许多类似的条目只是获取已到期的安装证书列表,但我需要一些额外的逻辑。Powershell脚本在IIS中查找当前绑定的过期证书

我需要知道的所有证书在X天内过期被A)当前绑定到一个网站和B)该网站必须具备的“入门”

的状态我有一定的信息收集(下同),但我我无法将它们关联起来,所以他们只给我我需要的到期证书。为了增加复杂性,我不能简单地在CN中查找证书主题中的站点名称,因为安装了数百个证书,并且对于同一站点的一个或多个较旧的证书仍然不常见被安装。这就是说,他们有相同的主题。我将需要比较指纹,但通过简单指定站点名称来获取指纹已被证明是困难的。

一些代码,以收集各种相关细节如下:

ActiveSites = get-website | where {$_.State -eq "Started"} 
$DaysToExpiration = 7 
$InstalledCerts = gci cert:\localmachine\my 
$ExpiringCerts = $InstalledCerts | Where {(($_.NotAfter - (Get-Date)).Days) -lt $DaysToExpiration} 

回答

3

可以从IIS:提供商获得绑定到网站上的证书列表:

Get-ChildItem IIS:SSLBindings 

试试这个:

$DaysToExpiration = 7 

$expirationDate = (Get-Date).AddDays($DaysToExpiration) 

$sites = Get-Website | ? { $_.State -eq "Started" } | % { $_.Name } 
$certs = Get-ChildItem IIS:SSLBindings | ? { 
      $sites -contains $_.Sites.Value 
     } | % { $_.Thumbprint } 

Get-ChildItem CERT:LocalMachine/My | ? { 
    $certs -contains $_.Thumbprint -and $_.NotAfter -lt $expirationDate 
} 
+0

你,先生,是一个天才。 $ _。Sites.Value正是我所需要的。我无法弄清楚如何引用它。 – 2013-04-24 15:58:28