我收到错误
无法检索证书,因为指纹无效。 验证指纹并重试。
当我尝试在本地计算机证书存储中使用证书时。
我有一个管理员帐户在本地计算机证书存储中安装了证书(包括私钥(,并为某些用户提供了对私钥的访问权限(例如功能 ID(。
我希望能够运行以下代码来获取指纹,然后在Invoke-WebRequest
调用中使用指纹:
$certStorePath = "Cert:LocalMachineMy"
$certDetails = Get-ChildItem -Path $certStorePath | Where-Object {$_.Subject -like "*myCert*"} # Returns one result
$certThumbprint = $certDetails.Thumbprint
Invoke-WebRequest -Uri $externalUrl -Proxy $proxyServer -UseBasicParsing -CertificateThumbprint $certThumbprint
我可以获取证书详细信息,包括指纹 ($certDetails(,但似乎权限不允许我(或 FID(使用证书(或者可能只是访问证书的私钥部分(。当证书安装在当前用户存储中时,该代码有效。
如何为此类非管理员用户启用对本地计算机存储中证书的访问?
似乎这个问题与Invoke-WebRequest
以及它在这一段代码中的使用方式有关。
代码的第一部分能够成功访问证书:
$certStorePath = "Cert:LocalMachineMy"
$certDetails = Get-ChildItem -Path $certStorePath | Where-Object {$_.Subject -like "*myCert*"}
但是,尽管指纹在所有证书存储中都是唯一的(例如,此指纹仅存在于 LocalMachine 中(,但Invoke-WebRequest
无法访问它,因为它只会在 CurrentUser 证书存储中查找。
因此,总的来说,要使其正常工作:
- 安装包含私钥的证书。
- 向相应的用户/FID 提供对证书私钥部分的访问权限。
- 使用
Get-ChildItem
获取证书本身,并将其传递给Invoke-WebRequest
而不是指纹:
$certStorePath = "Cert:LocalMachineMy"
$certificate = Get-ChildItem -Path $certStorePath | Where-Object {$_.Subject -like "*myCert*"} # Returns one result
Invoke-WebRequest -Uri $externalUrl -Proxy $proxyServer -UseBasicParsing -Certificate $certificate