我正在尝试检索一堆 IIS 网站的证书并将指纹与我拥有的证书进行匹配。如果指纹匹配,那就完全没问题。但是,如果指纹不匹配,那么我想将该特定证书添加到该网站。我知道我可以使用以下方法验证所需的证书是否存在:
Get-ChildItem -Path Cert:\LocalMachine\My | Select-Object Thumbprint
我可以使用以下方法获取 IIS 网站并查看绑定:
Get-ChildItem -Path IIS:Sites | Select-Object -ExpandProperty Bindings
但是,我不知道如何检索这些网站的证书指纹。我将目标证书的指纹存储在变量中,如下所示:
$CertThumbprint = "###############################"
如果我的方法不对,请告诉我。谢谢你。
首先,这不是我的代码,发现这里。
你也许可以试试这个:
Import-Module WebAdministration
$siteThumbs = Get-ChildItem IIS:SSLBindings | Foreach-Object {
[PSCustomObject]@{
Site = $_.Sites.Value
Thumbprint = $_.Thumbprint
}
}
这将为您提供一组包含站点和指纹的对象供您比较。
从您的评论中,我收集到多个网站可以共享相同的指纹并单独列出它们,您可以这样做(未经测试)
Import-Module WebAdministration
$siteThumbs = Get-ChildItem IIS:SSLBindings | Foreach-Object {
$thumb = $_.Thumbprint
foreach ($site in $_.Sites.Value) {
[PSCustomObject]@{
Site = $site
Thumbprint = $thumb
}
}
}
(1) IIS 站点可能有“N”个 SSL 绑定,具体取决于多个主机名和/或端口的使用,因此要捕获您可以执行的操作:
Import-Module WebAdministration
Get-ChildItem IIS:SSLBindings | Foreach-Object {
[PSCustomObject]@{
Site=$_.sites.value
HostName=$_.Host
Port=$_.Port
Thumb=$_.thumbprint
}
}
奖励部分:以下将展示如何查询远程服务器,并仅根据唯一的指纹进行预过滤,同时还查询 HKLM:\ 以协助显示典型的证书信息。
$ComputerName = 'Server1','Server2'
$Results = Invoke-Command -ComputerName $ComputerName -Credential $MyCred -ScriptBlock {
Import-Module WebAdministration
$SSLBindings = Get-ChildItem IIS:SSLBindings |
Sort-Object thumbprint -unique
$SSLBindings | Foreach-Object {
$cert = Get-ChildItem cert:\LocalMachine\My |
Where-Object thumbprint -Match $_.thumbprint |
Select-Object Subject, SerialNumber, NotBefore, NotAfter
[PSCustomObject]@{
Site = $_.sites.value
Thumb = $_.thumbprint
Subject = $cert.Subject
Serial = $cert.SerialNumber
NotBefore = $cert.NotBefore
NotAfter = $cert.NotAfter
}
}
}
$Results