gpt4 book ai didi

Powershell通过Thumbprint检索证书作为字符串与字符串变量

转载 作者:行者123 更新时间:2023-12-02 23:36:11 24 4
gpt4 key购买 nike

我正在尝试拼凑一些 PowerShell 代码以遍历服务器列表,返回有关其 IIS 站点和绑定(bind)的一些信息,如果它们具有 https 绑定(bind),则获取证书哈希并使用它通过指纹定位证书并返回其截止日期。

我遇到的问题是,当我在 $binding.cerficateHash 下面运行我的代码时,似乎返回了我所期望的证书哈希字符串,但是当我使用该证书哈希属性尝试通过其指纹获取证书时,它不起作用...但是当我获取证书哈希值的原始字符串值并对其进行硬编码时,它可以工作...

我检查了 certificateHash.GetType() 它似乎只是一个字符串,所以我不明白我做错了什么,我尝试了一些事情,但无济于事,因为这是我第一次破解 powershell 所以有很多我不知道。

$sites = Invoke-Command  -ComputerName $serverName { Import-Module WebAdministration; Get-ChildItem -path IIS:\Sites }  -ErrorAction SilentlyContinue 

foreach($site in $sites)
{
$serverName
$site.name
$site.physicalPath

foreach($binding in $site.bindings.Collection)
{
$binding.protocol
$binding.bindingInformation
$binding.certificateHash
$binding.certificateStoreName

if($binding.certificateHash)
{
# This outputs AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
$binding.certificateHash

# this retrieves a cert and returns its expiration date, Woohooo!
Start-Job Invoke-Command -ComputerName $serverName -ScriptBlock { (Get-ChildItem -path Cert:\LocalMachine\WebHosting | Where-Object {$_.Thumbprint -eq "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" })[0].GetExpirationDateString() }

# this does not find a cert, and ive tried many things, and no dice.
Start-Job Invoke-Command -ComputerName $serverName -ScriptBlock { (Get-ChildItem -path Cert:\LocalMachine\WebHosting | Where-Object {$_.Thumbprint -eq $binding.certificateHash })[0].GetExpirationDateString() }

# i've tried extracting the hash via "tostring" and using that, no dice
$hash = $binding.certificateHash.ToString()
Start-Job Invoke-Command -ComputerName $serverName -ScriptBlock { (Get-ChildItem -path Cert:\LocalMachine\WebHosting | Where-Object {$_.Thumbprint -eq $hash })[0].GetExpirationDateString() }

# i've tried adding some wildcards and using the -like operator, no dice.
$hash = "*" + $binding.certificateHash + "*"
Start-Job Invoke-Command -ComputerName $serverName -ScriptBlock { (Get-ChildItem -path Cert:\LocalMachine\WebHosting | Where-Object {$_.Thumbprint -lilke $hash })[0].GetExpirationDateString() }
}
}
}

站点的示例输出。
  • 站点1
  • D:\Apps\site1
  • http
  • *:80:Site1-test.ourdomain.com
  • https
  • *:443:Site1-test.ourdomain.com
  • 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
  • 虚拟主机
  • 最佳答案

    您调用脚本 block 的计算机不知道 $binding本地 session 中的变量。 (这也是它在传递文字字符串时起作用的原因。)

    尝试将值作为参数传递:

    Invoke-Command -Computer $serverName -Script {
    param ($hash)
    (gci Cert:\LocalMachine\WebHosting | ? Thumbprint -eq $hash)[0].GetExpirationDateString()
    } -Arg $binding.certificateHash

    关于Powershell通过Thumbprint检索证书作为字符串与字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55027044/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com